首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

重載 CreateParams 移除標題列並實現無邊框視窗拖曳

     編輯:VC 教學

核心思路

透過覆寫 TForm 的虛擬函式 CreateParams,在視窗建立前移除 WS_CAPTION 樣式;再攔截 WM_NCHITTEST 訊息,讓用戶端區域回傳 HTCAPTION,即可實現無標題列仍可拖曳移動視窗。

程式碼實作

1. 覆寫 CreateParams 移除標題列

void __fastcall CreateParams(TCreateParams& Params)
{
    Params.Style &= ~WS_CAPTION;  // 移除標題列樣式
    TForm::CreateParams(Params);
}

2. 處理 WM_NCHITTEST 實現拖曳

標頭檔 (.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;   // 否則為用戶端區域
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved