MFC自定义消息的实现方法_C 语言

一、概述:

消息机制是windows程序的典型运行机制,在MFC中有很多已经封装好了的消息,如WM_BTN**等。但是在有些特殊情况下我们需要自定义一些消息去完成一些我们所需要的功能,这时候MFC的向导不能帮助我们做到这一点。对此,我们可以通过添加相应的代码去完成这个功能。

二、实现方法:

添加自定义消息操作如下:
1. 建立MFC工程,如基于对话框的应用程序,Test。
2. 在资源中添加要处理的消息的值,即在CTestDlg.h中添加 如下代码。 (因为很多MFC的消息是在WM_USER内的,所以这里用比WM_USER大的消息)

 #define WM_MyMessage (WM_USER+100)

3. 声明消息处理函数,在CTestDlg.h中添加如下代码:

class CTestDlg : public CDialog
{
protected:
 ……
  // 生成的消息映射函数
  ……
  afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); // add lyw
  DECLARE_MESSAGE_MAP()
  ……

4. 添加消息映射处理,在CTestDlg.cpp中人找到如下部分添加代码:
 

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
   ……
  ON_MESSAGE(WM_MyMessage, OnMyMessage)
END_MESSAGE_MAP()

 5. 实现自己的自定义消息处理:
 

LRESULT CTestDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
  //MessageBox("recv msg success");
  //添加自己的消息处理
  ……
  return 0;
}

6. 如果要发送一个自定义的消息,需要使用代码
 

SendMessage( WM_MyMessage, 0, 0);

或者

 PostMessage(WM_MyMessage, 0, 0);

如果要定义系统唯一的消息让多个应用程序去处理,不同之处如下:

1. 把上面2步骤中的宏 #define WM_MyMessage (WM_USER+100) 使用如下代码代替:

 static UINT WM_MyMessage = RegisterWindowMessage("myMessage");

2. 上面4步骤中的代码用如下代替:

 BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
   ……
  ON_REGISTERED_MESSAGE(WM_MyMessage, OnMyMessage)
END_MESSAGE_MAP()

3.测试消息时,如果要让多个应用程序都接收到这个消息,需要使用:

 ::SendMessage(HWND_BROADCAST, WM_MyMessage, 0, 0);

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索mfc
, 方法
, 自定义
消息
mfc 自定义消息、mfc添加自定义消息、mfc发送自定义消息、mfc用户自定义消息、mfc 自定义消息 参数,以便于您获取更多的相关知识。

时间: 2024-08-31 02:58:55

MFC自定义消息的实现方法_C 语言的相关文章

MFC对话框自定义消息映射的方法_C 语言

本文实例讲述了MFC对话框自定义消息映射的方法.分享给大家供大家参考.具体实现方法如下: 1.定义消息: 复制代码 代码如下: #define WM_MYMSG (WM_USER+100) 2.定义消息响应函数: LPESULT CSLYARDlg::OnMymsg(WPARAM wParam, LPARAM lParam) { // TODO return 0; } 3.在窗口类头文件的AFX_MSG中声明消息响应函数: // Generated message map functions /

排列和组合算法的实现方法_C语言经典案例_C 语言

排列和组合算法是考查递归的常见算法,这两种算法能用递归简洁地实现. 本人在经过多次摸索和思考之后,总结如下,以供参考. 程序代码如下: #include <stdio.h> #include <stdlib.h> char array[] = "abcd"; #define N 4 #define M 3 int queue[N] = {0}; int top = 0; int flag[N] = {0}; void perm(int s, int n) { i

MFC实现在文件尾追加数据的方法_C 语言

本文实例讲述了MFC实现在文件尾追加数据的方法.分享给大家供大家参考.具体如下: BOOL CDelDlg::WritetoFile(CString sValue) { CString sFile = GetExePath() + "\\1.log"; CStdioFile file; if(file.Open(sFile, CFile::modeCreate | CFile::modeWrite | CFile::modeNoTruncate)) { file.SeekToEnd()

MFC程序对文件的处理方法_C 语言

对文件的处理是MFC程序设计中非常常见的应用.本文就以实例形式做一简单叙述.具体方法如下: 1.CFileDialog的应用 格式如下: CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter =

VC MFC非模态对话框的实现方法_C 语言

众所周知的,MFC中非模态对话框在显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切换.本文就来给大家讲解一下非模态对话框的实现方法: 一.非模态对话框的对话框资源和对话框类 实际上,模态对话框和非模态对话框在创建对话框资源和生成对话框类上是没有区别的,因此,在创建模态对话框时所创建的IDD_TIP_DIALOG对话框资源和CTipDlg类都不需要修改. 二.创建及显示非模态对话框的步骤 需要修改的是,对话框类实例的创建和显示,也就是之前在CAdditionDlg::OnBnCli

C和MFC巧妙获取外网IP的两种实现方法_C 语言

本文以C与MFC的两个实例详述了取外网IP的两种实现方法,具体实现代码如下: MFC语言实现获取外网IP: # include <windows.h> # include <urlmon.h> # pragma comment(lib,"URLMON.lib") void main() { URLDownloadToFile(NULL,"http://www.ip138.com/ip2city.asp","ip.txt",

MFC对话框中添加状态栏的方法_C 语言

本文实例讲述了MFC对话框中添加状态栏的方法.分享给大家供大家参考.具体如下: 1.在对话框的dlg实现类里添加成员变量: CXTPStatusBar m_wndStatusBar; //状态栏(或者是CStatusBar) //在OnInitDialog方法中初始化: static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICA

MFC绘制不规则窗体的方法_C 语言

本文实例讲述了MFC 绘制不规则窗体的方法.分享给大家供大家参考.具体分析如下: 实现过程: 1.首先创建基于DLG的MFC应用程序,命名为:tryBGDlg,并将DLG的属性设置为:Title Bar :False ,其它设置不变 2.制作两幅图像,其中的一幅黑白图像,是根据播放器外观来制作的,其中白色区域是要保留的最终在桌面上显示的区域.将这两幅图像添加到工程中,第一个ID号设置为IDB_INTERFACE,第二个ID号设置为:IDB_MASK 3.在CtryBGDlg类中添加一个在函数:

MFC创建模态对话框和非模态对话框的方法_C 语言

在MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box).本文对此分别简述其创建方法. 一.模态对话框(model dialog box) 在程序运行的过程中,若出现了模态对话框,那么主窗口将无法发送消息,直到模态对话框退出才可以发送. 点击模态对话框中的OK按钮,模态对话框会被销毁. 创建一个模态对话框的代码如下所示: //创建一个模态对话框 CTestDialog td; td.DoModal(); 其中C