VC++ 與 BCB 自訂訊息傳遞實作與比較 |
|
anpino
版主 發表:31 回覆:477 積分:231 註冊:2003-01-02 發送簡訊給我 |
必讀觀念
[url="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/aboutmessagesandmessagequeues.asp"]About Message And Message Queues[/url]
------------------------------------------- VC Example 1 ------------------------------------------- [DemoDlg.h]: #define WM_MYCOMMAND WM_USER 1 // 自訂訊息 class CDemoDlg : public CDialog { ... public: void OnMyCommand(WPARAM wParam, LPARAM lParam); ... } [DemoDlg.cpp]: BEGIN_MESSAGE_MAP(CDemoDlg, CDialog) ON_MESSAGE(WM_MYCOMMAND,OnMyCommand) END_MESSAGE_MAP() // 設定接收訊息函式 AfxGetMainWnd()->PostMessage(WM_MYCOMMAND , NULL(或其他message1), NULL(或其他message2) ); // 傳送訊息例 void CDemoDlg::OnMyCommand(WPARAM wParam, LPARAM lParam) { // 使用 GetMessage 或 PeekMessage 取得訊息 // 見 MSDN } ------------------------------------------- VC Example 2 ------------------------------------------- [DemoDlg.h]: #define DATA_READY _T("data ready") static const UINT MsgDataReady = ::RegisterWindowMessage(DATA_READY); // 自訂訊息 class CDemoDlg : public CDialog { ... public: OnDataReady(UINT wpara, INT lparam); ... } [DemoDlg.cpp]: BEGIN_MESSAGE_MAP(CDemoDlg, CDialog) ON_REGISTERED_MESSAGE(MsgDataReady, OnDataReady) END_MESSAGE_MAP() // 設定接收訊息函式 LONG APIENTRY MainWndProc( HWND hwnd, // window handle UINT message, // type of message UINT wParam, // additional information LONG lParam) // additional information { ... SendMessage(hwnd, MsgDataReady, message1 , message2 ); // 傳送訊息例 ... } int CDemoDlg::OnDataReady(UINT wpara, INT lparam) { // 使用 GetMessage 或 PeekMessage 取得訊息 // 見 MSDN } ------------------------------------------- BCB Example 1 ------------------------------------------- [Unit1.h]: #define WM_MYCOMMAND WM_USER 1 // 自訂訊息 class TForm1 : public TForm { ... public: void __fastcall OnMyCommand(tagMSG &Msg); protected: BEGIN_MESSAGE_MAP VCL_MESSAGE_HANDLER(WM_MYCOMMAND, tagMSG, OnMyCommand) END_MESSAGE_MAP(TForm) // 設定接收訊息函式 ... } [Unit1.cpp 或其他 form、cpp、c ]: PostMessage(Form1->Handle, WM_MYCOMMAND , NULL(或其他message1), NULL(或其他message2) ); // 傳送訊息例 [Unit.cpp -- Form1的源碼]: void __fastcall TForm1::OnMyCommand(tagMSG &Msg) { PeekMessage(&Msg,Handle,WM_MYCOMMAND,WM_MYCOMMAND,PM_REMOVE); // 取得傳送過來的訊息 // 訊息說明同BCB Example2的AppMessage } ------------------------------------------- BCB Example 2 ------------------------------------------- [Unit1.h]: #define WM_MYCOMMAND WM_USER 1 // 自訂訊息 [Unit1.cpp 或其他 form、cpp、c ]: PostMessage(Form1->Handle, WM_MYCOMMAND , NULL(或其他message1), NULL(或其他message2) ); // 傳送訊息例 [Unit.cpp -- Form1的源碼]: __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Application->OnMessage = AppMessage; // 設定接收訊息函式 } void __fastcall TForm1::AppMessage( tagMSG &Msg, bool &Handled ) { // 處理接收訊息 Msg.message 即傳送訊息中的WM_MYCOMMAND (int)Msg.wParam 即傳送訊息中的 NULL(或其他message1) (int)Msg.lParam 即傳送訊息中的 NULL(或其他message2) }-- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D [url="http://anpino.begin.8d8d.com"]Programmer's Guide[/url] [url="http://home.pchome.com.tw/hot/anpino"]About Anpino[/url] 發表人 - anpino 於 2003/12/19 13:06:49 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |