最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MFC模擬實現(xiàn)自定義消息發(fā)送

 更新時間:2022年01月27日 15:01:12   作者:中國好公民st  
在MFC框架下,有很多系統(tǒng)已經定義好的消息,例如ON_WM_LBUTTONDOWN()、ON_WM_MBUTTONDOWN()等等。本文將利用這些定義好的消息模擬實現(xiàn)一下消息發(fā)送,需要的可以參考一下

在MFC框架下,有很多系統(tǒng)已經定義好的消息,例如ON_WM_LBUTTONDOWN()、ON_WM_MBUTTONDOWN()等等。我們在使用的時候只需要聲明并調用就可以了,最簡單的用法。

提升了一點難度的用法就是自己設置自定義消息,再提升一點難度的就是如何模擬系統(tǒng)消息了,一般情況下只是做普通的項目開發(fā)功能是用不到的。

在這里,我首先講解下如何實現(xiàn)自定義消息,再深層次的講述如何模擬系統(tǒng)消息,有需要的可以了解下喲~

自定義消息

在有些時候系統(tǒng)定義的消息不能完全滿足程序的應用,這時候就需要進行消息自定義了,那么該如何實現(xiàn)自定義消息呢?

第一步:定義自定義消息名稱以及ID

在MFC框架下,分配了WM_USER之后的消息都是開發(fā)人員可以自定義的消息ID。

假設,定義一個選中觸發(fā)消息:

#define WM_USER_CLICKED WM_USER+1

這種寫法就代表了定義了一個自定義消息,消息名稱叫做:WM_USER_CLICKED,消息ID號是:WM_USER+1

在這里,溫馨提示一句:在做大型的繪圖開發(fā)程序當中,為了方便管理自定義消息,一般都不會直接使用WM_USER進行編號自增,而是使用自定義宏代替WM_USER,為了后續(xù)方便管理,格式如下:

#define  UIXML_WM_BASE   WM_USER + 20000

#define  WM_USER_CLICKED1		UIXML_WM_BASE +0
#define  WM_USER_CLICKED2		UIXML_WM_BASE+1
#define  WM_USER_CLICKED3		UIXML_WM_BASE+2
#define  WM_USER_CLICKED4		UIXML_WM_BASE+3

如果要是你的程序中只存在了一兩個自定義消息,就沒有必要寫成上面的格式了。

這種格式的好處:

可以根據功能劃分自定義消息區(qū)域。假設你目前正在開發(fā)一個僅供公司內部使用的基礎框架類,在自定義消息的時候,需要區(qū)分哪些是自己開發(fā)使用的,哪些是對外開發(fā)者調用的。分工明確,不容易消息錯亂。

第二步:發(fā)送自定義消息

想要在哪里觸發(fā)自定義消息,就需要在哪里發(fā)送消息。

在MFC框架中,有兩種發(fā)送消息機制:SendMessage、PostMessage。

::SendMessage(GetParent()->GetSafeHwnd() , WM_USER_CLICKED ,參數2 , 參數1);

只是舉例子說明,具體的根據實際功能來確定~

第三步:自定義消息映射

ON_MESSAGE(WM_USER_CLICKED1, OnCustomClicked1)

參數一:定義的自定義消息

參數二:實際窗口中響應的映射消息

第四步:自定義消息實現(xiàn)

afx_msg LRESULT OnCustomClicked1(WPARAM  wParam , LPARAM lParam); 

具體的操作應用可以在OnCustomClicked1中編寫了,這要根據實際的需求應用了,這里不再做過多的說明,到這里,應該都知道該如何應用了吧~

模擬系統(tǒng)消息

簡單的自定義消息方法已經在自定義消息中講述了,下面來一個更深層次的提高吧!如何模擬系統(tǒng)消息,為了通俗易懂的講解,這里我們模擬ComboBox控件CBN_SELCHANGE消息。

使用過MFC框架下控件開發(fā)的人都知道,該消息是由系統(tǒng)發(fā)送的,平時我們只是應用下就可以了,要是讓自己寫一個這樣的觸發(fā)消息,該如何實現(xiàn)呢?

前提條件:繼承CWnd類模擬ComboBox控件,這時候,所有的控件消息都需要自己內部模擬,那么,想要讓外部開發(fā)人員調用起來與系統(tǒng)的ComboBox中的消息一致,該怎么實現(xiàn)呢?

假設我們應用SendMessage進行消息發(fā)送,此時也是需要發(fā)送消息,但是需要發(fā)送命令消息:WM_COMMAND

WM_COMMAND在什么時候被觸發(fā)呢?

1:當用戶從菜單中選擇命令項時

2:當控件向其父窗口發(fā)送消息時

3:當加速鍵擊被翻譯時

其實,在WINDOW9X以上都是在發(fā)送WM_NOTIFY,但是為了做成兼容基類,所以,依舊采用的是WM_COMMAND消息。

一旦指定了使用WM_COMMAND來進行消息發(fā)送,這時候wParam以及l(fā)Param該發(fā)送什么數據呢?

