1. 程式人生 > >MFC中PostMessage的使用例子說明

MFC中PostMessage的使用例子說明

   PostMessage(HWND,MSG,WPARAM,LPARAM)

函式功能:

該函式將一個訊息放入(寄送)到與指定視窗建立的執行緒相聯絡訊息佇列裡,不等待執行緒處理訊息就返回,是非同步訊息模式。訊息佇列裡的訊息通過呼叫GetMessage和    PeekMessage取得。

函式原型:

  B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);

參      數: hWnd:其視窗程式接收訊息的視窗的控制代碼。可取有特定含義的兩個值:   HWND_BROADCAST:訊息被寄送到系統的所有頂層視窗,包括無效或不可見的非自身擁有的視窗、被覆蓋的視窗和彈出式視窗。訊息不被寄送到子視窗。
  NULL:此函式的操作和呼叫引數dwThread設定為當前執行緒的識別符號PostThreadMessage函式一樣。   Msg:指定被寄送的訊息。   wParam:指定附加的訊息特定的資訊。   IParam:指定附加的訊息特定的資訊。

  返回值:如果函式呼叫成功,返回非零值:如果函式呼叫失敗,返回值是零。若想獲得更多的錯誤資訊,請呼叫GetLastError函式。

備註:需要以 HWND_BROADCAST方式通訊的應用程式應當用函式 RegisterwindwosMessage來獲得應用程式間通訊的獨特的訊息。

1.自定義訊息ID

#define WM_MY_MESSAGE (WM_USER+100) 

        

WM_USER為windows系統為非系統訊息保留的ID,這裡至少要用100,因為其它控制元件的訊息會佔用一部分。

2. 定義訊息處理函式。

訊息處理函式為訊息目標類的成員函式。首先應該在.h 檔案中宣告。這裡以主視窗類為例,主視窗類名 CMainDialog,則首先在CMainDialog.h宣告訊息處理函式。

protected: 

afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); 

3.在CMainDialog.cpp中實現訊息處理函式

LRESULT CMainDialog::OnMyMessage(WPARAM wParam, LPARAM lParam)


// TODO: 處理使用者自定義訊息 
... 
return 0; 
}

4.在CMainDialog.cpp中對映訊息ID和訊息處理函式

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) 

//{{AFX_MSG_MAP(CMainFrame) 
ON_WM_CREATE() 
ON_WM_TIMER() 
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage) 
//}}AFX_MSG_MAP 
END_MESSAGE_MAP()

在建立執行緒的時候將主視窗控制代碼作為引數傳入執行緒,就可以用 PostMessage傳遞訊息了。


相關推薦

MFCPostMessage的使用例子說明

   PostMessage(HWND,MSG,WPARAM,LPARAM) 函式功能: 該函式將一個訊息放入(寄送)到與指定視窗建立的執行緒相聯絡訊息佇列裡,不等待執行緒處理訊息就返回,是非同步訊息模式。訊息佇列裡的訊息通過呼叫GetMessage和    PeekM

MFCWnd.PostMessage()的作用

看程式中碰到一個監視類,裡面的核心函式就是這個PostMessage()一直不懂有什麼用。 網上對這個函式的講解也不是很多,這裡將零碎的知識進行歸納一下。 簡單的說就是將資訊傳送到訊息佇列並通知視窗取訊息。 我們要實現視窗之間的通訊,這是個比較難的問題,一般的方法有在A窗口裡面定義B視窗

MFC傳送自定義訊息機制,PostMessage和SendMessage方式

       MFC中有種訊息佇列,使用PostMessage()或者SendMessage()給窗體傳送自定義訊息,當窗體接收到訊息時呼叫該訊息對應繫結的方法。 PostMessage:把訊息投放到執行緒的訊息佇列,不等訊息被處理就立即返回;Send

MFCSendMessage和PostMessage兩種傳送訊息用法

前一段時間做專案,用到訊息響應機制,為了記憶,特發與此!待事件充裕之時再進行整理。 1.可通過SendMessage或PostMessage傳送訊息; SendMessage是傳送訊息之後待訊息響應執行完才返回;而PostMessage將訊息傳送出去之後就立刻返回。 2

MFC利用MSComm控制元件實現串列埠通訊的例子

第一步:建工程 第二步:設定基本對話方塊 第三步:設定串列埠ID號 第四步:設定串列埠引數選項 第五步:設定其他控制元件ID號 第六步:新增串列埠控制元件 project->

MFC按下Buttonbutton,彈出一個窗體的同一時候關閉本窗體

彈出 oda size win button class 隱藏 nbut top ?? CMyDlg *dlg = new CMyDlg(); //新建一個CMyDlg對象 this->ShowWindow(SW_HIDE);

[轉]關於VC++ MFC的空閑Idle處理機制!

normal 函數 系統 true check track cor idle 行處理 關鍵詞:   先根據空閑標誌以及消息隊列是否為空這兩個條件判斷當前線程是否處於空閑狀態(這個“空閑”的含義同操作系統的含義不同,是MFC自己所謂的“空閑”),如果是,就調用CW

MFCCTreeGridCtrl設置TreeNode列為Checkbox後,如果獲取選中的Cell

ast treenode span pan dynamic node eid count getc 1、設置TreeNode列為CheckBox: m_Grid.SetTreeColumnCellTypeID(CT_CHECKBOX); 2、獲取選中的Cell,此處需要強轉

OpenGL在MFC的使用總結(一)——基本框架

palette 接受 white 要求 無效 結構 del 一次 是你 項目中要畫3D顯示的模型,於是要用到OpenGL,加上是在MFC中,並且是在MFC中的ActiveX中使用。再並且鑒於他們程序主框架的設定。常規的方法還不一定能實現。所以還是查過不少資料,在此一一總

C++ MFC添加自定義消息映射宏及添加消息響應函數

c++ mfc sindsun 反射消息映射宏 下面是我自己在學習C++過程中遇到的問題及解決過程,我把這個共享出來,希望能幫到遇到同樣問題的同胞! 一、添加消息響應函數 afx_msg void OnOwnerDraw(NMHDR * pNotifyStruct, LRESULT* pRes

VC/MFC的CComboBox控件使用詳解

作用 沒有 opp com 開始 getc 其他 index ear CComboBox控件詳解 CComboBox控件又稱作組合框控件,其有三種形態可供選擇,1.簡單組合框(Simple)2.下拉組合框(Drop-down)3.下拉列表式組合框(Drop-down lis

MFC控件添加了變量後修改

變量 .cpp images 新增 存在 str 一個 ima 項目 新增一個變量這個變量存在於兩個位置,一個是頭文件中項目名+Dlg.h文件,另一個是源文件中項目名+Dlg.cpp文件 MFC中控件添加了變量後修改

MFC給控件添加變量,DoDataExchange

codec logs -s .cn -c oid cati ++ 參數 DoDataExchange函數其實是一項數據動態綁定技術。比如你在寫動態按鈕過程中須對按鈕添加變量時,怎麽添加?控件類已經寫好了,其變量是已經固定的。你要添加新的變量就要用到DoDataExchang

MFC的CMap類使用

mfc cmap #include <afxtempl.h> CMap<CString,LPCTSTR,CString,LPCTSTR>my_Map; CString strKey = _T(""); CString strValue = _T(""

schema屬性聲

屬性 mls 數據 string complex cnblogs org code attr <attribute name="屬性名" default="默認值" fixed="固定值" use="option|required" type="數據類型名"&

MFC修改光標形狀

長度 路徑 如果 類型 oge 拷貝 pre 應該 str 修改光標形狀,如果是修改系統內光標形狀,那就很簡單了,直接是用::SetCursor(::LoadCursor(NULL,MAKEINTRESOURCE(IDC_CURSOR1)))就可以修改成功了,但這只是更改一

H5postMessage解決數據跨域

pan listen iframe nbsp .get 指定 element lis code 一、發送端(http://a.domain.com): 1、添加一個iframe,指定接收的頁面: <iframe id="receivePage" src="ht

c++ ‘nullptr’ 在此作用域尚未聲

c++11 blog 選項 XML 作用 log -s ptr 作用域 編譯加上如下選項:-std=c++11 g++ 1.cpp -o k -std=c++11c++ ‘nullptr’ 在此作用域中尚未聲明

java枚舉(二):即對java枚舉(一)例子進行拓展

枚舉/* 知識點:枚舉 枚舉是從java5開始提供的一種新的數據類型,是一個特殊的類,就是多個常量對象的集合 定義格式: [修飾符] enum 枚舉類名 { 常量A, 常量B, 常量C; } */ //定義枚舉 enum Weekday { Mond

MFC不同窗口間的切換

AR class com detail ive https .com www. article https://blog.csdn.net/dpsying/article/details/17458401 http://www.docin.com/p-707972220.h