Windows自定义消息

Windows应用程序利用格式化的Windows消息来与其他Windows应用程序及Windows系统进行通信,这些消息被发往应用程序的窗口函数进行处理。由于Windows应用程序是消息或事件驱动的,因此必须了解Windows消息的有关概念。表所示为Windows的消息范围。

  Windows的消息范围

 

消息范围

意义

0~WM_USER-1

Windows消息

WM_USER~0x7FFF

程序员定义的窗口消息

0x8000~0xbffff

Windows系统保留使用

0xc000~0xffff

用于应用程序的字符串消息

 

WM_USER的值为0x0400,用户的自定义消息应该处在第二段。

建立自定义消息的操作步骤为:

①定义自己的窗口消息(定义消息标识符)

②在适当的位置声明消息处理函数;

③将消息处理函数与消息对应起来(映射消息)

④编写代码实现该消息处理函数;

⑤利用消息函数向指定的窗口发送消息。

【例 本程序实现利用自定义消息实现启动Windows系统“附件”中的“画图”程序。本程序练习自定义消息、消息的发送、消息映射、消息的响应。其具体实现步骤为:

(1)生成应用程序框架

利用应用程序向导MFC AppWizard创建一个单文档的应用程序框架,该工程的名称为DefinedMsg,每个步骤都使用默认的选项。

(2)声明白定义的消息处理函数

DefinedMsgView.h文件中声明 自定义的消息处理函数OnMyMessageOnMyMessage函数的原型如下:

 

LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);

 

(3)建立消息映射

DefinedMsgView.cpp文件中把WM_MYMESSAGEOnMyMessage关联起来,即建立消息映射(把消息WM_MYMESSAGE映射到函数OnMyMessage,即应用程序接收到消息WM_MYMESSAGE时,执行其对应的消息映射函数OnMyMessage)

 

ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)

 

(4)编写代码实现消息映射函数OnMyMessage

 

LRESULT CDefinedMsgView::OnMyMessage(WPARAM wParam, LPARAM lParam)

{

charMsPaintFile[255]; //存放画图程序的路径

UINT uSize=255;

GetSystemDirectory(MsPaintFile, uSize);

//调用API函数GetSystemDirectory()取得Windows的系统目录

strcat(MsPaintFile, "\\mspaint"); //取得画图程序的完整路径

ShellExecute(m_hWnd,"open", MsPaintFile, NULL, NULL, SW_SHOW);

//利用ShellExecute执行Windows系统提供的画图应用程序。

return 0;

}

(5)发送自定义消息WM_MYMESSAGE

利用PostMessag()函数在单击鼠标右键时,发送一个WM_MYMESSAGE消息。

 

Void CDefinedMsgView::OnRButtonDown(UINT nFlags, CPoint point)

{

PostMessage(WM_MYMESSAGE);

CView::OnRButtonDown(nFlags, point);

}

 

编译并运行DefinedMsg工程,当单击鼠标的右键时,消息处理函数发出WM_ MYMESSAGE消息,OnMyMessage()函数被调用。在OnMyMessage()函数中,调用了画图程序。

 

说明  本程序中用到了一个函数ShellExecute,它负责打开文件的操作,下面为其函数原型说明:

 

HINSTANCE ShellExecute(HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd);

 

其中,参数hwnd为打开文件的窗口句柄。lpOperation为操作类型,分别是open(打开)print (打印)explore(浏览)lpFile为欲打开文件的文件名。文件可以是本地文件,也可以是远程文件;文件的类型可以是文本文件,也可能是多媒体文件。参数lpParameters为打开文件时所传递的参数,特别适合于EXE文件的打开。lpDirectory为文件所在的路径,nShowCmd为打开文件时窗口的状态:0表示隐藏,1表示最大化,2表示最小化。

该函数主要有以下用法:

①浏览网页。下面的语句以最大化方式打开IE进入新浪网站。

ShellExeeute(0, "open", "http://www.sina.com", 0, 0, 1)

②打开、打印WORD文档。

//若要打印文档,则将operate赋值为print

CString Operate="open"

ShellExecute(0, operate, "C:\my documents\\hello.doc", 0, 0, 1); //打开hello.doc文档

③带参数调用EXE文件。下面的语句将运行记事本程序,并打开config.sys进行编辑。

ShellExecute(0"open""notepad.exe", "config.sys", "c:\\ ", 1);

④调用资源管理器。下面的语句运行资源管理器查看D盘内容。

ShellExecute(0, "explore", 0, "D:\\ ", 0, 1);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值