透過覆寫 TForm 的虛擬函式 CreateParams,在視窗建立前移除 WS_CAPTION 樣式;再攔截 WM_NCHITTEST 訊息,讓用戶端區域回傳 HTCAPTION,即可實現無標題列仍可拖曳移動視窗。
void __fastcall CreateParams(TCreateParams& Params)
{
Params.Style &= ~WS_CAPTION; // 移除標題列樣式
TForm::CreateParams(Params);
}
標頭檔 (.h) 宣告:
private:
void __fastcall WMNChitTest(TMessage& Msg);
protected:
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_NCHITTEST, TMessage, WMNChitTest)
END_MESSAGE_MAP(TForm)
實作檔 (.cpp) 定義:
void __fastcall WMNChitTest(TMessage& Msg)
{
if (GetAsyncKeyState(VK_LBUTTON) < 0)
Msg.Result = HTCAPTION; // 滑鼠左鍵按下時視為標題列
else
Msg.Result = HTCLIENT; // 否則為用戶端區域
}