全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3379
推到 Plurk!
推到 Facebook!

VC++ 與 BCB 自訂訊息傳遞實作與比較

 
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-19 13:00:21 IP:218.32.xxx.xxx 未訂閱
必讀觀念 [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
系統時間:2024-04-19 14:42:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!