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

C++ Builder 實作無標題列可拖曳視窗

     編輯:關於C++

移除標題列並支援拖曳移動

覆寫 CreateParams 移除 WS_CAPTION 後,視窗失去標題列也就無法用滑鼠拖曳。需額外攔截 WM_NCHITTEST 訊息,滑鼠左鍵按下時回傳 HTCAPTION 讓系統以為點在標題列上。

程式碼實作

標頭檔

private:
    void __fastcall WMNChitTest(TMessage & Msg);
protected:
    BEGIN_MESSAGE_MAP
        VCL_MESSAGE_HANDLER(WM_NCHITTEST, TMessage, WMNChitTest)
    END_MESSAGE_MAP(TForm)
    virtual void __fastcall CreateParams(TCreateParams & Params);

實作檔

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

void __fastcall TForm1::WMNChitTest(TMessage & Msg)
{
    if (GetAsyncKeyState(VK_LBUTTON) < 0)
        Msg.Result = HTCAPTION; // 左鍵按下時視為點在標題列
    else
        Msg.Result = HTCLIENT;
}

注意事項

  • 使用 Params.Style &= ~WS_CAPTION (位元 AND NOT) 比 XOR 更安全,確保只關閉該位元。
  • 此法適用於任何需無標題列但仍可拖曳的視窗。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved