日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC动态按钮的创建及其消息响应 和 自定义消息

發布時間:2023/12/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC动态按钮的创建及其消息响应 和 自定义消息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接:?http://www.cnblogs.com/gaohongchen01/p/4046525.html

動態按鈕(多個)的創建:

1、在類中聲明并定義按鈕控件的ID

#define IDC_D_BTN 10000

2、在類的OnInitDialog()函數中動態創建按鈕(建立按鈕對象時最好建立對象的指針)

3、手動釋放對象指針

下面是動態生成多個按鈕的例子:

CButton* btn = new CButton[5]; DWORD dwStyle = WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON; for(int i = 0; i < 5; i++) { btn[i].Create(_T("動態按鈕"), dwStyle,CRect(20+80*i,20,80+80*i,60),this,IDC_D_BTN+i); }

注:Create()的第一個參數為按鈕的標題,可直接給出(如上所示),也可在String Table中先定義字符串,再利用控件的LoadString()函數將字符串讀取進來

程序運行效果如下所示:

?

動態按鈕(多個)的消息響應:

  一個MFC的消息響應函數在程序中有三處相關信息:函數原型、函數實現以及用來關聯消息和消息響應函數的宏。頭文件中在兩個AFX_MSG注釋宏之間是消息響應函數原型的聲明。源文件中有兩處:一處是在AFX_MSG_MAP注釋宏之間的消息映射宏,用來關聯消息和消息響應函數的宏;另一處是源文件中的消息響應函數的實現代碼。

下面為動態生成的多個按鈕的消息響應的建立步驟:

1、在對話框類的定義文件(.h文件)中聲明消息響應函數OnButtonClick

afx_msg void OnButtonClick(UINT uID);

注:OnButtonClick函數的參數nID代表響應函數對應按鈕控件的ID號,單個按鈕可不設參數

2、在對話框類的函數實現文件(.cpp文件)中定義消息映射ON_COMMAND_RANGE???? (多個按鈕)

  在函數實現文件中的消息映射部分(BEGIN_MESSAGE_MAP與END_MESSAGE_MAP之間)定義按鈕控件與其消息響應函數之間的映射關系。

ON_COMMAND_RANGE(IDC_D_BTN,IDC_D_BTN+5-1,OnButtonClick)

  對于所有動態創建的5個按鈕(ID號在IDC_D_BTN ~ IDC_D_BTN+5-1之間),定義其消息映射函數為OnButtonClick函數,根據其輸入ID分辨具體響應那個按鈕。

  若是單個按鈕,則消息映射為ON_BN_CLICKED

ON_BN_CLICKED(IDC_BUTTON_ID, OnButtonFunc)

3、實現消息響應函數OnButtonClick

  在對話框類的函數實現文件(.cpp文件)中給出具體的按鈕消息響應

?

自定義消息:

  消息映射、循環機制是Windows程序運行的基本方式。VC++ MFC 中有許多現成的消息句柄,可當我們需要完成其它的任務,需要自定義消息,就遇到了一些困難。在MFC ClassWizard中不允許添加用戶自定義消息,所以我們必須在程序中添加相應代碼,以便可以象處理其它消息一樣處理自定義消息。

  Windows消息用"WM_"這個前綴,自定義消息一般用"UM_這個前綴"。

1、首先在頭文件或CPP文件中定義一個消息(推薦用戶自定義消息至少是WM_USER+100,因為很多新控件也要使用WM_USER消息)

#define WM_MY_MESSAGE (WM_USER+100)

2、在消息映射宏里面添加函數聲明

afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);

3、在函數實現文件(.cpp文件)中定義消息映射ON_MESSAGE,關聯消息和消息響應函數

ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)

4、實現消息處理函數,該函數使用WPRAM和LPARAM參數并返回LPESULT

LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam) { // TODO: 處理用戶自定義消息 ... return 0; }

5、發送消息

::PostMessage(GetSafeHwnd(), WM_MY_MESSAGE, 0, 0);

  其中GetSafeHwnd()得到了一個當前窗口的句柄,此消息將發給當前窗口;如果想發送消息給其它窗口,只需改變這個句柄,前提是目的窗口也實現了此消息的處理函數。

注:

  如果用戶需要一個定義整個系統唯一的消息,可以調用SDK函數RegisterWindowMessage定義消息:

static UINT WM_MY_MESSAGE=RegisterWindowMessage("User");

并使用ON_REGISTERED_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步驟同上。

總結

以上是生活随笔為你收集整理的MFC动态按钮的创建及其消息响应 和 自定义消息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。