線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1067
推到 Plurk!
推到 Facebook!

MSG 的問題

尚未結案
firewing
一般會員


發表:23
回覆:47
積分:19
註冊:2002-12-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-04 13:55:42 IP:139.223.xxx.xxx 未訂閱
請問各位大大: 我以下面此種方式攔截訊息 //main.h BEGIN_MESSAGE_MAP VCL_MESSAGE_HANDLER(WM_CHAR, MSG , test) END_MESSAGE_MAP(TForm) //main.cpp void __fastcall TForm1::test(MSG m) { //TODO: Add your source code here if(m.message==WM_CHAR) // int i=10; } 上面的寫法 int i=10 都不會被執行到... 為什麼 m.message 會等於我所按下鍵的 ASCII CODE 我查 BCB的 MSDN 所定義的 WM_CHAR m.message 應該是訊息本身才對,而 m.wParam 才是 ASCII CODE 是哪裡有錯誤嗎??? 我知道若宣告為 TMessage m 之後 m.Msg 會等於訊息, 我只是無聊想試試看以 MSG 的方法,只是一直都不太正確... 謝謝各位.... 發表人 - firewing 於 2003/04/04 17:55:02 發表人 - firewing 於 2003/04/04 17:56:06
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-04 17:01:45 IP:203.75.xxx.xxx 未訂閱
typedef struct tagMSG {     // msg       HWND   hwnd;              UINT   message;      WPARAM wParam;      LPARAM lParam;      DWORD  time;      POINT  pt;  } MSG;     struct TMessage    {         Cardinal Msg;         union         {                 struct                  {                         Word WParamLo;                         Word WParamHi;                         Word LParamLo;                         Word LParamHi;                         Word ResultLo;                         Word ResultHi;                                          };                 struct                  {                         int WParam;                         int LParam;                         int Result;                 };                          }; } ;    兩個做比較, 你該知道為什麼了吧, 在結構上 MSG 是位於第二個欄位(正確的說法是要算記意體的 offset), 對應的正好是 wParam 的位置, 下次記得查 help 吧.    Jesse Chan
------
Jesse Chan
firewing
一般會員


發表:23
回覆:47
積分:19
註冊:2002-12-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-04 17:49:34 IP:139.223.xxx.xxx 未訂閱
jessechan 兄: 不好意思,這兩個 help 我都看過了.. 但我還是不太懂你的意思ㄟ.... 你是說...VCL_MESSAGE_HANDLER(WM_CHAR, MSG , test) (WM_CHAR,MSG,test)整個是 MSG 的結構嗎??? 而 WM_CHAR 所代表的是 MSG 結構中的 message 而 MSG 所代表的是 MSG 結構中的 wParam
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-05 16:12:39 IP:61.228.xxx.xxx 未訂閱
有問題的地方在這裡 VCL_MESSAGE_HANDLER(WM_CHAR, MSG , test) 第二個參數的 type 是 TMessage, 你如果硬要把它 casting 成 MSG 在 compile 時不會出錯, 但是如同我上面所列的, MSG 和 TMessage 的結構並不相同, 請你仔細比對一下, 就會發現為什麼你的數值會被填錯地方了. 以下是一個例子. ... public:     BEGIN_MESSAGE_MAP         VCL_MESSAGE_HANDLER(WM_MOUSEMOVE,TMessage,OnMouseMove);     END_MESSAGE_MAP(TCustomPanel); ...    private:     void __fastcall OnMouseMove(TMessage &Message);    Jesse Chan
------
Jesse Chan
系統時間:2024-04-26 7:54:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!