在MFC对话框中自定义消息及其响应函数
MFC实现动态菜单及响应函数

MFC实现动态菜单及响应函数MFC中利用CMenu类动态添加弹出菜单和响应函数步骤:1 声明一个菜单:CMenu menu;2 生成菜单对象:menu.CreatePopupMenu();3 给菜单添加上内容:menu.AppendMenu(MF_STRING,WM_CLEARHOSTS,"清除HOSTS");AppendMenu函数具体的意义可以查看MSDN,其中WM_CLEARHOSTS为自定义的一个消息,最后一个参数为菜单的text,点击这个菜单就可以调用WM_CLEARHOSTS消息的处理函数。
4 添加子弹出菜单:CMenu submenu;submenu.CreatePopupMenu();menu.AppendMenu(MF_POPUP,(UINT_PTR)(submenu.m_hM enu),"sub");5 设置当失去焦点时菜单自动消失SetForegroundWindow();6 设置菜单的位置:menu.TrackPopupMenu();以上各步连接起来就是一个完整的动态生成菜单的步骤,当动态生成的菜单很多且菜单又不固定的时候,预先为每个菜单都定义一个消息和消息处理函数是很麻烦且不现实的,现在介绍一种方法来动态响应动态生成的菜单。
其原理就是利用OnCommand函数。
首先,要为每一个动态生成的菜单指定一个ID,方式如下menu.AppendMenu(MF_STRING,ID,"yourMenuName");其中参数ID为一个唯一的整数,可以由你自己指定,当鼠标单击此菜单的时候,系统发送一个消息,此消息优先被OnCommand函数接收,OnCommand函数的原形为:BOOL OnCommand(WPARAM wParam, LPARAM lParam);假如你指定菜单的ID为10001,响应函数的具体写法为:BOOL OnCommand(WPARAM wParam, LPARAM lParam){int menuID = LOWORD(wParam);if(menuID > 10000){//添加你自己的处理代码}}如果是使用对话框的mfc,自己重载OnCommand函数即可做一个MFC程序的时候碰到一个需求。
MFC对话框自定义消息映射的方法

BEGIN_MESSAGE_MAP(CSLYARDlg, CDialog) //{{AFX_MSG_MAP(CSLYARDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_MESSAGE(WM_MYMSG, OnMymsg) //}}AFX_MSG_MAP END_MESSAGE_MAP()
// Generated message map functions //{{AFX_MSG(CSLYARDlg) virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); afx_msg LRESULT OnMymsg(WPARAM wParam, LPARAM lParam); //}}AFX_MSG
希望本文所述对大家的MFC程序设计有所帮助。
Hale Waihona Puke 这篇文章主要介绍了c11thread多线程编程的相关知识包括线程的创建方式结束方式及互斥锁的实例代码详解本文给大家介绍的非常详细对大家的学习或工作具有一定的参考借鉴价值需要的朋友可以参考下
MFC对 话 框 自 定 义 消 息 映 射 的 方 法
本文实例讲述了MFC对话框自定义消息映射的方法。分享给大家供大家参考。具体实现方法如下:
1、定义消息:
复制代码 代码如下: #define WM_MYMSG (WM_USER+100)
MFC实现动态菜单及响应函数

MFC实现动态菜单及响应函数一、实现步骤1.调用AppendMenu函数在菜单栏添加菜单2.调用AppendMenu函数在菜单栏菜单项添加子菜单3.调用AppendMenu函数在菜单栏菜单项添加动态子菜单4.将菜单所属的窗口句柄传入OnInitMenu函数5.在OnInitMenu函数中清除原有的菜单6.在菜单窗口中添加新的菜单二、代码1.主程序代码```// MFC_DynamicMenu.cpp : 定义应用程序的入口点。
//#include "stdafx.h"#include "MFC_DynamicMenu.h"#define MAX_LOADSTRING 100//全局变量:HINSTANCE hInst; // 当前实例WCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本WCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名//此代码模块中包含的函数的前向声明:ATOM MyRegisterClass(HINSTANCE hInstance);BOOL InitInstance(HINSTANCE, int);LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int APIENTRY wWinMain(_In_ HINSTANCE hInstance,_In_opt_ HINSTANCE hPrevInstance,_In_ LPWSTR lpCmdLine,_In_ int nCmdShow)UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);//TODO:在此处放置代码。
//初始化全局字符串LoadStringW(hInstance, IDS_APP_TITLE, szTitle,MAX_LOADSTRING);LoadStringW(hInstance, IDC_MFCCDYNAMICMENU, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);//执行应用程序初始化:if (!InitInstance (hInstance, nCmdShow))return FALSE;}HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MFCCDYNAMICMENU));MSG msg;//主消息循环:while (GetMessage(&msg, nullptr, 0, 0))if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) TranslateMessage(&msg);DispatchMessage(&msg);}}return (int) msg.wParam;//// 函数: MyRegisterClass////目标:注册窗口类。
MFC自定义Static控件响应事件

{ // TODO: Add your message handler code here and/or calldefault AfxMessageBox("haha");// return CStatic::OnMouseWheel(nFlags, zDelta, pt);
}Байду номын сангаас
SetFocus(); CStatic::OnLButtonDown(nFlags, point);
} // void CStaticTest::OnRButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default SetFocus(); CStatic::OnRButtonDown(nFlags, point); } BOOL CStaticTest::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
MFC自定义消息步骤

MFC自定义消息步骤MFC(Microsoft Foundation Classes)是Microsoft公司为Windows平台开发的C++类库,它封装了许多Windows API函数,简化了Windows应用程序的开发过程。
在MFC中,可以使用自定义消息来进行应用程序内部的消息传递。
自定义消息的步骤如下:1. 定义消息常量:首先,在需要使用自定义消息的地方(通常是对话框或视图类中),定义一个用于表示自定义消息的整型常量。
可以使用WM_USER作为基准值,如const UINT WM_MY_MESSAGE = WM_USER + 12. 注册消息:在应用程序启动时,通常在InitInstance函数中,使用CWinApp类的RegisterWindowMessage函数来注册自定义消息,该函数用于获取一个唯一的消息值,如:UINT myMessage = RegisterWindowMessage(LPCTSTR pString).3. 处理消息:在需要处理自定义消息的类中,重写消息处理函数(通常是OnWndMsg函数),根据自定义消息的值,对相应的消息进行处理。
如:BEGIN_MESSAGE_MAP(CMyDialog, CDialog)ON_WM_COPYDATA//...ON_REGISTERED_MESSAGE(myMessage, OnMyMessageHandler)END_MESSAGE_MAPLRESULT CMyDialog::OnMyMessageHandler(WPARAM wParam, LPARAM lParam)//处理自定义消息//...return 0;4. 发送消息:要发送自定义消息,可以使用CWnd类的PostMessage或SendMessage函数。
其中,PostMessage函数用于异步发送消息,而SendMessage函数用于同步发送消息。
(1) 异步发送消息(PostMessage):CWnd* pDestWnd = GetDlgItem(IDC_MY_CONTROL);pDestWnd->PostMessage(myMessage, wParam, lParam);(2) 同步发送消息(SendMessage):CWnd* pDestWnd = GetParent(;pDestWnd->SendMessage(myMessage, wParam, lParam);5.消息映射宏:在使用消息映射宏处理自定义消息时,需要使用ON_REGISTERED_MESSAGE宏,该宏会自动在消息映射表中添加对应的消息处理函数。
MFC 对话框系统托盘详细步骤

MFC中将窗口最小化至系统托盘1.在对话框类中声明NOTIFYICONDATA变量class CCamProjDlg : public CDialog{...NOTIFYICONDATA nid;BOOL isNotify;...}//初始化isNotify = false;2.在resource.h文件中自定义消息#define WM_SHOWTASK 10013.在对话框类中声明消息相应函数class CCamProjDlg : public CDialog{...afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam);...}4、在消息映射中添加BEGIN_MESSAGE_MAP(CCamProjDlg, CDialog)...ON_MESSAGE(WM_SHOWTASK,onShowTask)...END_MESSAGE_MAP()5.定义消息响应函数LRESULT CCamProjDlg::onShowTask( WPARAM wParam, LPARAM lParam ){ // wParam接收的是图标的ID,而lParam接收的是鼠标的行为if( wParam != IDR_MAINFRAME )return 1;switch(lParam){case WM_RBUTTONUP: // 右键起来时弹出快捷菜单,这里只有一个"关闭"{LPPOINT lpoint = new tagPOINT;::GetCursorPos(lpoint); // 得到鼠标位置CMenu menu;menu.CreatePopupMenu(); // 声明一个弹出式菜单menu.AppendMenu(MF_STRING,WM_DESTROY,_T("关闭")); // 增加菜单项"关闭",点击则发送消息WM_DESTROY给主窗口(已隐藏),将程序结束。
MFC编程入门之九(对话框:为控件添加消息处理函数)

MFC编程⼊门之九(对话框:为控件添加消息处理函数) 这⼀节讲的主要内容是如何为控件添加消息处理函数。
MFC为对话框和控件定义了诸多消息,我们对他们操作时会触发消息,这些消息最终由消息处理函数处理,⽐如我们点击按钮时就会产⽣BN_CLICKED消息,修改编辑框内容时会产⽣EN_CHANGE消息等。
⼀般为了让某种操作达到效果,我们只需要实现某个消息的消息处理函数。
⼀、添加消息处理函数 仍然以前⾯的计算器程序为例,说明怎样为“计算”按钮添加消息处理函数,添加⽅法列出4中: 1、使⽤Class Wizard添加消息处理函数 ⽤过VC++6.0的朋友应该对Class Wizard很熟悉了,添加类、消息处理函数等经常会⽤到它,可以说是⼀个很核⼼的功能。
但从VS2002开始就见不到ClassWizard了,⼤部分功能都集成到对话框和控件等的属性了,使⽤很⽅便。
到VS2010,久违的Class Wizard⼜回来了。
⼤家应该记得,“计算”按钮的ID为IDC_CALCULATE_BUTTON。
上图中Commands标签下,Object IDs列表中有此ID,因为我们是想实现点击按钮后的消息处理函数,所以在Message列表中选择BN_CLIECKED消息,然后点右上⽅的Add Handler就可以添加BN_CALCULATE_CLICKED消息处理函数OnClickedAddButton了。
当然你也可以改名,但⼀般⽤的默认的就可以。
2、通过”Add Event Handler...“添加消息处理函数 在”计算“按钮上点右键,然后在右键菜单中选择菜单项”Add Event Handler...“,弹出”Event Handler Wizard“对话框,如下图: 可见"Message type"中默认选中的就是BN_CLICKED消息,函数名和所在类都已经⾃动给出,直接点”Add and Edit“就可以了。
MFC动态按钮的创建及其消息响应(自定义消息)

MFC动态按钮的创建及其消息响应(⾃定义消息)动态按钮(多个)的创建:1、在类中声明并定义按钮控件的ID#define IDC_D_BTN 100002、在类的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⽂件)中声明消息响应函数OnButtonClickafx_msg void OnButtonClick(UINT uID);注:OnButtonClick函数的参数nID代表响应函数对应按钮控件的ID号,单个按钮可不设参数2、在对话框类的函数实现⽂件(.cpp⽂件)中定义消息映射ON_COMMAND_RANGE (多个按钮) 在函数实现⽂件中的消息映射部分(BEGIN_MESSAGE_MAP与END_MESSAGE_MAP之间)定义按钮控件与其消息响应函数之间的映射关系。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在MFC对话框中自定义消息及其映射函数
注:红色字体部分为自己添加的代码
1.在对话框源代码(**Dlg.cpp)中自定义一个消息代码
#include "stdafx.h"
#include "test_message.h"
#include "test_messageDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define WM_MyMessage WM_USER+101(此处为自己添加的代码, WM_MyMessage:自定义的消息名称
WM_USER+101:自定义消息系统分配的号,格式为WM_USER+X,X 可为1到0X7FFF)
2.在对话框头文件(**Dlg.h)声明消息映射函数
class CT est_messageDlg : public CDialog
{
// Construction
public:
CT est_messageDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DAT A(CT est_messageDlg)
enum { IDD = IDD_TEST_MESSAGE_DIALOG };
CString m_MapMessage;
//}}AFX_DAT A
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CT est_messageDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CT est_messageDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnBUTTONSendMessage();
afx_msg void MyFucntion();//自定义函数声明
afx_msg void OnButton1();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
3.在对话框源代码(**Dlg.cpp)中建立消息映射
BEGIN_MESSAGE_MAP(CT est_messageDlg, CDialog)
//{{AFX_MSG_MAP(CT est_messageDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_SendMessage,
OnBUTTONSendMessage)
ON_MESSAGE(WM_MyMessage,MyFucntion)//消息映射函数声明,WM_MyMessage:消息映射函数对应消息,MyFucntion:消息映射函数的函数名
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
4.在对话框源代码(**Dlg.cpp)中定义消息映射函数,即实现消息的响应
//自定义消息映射函数定义
void CT est_messageDlg::MyFucntion()
{
m_MapMessage="Yes.You did it!!";
UpdateData(FALSE);
}
5. .在对话框源代码(**Dlg.cpp)中某个函数处发送自定义消息
void CT est_messageDlg::OnBUTTONSendMessage()
{
// TODO: Add your control notification handler code here
SendMessage(WM_MyMessage);
/// WM_MyMessage:消息名
}。