wParam參數

在發(fā)送自定義消息中,wParam參數是分成了高字節(jié)與低字節(jié)之分的,需要采用MAKEWPARAM宏進行發(fā)送。

該宏創(chuàng)建了一個32位的無符號值,用作消息中的wParam參數,該宏連接兩個指定的16位值。

在傳遞參數時,高位是當前模擬發(fā)送的ID號,每個窗口甚至是每個控件都有屬于自己的編號,不難獲取到。

低位是需要觸發(fā)的系統(tǒng)消息,前面說到了模擬的是CBN_SELCHANGE消息,所以wParam參數的寫法,如下:

MAKEWPARAM( GetDlgCtrlID(),CBN_SELCHANGE)

LPARAM參數

對于這個參數,就當對來說簡單了,只需要傳遞當前窗口的HWND,轉換成LPARAM參數就可以了。

整體的模擬系統(tǒng)發(fā)送格式:

::SendMessage(pwnd->GetSafeHwnd(), WM_COMMAND, MAKEWPARAM( GetDlgCtrlID(),CBN_SELCHANGE), (LPARAM)GetSafeHwnd());

對于模擬系統(tǒng)發(fā)送消息來說,最重要的就是SendMessage的第二個參數以及第三個參數了。同樣的道理,也可以使用PostMessage的方式發(fā)送。

消息發(fā)送出去之后,在外界的使用方式是如何呢?

既然我們模擬的是系統(tǒng)消息,在外部窗口調用的地方與MFC自帶的控件消息方法是一致的

消息映射:

ON_CBN_SELCHANGE(ID_CUSTOMCOMBOBOXID, &CTestComboboxDlg::OnCbnSelchangeComboSd)

看著這個方法是不是很熟悉?與自帶的ComboBox方式是不是一模一樣?后續(xù)的使用方式都是一致的啦!

到此這篇關于MFC模擬實現(xiàn)自定義消息發(fā)送的文章就介紹到這了,更多相關MFC自定義消息發(fā)送內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C語言實現(xiàn)第一次防死版掃雷游戲

    C語言實現(xiàn)第一次防死版掃雷游戲

    大家好,本篇文章主要講的是C語言實現(xiàn)第一次防死版掃雷游戲,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • c++標準庫讀寫ini文件的實現(xiàn)示例

    c++標準庫讀寫ini文件的實現(xiàn)示例

    本文介紹了一個完整的INI文件類的實現(xiàn),包含讀取和寫入操作,通過IniFile.h頭文件和IniFile.cpp實現(xiàn)文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-10-10
  • 用C語言實現(xiàn)五子棋小游戲

    用C語言實現(xiàn)五子棋小游戲

    這篇文章主要為大家詳細介紹了用C語言實現(xiàn)五子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++實現(xiàn)LeetCode(38.計數和讀法)

    C++實現(xiàn)LeetCode(38.計數和讀法)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(38.計數和讀法),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • C語言互換最大值與最小值的位置

    C語言互換最大值與最小值的位置

    大家好,本篇文章主要講的是C語言互換最大值與最小值的位置,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • CMake自動管理C/C++項目的實現(xiàn)

    CMake自動管理C/C++項目的實現(xiàn)

    CMake是一個強大的構建系統(tǒng),用于跨平臺管理C/C++項目的編譯過程,本文主要介紹了CMake自動管理C/C++項目的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2025-02-02
  • c++標準輸入輸出流關系的前世今生

    c++標準輸入輸出流關系的前世今生

    這篇文章主要給大家介紹了關于c++標準輸入輸出流關系的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • C語言從txt文件中逐行讀入數據存到數組中的實現(xiàn)方法

    C語言從txt文件中逐行讀入數據存到數組中的實現(xiàn)方法

    下面小編就為大家?guī)硪黄狢語言從txt文件中逐行讀入數據存到數組中的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • 基于c++強制類型轉換的(總結)詳解

    基于c++強制類型轉換的(總結)詳解

    本篇文章對C++中的強制類型轉換進行了詳細的分析介紹。需要的朋友參考下
    2013-05-05
  • 帶你粗略了解C++流的讀寫文件

    帶你粗略了解C++流的讀寫文件

    這篇文章主要為大家總結了C++中輸入輸出流及文件流操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能給你帶來幫助
    2021-08-08

最新評論

伊吾县| 凤山县| 浦北县| 绩溪县| 昌江| 岚皋县| 青龙| 临夏市| 长垣县| 凤庆县| 吐鲁番市| 文水县| 石林| 多伦县| 洛隆县| 美姑县| 利津县| 浮梁县| 临漳县| 黄冈市| 湟中县| 百色市| 泗洪县| 康保县| 都兰县| 扶沟县| 专栏| 英山县| 平泉县| 大英县| 许昌县| 泰和县| 轮台县| 莱州市| 左云县| 普宁市| 中阳县| 巴东县| 扶余县| 龙陵县| 道真|