實作步驟
- 覆寫
CreateParams,加入 WS_EX_TRANSPARENT 延伸樣式。
- 覆寫
WM_ERASEBKGND 訊息處理,設定背景模式為不透明並回傳 1 表示已處理。
完整程式碼範例
標頭檔 (TYourForm.h)
class TYourForm : public TForm
{
private:
void __fastcall WMNC(TMessage &Message);
public:
__fastcall TYourForm(TComponent *Owner);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_ERASEBKGND, TMessage, WMNC)
END_MESSAGE_MAP(TForm)
protected:
virtual void __fastcall CreateParams(TCreateParams &Params);
};
實作檔 (TYourForm.cpp)
void __fastcall TYourForm::CreateParams(TCreateParams &Params)
{
TForm::CreateParams(Params);
Params.ExStyle |= WS_EX_TRANSPARENT; // 設定透明延伸樣式
}
void __fastcall TYourForm::WMNC(TMessage &Message)
{
SetBkMode(GetWindowDC(this->Handle), OPAQUE);
ReleaseDC(this->Handle, GetWindowDC(this->Handle));
Message.Result = 1; // 表示已處理背景擦除
}