請教有關Message傳遞的問題 |
答題得分者是:taishyang
|
dueseven
一般會員 ![]() ![]() 發表:5 回覆:9 積分:7 註冊:2007-05-18 發送簡訊給我 |
我寫了一個小程式想要測試利用Windows Message傳遞訊息,但是不知道是不是哪裏有錯誤,
明明有訊息進來,程式就是不會跳進副程式裡執行,希望有經驗的先進能幫我看一下, 到底是Coding哪裏有問題呢? 首先在 header檔中定義了: [code cpp] #define WM_AD120MSG WM_USER 210 [/code] 在Form1.h中定義: [code cpp] class TForm1 : public TForm { protected: void __fastcall OnDeviceMesg(TMessage &msg); BEGIN_MESSAGE_MAP VCL_MESSAGE_HANDLER(WM_AD120MSG,TMessage,OnDeviceMesg) END_MESSAGE_MAP(TForm) .......... } [/code] 最後在Form1.cpp中 [code cpp] void __fastcall TForm1::OnDeviceMesg(TMessage &Message) { ShowMessage("程式有執行到這裏"); } [/code] 整個程式在Compile的時候,都沒有發生錯誤,但我確定有訊息進來時,程式就是不會執行OnDeviceMesg.... 若是各位大大有相關的經驗的話,麻煩請惠賜給小弟,小弟真的快被這個給搞瘋了....謝謝。 |
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
小弟測試是OK的
//傳訊息給自己 void __fastcall TForm1::Button1Click(TObject *Sender) { SendMessage(this->Handle, WM_AD120MSG, NULL, NULL); } //假如是要用另外一個AP傳訊息過來 void __fastcall TForm1::Button1Click(TObject *Sender) { HWND h = FindWindow(NULL, "Form1"); //"Form1"為接收端TForm的Caption屬性名稱" if (h) { SendMessage(h, WM_AD120, NULL, NULL); } } |
dueseven
一般會員 ![]() ![]() 發表:5 回覆:9 積分:7 註冊:2007-05-18 發送簡訊給我 |
感謝 taishyang 兄的回覆,但目前我遇到的問題是訊息是由某一個Library所發出的,此Library會自動到硬體上捉取硬體的狀態,再經由Windows Message遞送出來。
廠商附的原始碼是Delphi,我有將Delphi的原始碼重新Compile過,也成功截取到訊息,但就是不知道為什麼我改寫成BCB之後,反而都進不去那個副程式。 以下是Delphi原始碼的片斷。 [code delphi] const WM_AD120MSG =WM_USER 210 ; .... ..... type TForm1 = class(TForm) Procedure OnDeviceMsg(var msg: TMessage); Message WM_AD120MSG; private { Private declarations } public { Public declarations } end; var Form1: TForm1; m_State:arraystate; implementation {$R *.dfm} ..... ..... Procedure TForm1.OnDeviceMsg(var msg: TMessage); var nMsg :integer; nWaparam :integer; nChannel :integer; lParam:integer; i:integer; szCallerID:ArrayString; szDialDigit:ArrayString; szCPUID:pchar; szRing:string; tagParameter :AD120DEVICEPARAMETER; tHour:integer; tMinute:integer; tSecord:integer; szTalkTime:string; begin nWaparam:=msg.WParam; lParam :=msg.LParam; nMsg := nWaparam Mod 65536 ; nChannel :=Trunc(nWaparam / 65536 ) ; ..... ....... end [/code] |
dueseven
一般會員 ![]() ![]() 發表:5 回覆:9 積分:7 註冊:2007-05-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |