MFC添加消息响应函数的方法
- 格式:doc
- 大小:304.50 KB
- 文档页数:2
mfc savefiledialog 获取保存文件的后缀-回复如何使用MFC中的SaveFileDialog获取保存文件的后缀?MFC(Microsoft Foundation Classes)是一组用于创建Windows应用程序的类库。
其中包含了许多用于用户界面和文件处理的类和函数。
在开发应用程序时,保存文件是一个经常需要处理的操作。
使用MFC的SaveFileDialog对话框,可以方便地获取用户想要保存文件的路径和名称。
但是,该对话框不会直接提供文件的后缀,下面将一步一步回答如何获取保存文件的后缀。
步骤1:创建MFC应用程序在开始之前,我们需要创建一个MFC应用程序。
可以使用Visual Studio 等集成开发环境来创建一个基本的MFC应用程序。
选择MFC应用程序向导时,需要选择对话框作为应用程序类型。
完成应用程序创建后,将会得到一个对话框类(CDialogEx)的实例。
步骤2:添加保存文件对话框在对话框资源中,双击对话框的图标,将打开对话框编辑器。
在对话框编辑器中,添加一个按钮控件用来触发保存文件对话框。
步骤3:添加按钮响应函数在对话框类的头文件中,为按钮添加响应函数。
打开对话框的类头文件,找到相应的IDI对话框消息映射宏,然后在其下方添加按钮的响应函数声明,如下所示:afx_msg void OnBnClickedSaveFileButton();然后,在类的源文件中为按钮的响应函数添加代码。
打开对话框的类源文件,找到相应的按钮响应函数的实现宏,然后在其下方添加响应函数的实现代码,如下所示:void CSaveFileDialogDlg::OnBnClickedSaveFileButton(){TODO: Add your control notification handler code here}步骤4:添加保存文件对话框的代码在按钮的响应函数中,添加保存文件对话框的代码。
在MFC中,我们可以通过调用CFileDialog类的DoModal函数来显示保存文件对话框,并获取用户选择的文件路径和名称。
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控件使用详细教程MFC(Microsoft Foundation Class)是微软推出的一套用于开发Windows应用程序的类库。
它提供了许多方便易用的控件,可以快速创建用户界面。
本教程将详细介绍如何使用MFC控件来创建Windows应用程序。
第一步:创建一个MFC应用程序项目要使用MFC控件,首先需要创建一个MFC应用程序项目。
在Visual Studio中,选择"文件"->"新建"->"项目",然后选择"MFC应用程序"模板。
在项目设置中,可以选择使用对话框或视图来作为应用程序的主界面。
第二步:设置控件属性第三步:添加控件消息处理程序控件不仅仅可以显示在界面上,还可以响应用户的操作。
例如,当用户点击按钮时,可以执行一些特定的操作。
要实现这个功能,需要添加控件消息处理程序。
可以通过右键单击控件,选择"添加事件处理程序"来添加控件消息处理程序。
在生成事件处理程序的对话框中,可以选择控件的事件(如点击事件、鼠标移动事件等)和消息的处理函数。
在消息处理函数中,可以编写代码来实现特定的功能。
第四步:编写控件的功能代码在控件的消息处理函数中,可以使用MFC类库提供的函数来实现控件的功能。
例如,如果用户点击了按钮控件,可以使用CButton类的GetWindowText函数来获取按钮的文本,并使用CMessageBox类的MessageBox函数来显示一个消息框。
可以使用类似的方式来处理其他控件的事件。
例如,当用户选择了一个列表框中的项时,可以使用CListBox类的GetCurSel函数来获取选择的项的索引,并根据索引来执行特定的操作。
第五步:编译和运行应用程序完成了控件的添加和功能编写后,可以使用Visual Studio的编译和运行功能来编译和运行应用程序。
在编译过程中,会生成可执行文件和相关的依赖文件。
C++ MFC快速超简单入门学习注意:红色字体为重要的信息,必须理解并记住。
在学习MFC之前,你必须对C++的“类和对象有一定的认识和理解,因为MFC就是C++完全的面向对象设计,它里面封装了好多类,我们只要调用就OK,就像C语言调用库函数一样,直接使用,这就是C++第一特性:封装性,第二性就是继承与派生,这个在MFC中体现得淋淋至间(字打错了)。
如果不懂,我再来解释一下,例:有一个商品类,class GOODS 商品属性有名字,价格它可作为一个基类,我可以派上出苹果类,class Apple :public GOODS . 苹果属性出了继承了商品的属性名字,价格之外,还可派生出,颜色,等属性,继承与派生就是一个是另一个的子集,但是这个子集不仅包括父集的特征,还具有一些新的特性,懂了吧,这样。
MFC其中重要的类是:CDialog 对话框类,CEdit,(编辑框类)CButton,(按钮类)CRadio(单选钮类),这些都是作为基类,由我们自己定义的类去派生它们。
好了,现在先了解一下什么是MFC吧,请看当前目录下的MFC入门知识的幻灯片1—20张,或大概的浏览一下当前目录下的其它连个word文件,后面的幻灯片我觉得没必要看了,因为是快速吗,节约时间,(首先看不懂没关系,)但但看完之后,必须掌握如下知识:1.MFC是作什么用的?与以前我们写的C,C++语言有什么不同。
以及它的一些优点,不同,以前的是控制台的界面不好看,不友好,操作不方便,黑框框的一片。
MFC反之。
优点:可用极少的代码实现强大的功能,2.关于MFC的一些术语,概念啊3.你要知道MFC的对话框是由控件组成的,具有哪些控件(例按钮:Button, 单选钮:radio,Edit)例:要知道MFC的编程的原则,也就是宗旨理念吧,“消息映射,事件驱动“,这句话要记住并理解,很重要,真的。
那到底是什么意思呢?现实举例:一个人具备一种“感知“的能力,(也可称消息吧),当用火接近这个人时(发生的事件),就会(驱动)这个人做出反应,远离”火“,用MFC举例:一个按钮有什么消息啊,我可以单击它,所以它具备单击的消息:第一个就是左键单击的消息,第二个就是双击的消息,见名思议就OK了。
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之间)定义按钮控件与其消息响应函数之间的映射关系。
mfc的onenchangeedit1使用方法MFC的OnEnChangeEdit1使用方法介绍在MFC(Microsoft Foundation Classes)中,Edit控件是常用的窗口控件之一。
在编辑框中输入内容后,通常需要对内容的变化做出相应的处理。
OnEnChangeEdit1是MFC中一个用于捕捉编辑框内容变化的消息处理函数。
使用OnEnChangeEdit1的步骤下面是使用OnEnChangeEdit1的步骤:1.打开MFC应用程序的资源编辑器,添加一个编辑框控件,设置好ID。
2.在对应的对话框类的头文件中添加OnEnChangeEdit1的声明。
3.在对应的对话框类的源文件中实现OnEnChangeEdit1的定义。
4.在消息映射中添加对OnEnChangeEdit1消息的响应。
设置OnEnChangeEdit1事件的声明首先,在对应的对话框类的头文件中添加OnEnChangeEdit1的声明。
可以在类的公有部分添加如下代码:afx_msg void OnEnChangeEdit1();实现OnEnChangeEdit1的定义接下来,在对应的对话框类的源文件中实现OnEnChangeEdit1的定义。
在类的私有部分添加如下代码:void CMyDialog::OnEnChangeEdit1(){// 在此处添加处理编辑框变化的代码}添加消息映射然后,在消息映射中添加对OnEnChangeEdit1消息的响应。
打开对话框类的消息映射宏(BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间),添加如下代码:ON_EN_CHANGE(IDC_EDIT1, &CMyDialog::OnEnChangeEdit1)其中,IDC_EDIT1是编辑框控件的ID。
编辑框内容变化处理最后,在OnEnChangeEdit1的定义中,添加处理编辑框内容变化的代码。
例如,可以获取编辑框的当前文本内容,并进行相应的处理,如输出到控制台或更新其他UI元素。
一、介绍MFC和消息响应机制MFC(Microsoft Foundation Class)是微软公司提供的一套类库,用于快速开发Windows桌面应用程序。
在MFC中,消息响应机制是非常重要的一部分,它用于处理用户和系统发送的消息,比如鼠标点击、键盘输入等。
二、on_message的作用和用法在MFC中,on_message是一个重要的消息处理函数,用于处理特定的消息。
它将消息传递给对应的处理函数,这样就能够对消息做出响应。
on_message函数通常是在MFC框架的消息映射表中进行注册的,当特定的消息到达时,框架会调用对应的on_message函数。
三、on_message函数的格式和参数在MFC中,on_message函数通常具有以下格式:afx_msg LRESULT on_message(WPARAM wParam, LPARAM lParam);其中,afx_msg是MFC中用于声明消息处理函数的宏,LRESULT是消息处理函数的返回值类型,on_message是函数名,而WPARAM和LPARAM则是消息参数,它们用于传递消息的相关信息。
四、注册on_message函数在MFC中,要使用on_message函数处理特定的消息,首先需要将它注册到消息映射表中。
可以通过在消息映射表中添加ON_MESSAGE宏来实现注册,具体格式如下:ON_MESSAGE(message, memberFxn)其中,message是要处理的消息类型,memberFxn是对应的on_message函数名。
五、实现on_message函数在注册了on_message函数之后,需要在对应的类中实现这个函数。
在函数体内,可以根据具体的需求对消息进行处理,比如更新界面、执行特定操作等。
六、on_message函数的使用示例以下是一个简单的on_message函数的使用示例,用于处理鼠标左键的点击消息:afx_msg LRESULT OnLButtonDown(WPARAM wParam, LPARAM lParam){// 在此添加消息处理程序代码和/或调用默认值return 0;}在这个示例中,当鼠标左键点击时,框架会调用OnLButtonDown函数进行处理。
MFC 单文档中动态添加菜单项和响应菜单事件新建一个单文档程序在查看菜单项中增加两个子菜单,分别为隐藏工具栏(ID_HIDE),新建菜单(ID_NEWMENU) 在Resource.h中增加一个ID_NEWMENU宏#define ID_NEWMENU WM_USER+101操作工具栏和状态栏使用GetDescendantWindow函数获取工具栏和状态栏的指针为ID_HIDE添加消息映射,编辑代码如下static bool m_Hide=false;m_Hide=!m_Hide;//获取工具栏指针CWnd* pWndToolBar=(CWnd*)GetDescendantWindow(AFX_IDW_TOOLBAR);//获取状态栏指针CWnd* pWndStatusBar=(CWnd*)GetDescendantWindow(AFX_IDW_STATUS_BAR);CMenu* pMenu=GetMenu();CMenu* pSubMenu=pMenu->GetSubMenu(2);if(m_Hide){pSubMenu->ModifyMenu(ID_HIDE,MF_BYCOMMAND,ID_HIDE,"显示工具栏");if(pWndStatusBar!=NULL) pWndStatusBar->SetWindowText("隐藏工具栏");if(pWndToolBar!=NULL) pWndToolBar->ShowWindow(SW_HIDE);}else{pSubMenu->ModifyMenu(ID_HIDE,MF_BYCOMMAND,ID_HIDE,"隐藏工具栏");if(pWndStatusBar!=NULL) pWndStatusBar->SetWindowText("显示工具栏");if(pWndToolBar!=NULL) pWndToolBar->ShowWindow(SW_SHOW);}动态添加子菜单为ID_NEWMENU增加消息映射,编辑代码如下static UINT m_NewMenu=ID_NEWMENU+1;//获取菜单CMenu* pMenu=GetMenu();//获取索引为2的菜单项,即第3列菜单CMenu* pSubMenu=pMenu->GetSubMenu(2);char buffer[1];itoa(m_NewMenu-ID_NEWMENU,buffer,10);if(m_NewMenu<=ID_NEWMENU+5){pSubMenu->AppendMenu(MF_SEPARATOR); //分隔线pSubMenu->AppendMenu(MF_STRING | MF_ENABLED,m_NewMenu++,CString("新的菜单")+buffer);}//如果m_bAutoMenuEnable为true,则会依次检查View、Document、Frame的//消息映射表是否有这个弹出菜单中每个菜单项的处理函数,澳门新濠天地官网 如果没有就会把那一项改为灰的m_bAutoMenuEnable=false;添加OnCommand的消息映射用来响应添加的子菜单项,代码如下UINT uMsg=LOWORD(wParam);for(UINT i=ID_NEWMENU+1;i<=ID_NEWMENU+5;i++)if(uMsg==i){char buffer[1];itoa(i-ID_NEWMENU,buffer,10);MessageBox(CString("新的菜单") + buffer);}右键菜单在View类中添加OnRButtonDown的消息映射,代码如下CMenu pPopMenu;pPopMenu.CreatePopupMenu();if(pPopMenu==NULL);pPopMenu.AppendMenu(MF_STRING,ID_NEWMENU+6,"右键菜单");this->ClientToScreen(&point);pPopMenu.TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);在View类中添加OnCommand的消息映射用来响应右键菜单的事件UINT uMsg=LOWORD(wParam);if(uMsg==ID_NEWMENU+6)MessageBox(CString("右键菜单"));。
CMFC中定时器的使用MFC(Microsoft Foundation Class)是一套面向Windows平台的C++类库,它简化了Windows API的使用,并提供了一些常用的界面和功能组件。
MFC中的定时器允许开发人员在应用程序中设置一定的时间间隔,以执行特定的任务或更新界面。
本文将详细介绍MFC中定时器的使用方法。
在MFC中,定时器的创建和管理是通过CWnd类来实现的。
CWnd类是MFC中所有窗口类的基类,它封装了一些与窗口有关的函数和属性。
首先,需要在窗口类的头文件中添加响应的定时器消息映射:```cppclass CMyWnd : public CWndDECLARE_MESSAGE_MAPafx_msg void OnTimer(UINT_PTR nIDEvent);};```然后,在窗口类的源文件中添加消息映射的处理函数:```cppBEGIN_MESSAGE_MAP(CMyWnd, CWnd)ON_WM_TIMEREND_MESSAGE_MAPvoid CMyWnd::OnTimer(UINT_PTR nIDEvent)switch (nIDEvent)case 1://处理定时器1的逻辑break;case 2://处理定时器2的逻辑break;default:break;}CWnd::OnTimer(nIDEvent);```在窗口类的构造函数中,可以通过调用CWnd类的SetTimer函数来创建定时器:```cppCMyWnd::CMyWndSetTimer(1, 1000, NULL); // 创建ID为1的定时器,时间间隔为1000msSetTimer(2, 2000, NULL); // 创建ID为2的定时器,时间间隔为2000ms```在窗口类的析构函数中,需要调用CWnd类的KillTimer函数来销毁定时器:```cppCMyWnd::~CMyWndKillTimer(1); // 销毁ID为1的定时器KillTimer(2); // 销毁ID为2的定时器```通过上述代码,我们可以在窗口类中创建和管理多个定时器,并且可以在OnTimer函数中根据定时器的ID来处理相应的逻辑。
本文将简单的介绍使用ShellExecute这个API函数,在About对话框的静态文本控件上创建一个指向指定网页的超级链接!1) 在CAboutDlg中添加一个成员变量protected:RECT m_pRectLink; //用于保存静态文本框的屏幕坐标2) 在About对话框资源上添加一个CStatic控件,ID命为IDC_LINK;3) 在OnInitDialog()中添加如下代码,以获得控件坐标GetDlgItem(IDC_LINK)->GetWindowRect(&m_pRectLink);ScreenToClient(&m_pRectLink);4) 当鼠标移动到热点上时,鼠标指针变成手型为WM_MOUSEMOVE添加消息响应函数OnMouseMove(UINT nFlags, CPoint point),在该函数中, point参数可获得对应于窗口左上角的鼠标坐标,通过判断算法就可实现事件的控制。
if(point.x>m_pRectLink.left&&point.x<m_pRectLink.right&&point.y>m_pRe ctLink.top&&point.y<m_pRectLink.bottom){HCURSOR hCursor;hCursor = AfxGetApp()->LoadCursor(IDC_HANDLINK);SetCursor(hCursor);}else{…….};//设置默认鼠标指针的形状5) 为About对话框添加WM_LBUTTONDOWN消息响应函数OnLButtonDown(UINT nFlags, CPoint point)if(point.x>m_pRectLink.left&&point.x<m_pRectLink.right&&point.y>m_pRe ctLink.top&&point.y<m_pRectLink.bottom){if (nFlags==MK_LBUTTON)//鼠标左键按下{//为改善鼠标效果,此处加入以上变换鼠标形状的代码ShellExecute(NULL, NULL, _T(“”), NULL,NULL, SW_SHOWNORMAL);//ShellExecute(NULL, _T("open"),_T("mailto:hsxw001@"), NULL, NULL, SW_SHOWNORMAL);//在默认邮件客户端中打开新邮件窗口,并自动填入收件人地址。