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

C++ Builder 系統消息與自訂消息響應完整指南

     編輯:關於C++

一、系統定義消息直接響應

在類別宣告的 protected 區加入處理函數,並以 BEGIN_MESSAGE_MAP 掛接:

class TSomeForm : public TForm {
protected:
    void __fastcall GetWindowMinMaxInfo(TWMGetMinMaxInfo Message);
    // ...
    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_GETMINMAXINFO, TWMGetMinMaxInfo, GetWindowMinMaxInfo)
    END_MESSAGE_MAP(TForm)
};

實作:限制視窗最小尺寸

void __fastcall TSomeForm::GetWindowMinMaxInfo(TWMGetMinMaxInfo Message)
{
    MINMAXINFO *MinMaxInfo = Message.MinMaxInfo;
    MinMaxInfo->ptMinTrackSize.x = 400;  // 最小寬度
    MinMaxInfo->ptMinTrackSize.y = 300;  // 最小高度
}

二、自訂消息定義與跨模組通訊

1. 定義消息 ID(避開系統保留範圍)

#define WM_MY_OPEN_CMDLINE_FILE (WM_USER + 1)  // 命令列檔案傳遞
#define WM_MY_SEARCH_NODE       (WM_USER + 2)  // 節點搜尋觸發

2. 類別宣告掛接

class TSomeForm : public TForm {
protected:
    void __fastcall OpenCmdLineFile(TMessage Message);
    void __fastcall SearchDocumentNode(TMessage Message);
    // ...
    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_MY_OPEN_CMDLINE_FILE, TMessage, OpenCmdLineFile)
        MESSAGE_HANDLER(WM_MY_SEARCH_NODE,       TMessage, SearchDocumentNode)
        MESSAGE_HANDLER(WM_GETMINMAXINFO,        TWMGetMinMaxInfo, GetWindowMinMaxInfo)
    END_MESSAGE_MAP(TForm)
};

3. 實作細節

// 接收命令列參數(LParam 傳遞字串指標)
void __fastcall TSomeForm::OpenCmdLineFile(TMessage Message)
{
    LPSTR lpCmdLine = (LPSTR)Message.LParam;
    this->HandleCmdLineFile(lpCmdLine);
}

// 觸發搜尋功能(無額外參數)
void __fastcall TSomeForm::SearchDocumentNode(TMessage Message)
{
    this->SearchNode();
}

三、進階:自訂消息結構體

若需傳遞結構化資料,可自行定義結構體,參考 Messages.hpp 中 VCL 既有定義風格:

// 範例:搜尋節點參數結構
struct TSearchNode_Message {
    unsigned int Msg;
    int          NodeID;
    char         Keyword[64];
    long         Result;
};

對應處理函數簽名改為 void __fastcall Handler(TSearchNode_Message &Msg),映射表中型別同步修改。

四、關鍵參考檔案

所有 VCL 訊息結構體定義於:

C:\Program Files\Borland\CBuilder\Include\Vcl\Messages.hpp

五、最佳實務提醒

  • WM_USER 以上範圍供應用程式自訂,WM_APP (0x8000) 以上更安全,避免與第三方控件衝突。
  • 跨進程傳遞指標(如 LParam 存放字串位址)僅限同一進程;跨進程需用 WM_COPYDATA、共享記憶體或 RPC。
  • 自訂結構體務必保持對齊與大小一致,發送端與接收端編譯選項需一致。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved