在類別宣告的 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; // 最小高度
}
#define WM_MY_OPEN_CMDLINE_FILE (WM_USER + 1) // 命令列檔案傳遞
#define WM_MY_SEARCH_NODE (WM_USER + 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)
};
// 接收命令列參數(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。