vc中怎么使用SendMessage自定义消息函数


vc中怎么使用SendMessage自定义消息函数:

SendMessage的基本结构如下:
SendMessage(
    HWND hWnd,  //消息传递的目标窗口或线程的句柄。
    UINT Msg, //消息类别(这里可以是一些系统消息,也可以是自己定义,下文具体介绍,)
    WPARAM wParam, //参数1 (WPARAM 其实是与UINT是同种类型的,
  //在vc编译器中右键有个“转到WPARAM的定义”的选项可以查看。
    LPARAM lParam); //参数2
其中一些参数的由来如下:
//typedef unsigned int UINT;
//typedef UINT WPARAM;
//typedef LONG LPARAM;
//typedef LONG LRESULT;
例如可以用以下语句:
::SendMessage(this->m_hWnd, WM_MY_DOSOME, (WPARAM) 0, (LPARAM) 0);
这里我发送的消息是本窗体接收的,所以句柄用:this->m_hWnd
这里的消息类别WM_MY_DOSOME就是我自定义的,
在接收消息的窗体或线程所在的头文件里:
#define WM_MY_DOSOME WM_USER+1 // do something
当然你还可以定义更多如:
#define WM_DOOTHER WM_USER+2 // do other

表示要做一些事情。
到这里,可能大家还是对消息类别有点模糊,不要担心,我下面很快就讲到。
我们发了一个消息出去,那么接收方要能识别这个消息是干什么,就是通过消息类别来区分,
并且开始去做这个消息对应要处理的事情。如下:
一:编写一个事情:
我们在接收窗体里定义一个这样的事情(过程),
afx_msg LRESULT DoSomeThing(WPARAM iParam1,LPARAM iParam2)
{
 MessageBox("收到消息了,我要开始做一些事情了。","收到",MB_OK);
 //可以运用iParam1,iParam2 来做一些事情。
 return 0;
}
这个事情有3点大家要注意,非常重要:
1:使用了afx_msg,并且要将afx_msg LRESULT DoSomeThing(WPARAM iParam1,LPARAM iParam2)
改写到头文件的 
//{{AFX_MSG
//。。。改写到这里,颜色会变成灰的。这一点非常重要。
//}}AFX_MSG
2:参数有2个,WPARAM iParam1,LPARAM iParam2,哪怕没有东西传进来也要写,不然会吃苦头的,vc里不会提醒你少写了一个,
但一些莫名奇妙的事情会发生。
3:类型用 LRESULT,完了要return 0;
二:让接收方知道什么时候做这个事情:
我们在
//{{AFX_MSG_MAP
//。。。这里写上
ON_MESSAGE(WM_MY_DOSOME,DoSomeThing)
//如果还有其他消息就再写一个
ON_MESSAGE(WM_DOOTHER,DoOther)
//}}AFX_MSG_MAP
到这里,当你用SendMessage,发了一个WM_MY_DOSOME类型的消息过来的时候,
接收方就会去做DoSomeThing(WPARAM iParam1,LPARAM iParam2)
发了一个WM_DOOTHER类型的消息过来的时候,
接收方就会去做DoOther(WPARAM iParam1,LPARAM iParam2)当然,这里DoOther我还没有定义,
这样就是一个完整的消息发送与接受过程,我没有详细讲参数,iParam1,因为还没有用到很复杂的情况,
大家要是有心得我们可以一起提高。


在头文件里
#define WM_MYMSG  WM_USER+5 //自定义一个消息


afx_msg 
void OnMyMessage(WPARAM wParam, LPARAM lParam); //自定义消息的处理函数声明



在.cpp文件里
ON_MESSAGE(WM_MYMSG, OnMyMessage)
//利用ON_MESSAGE()宏在自定义消息与其处理函数间建立映射关系

void CModelessDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
//从lParam中取出CString对象的指针,并将字符串内容在IDC_MSGEDIT中显示出来
{

    CString 
*str;
    str
=(CString *)lParam;

    SetDlgItemText(IDC_EDIT,
*str);
}



按下按钮发送消息
void CModelessDlg::OnMsgBTN() 
{

 CString str
= "自定义消息被触发了!";

SendMessage(WM_MYMSG, 
0, (LPARAM) &str);
 
//给ModelessDlg自己发一个自定义的消息

}


转载于:https://www.cnblogs.com/wqj1212/archive/2008/03/03/1089298.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363790.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tp5 修改默认的分页url

默认分页url:xx.com/xxx?page1 个人主要感觉不美观,想变成xx.com/xxx/list_1.html这样的 框架本身默认使用的boostrap分页类,目录位置 simplewind\thinkphp\library\think\paginator\driver\Bootstrap.php 调用url的主要是父类Paginator的ur…

多路复用IO和异步IO

多路复用I/O 它的基本原理就是select/epoll这个function会不断的轮询所负责的所有socket,当某个socket有数据到达了,就通知用户进程。 流程图如下: 当用户进程调用了select,那么整个进程会被block,而同时&#xff0c…

Java开发人员应该知道的7种新工具

通过快速浏览一些最新的创新工具,随时准备锁定和加载。 万一您错过了它,RebelLabs最近发布了Java工具和技术前景的全球调查结果 。 除了著名的工具和成熟的工具外,市场还涌现出鲜有人知的新鲜工具和框架。 在这篇文章中,我决定收集…

leetcode-92-反转链表②

题目描述: 方法一: class Solution:def reverseBetween(self, head: ListNode, m: int, n: int) -> ListNode:dummy ListNode(0)dummy.next headpre dummyfor i in range(m-1):pre pre.nextstart pre.nexttrail start.nextfor i in range(n-m):start.next …

linux 7 services设定,CENTOS/RHEL7系统中设置SYSTEMD SERVICE的ULIMIT资源限制

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?在bash中,有个ulimit命令,提供了对shell及该shell启动的进程的可用资源控制。主要包括打开文档描述符数量、用户的最大进程数量、coredump文…

ON_COMMAND_RANGE用法

afx_msg voidOnOutPutStatusButtonUp (WPARAM wParam, LPARAM lParam);BEGIN_MESSAGE_MAP(CIOStatue, CDialog)//{{AFX_MSG_MAP(CIOStatue)//}}AFX_MSG_MAPON_COMMAND_RANGE(IDC_STATIC_OUT1,IDC_STATIC_OUT16,OnOutPutStatusButtonUp)END_MESSAGE_MAP()//注意IDC_STATIC_OUT1…

re正则表达式公式讲解5

1.refullmatch() 完全匹配字符串则返回object&#xff0c;否则返回None import res "max123uyt146"print(re.fullmatch("\w \w ",s))# <_sre.SRE_Match object; span(0, 13), matchmax123uyt146>2.re.compile() 两种方法返回的同一个对象&#x…

P1880 [NOI1995]石子合并

\(\color{#0066ff}{ 题目描述 }\) 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆&#xff0c;并将新的一堆的石子数&#xff0c;记为该次合并的得分。 试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分.…

在c语言中a 这条语句的作用,C语言复习第二章

C语言第二章C语言复习(第二章)一、填空1、若采用十进制数的表示形式&#xff0c;则077为( )&#xff0c;0111为( )&#xff0c;0xab为( )。 2、C语言中的标识符只能由3种字符组成&#xff0c;它们是( )、( )和( )。 3、在C语言中&#xff0c;用“\\”开头的字符序列称为转义字符…

python执行linux和window的命令

linux&#xff1a; python执行shell脚本常用的方法 import os valos.system("shell语句") >>> valos.system("more /tmp/web.access.log |grep 222.132.79.77 -wc")826>>> print val0 valos.popen("shell语句").read() val可…

外部服务的集成测试

我们的系统通常依赖于第三方服务&#xff08;它们甚至可能是我们无法控制的公司内部服务&#xff09;。 此类服务包括公开API的社交网络&#xff0c;带有诸如Salesforce&#xff0c;身份验证提供程序之类的API的SaaS或我们系统与之通信但不在产品生命周期内的任何系统。 在常规…

自定义控件中使用Render的writer

给自定义控件一个模板并输出&#xff0c;可以在重写控件的Render&#xff0c;并使用它的HtmlTextWriter writer例如&#xff1a;publicclassMyTextBox : TextBox { private string _template"<tr><td> {0} </td><td> {1} </td>&l…

使用JBoss AS 7进行SSL加密的EJB调用

加密客户端和服务器之间的通信可为您的系统提供改进的安全性和隐私保护。 这可能是客户的一项重要要求&#xff0c;尤其是在客户端或服务器需要在不受保护的网络中工作时。 本文向您展示了如何在JBoss AS 7中设置SSL加密的EJB调用。 服务器 在服务器端只需完成两件事&#xf…

random模块详解

1.import random randomrandint&#xff08;a&#xff0c;b&#xff09; 括号里是一个范围&#xff0c;randomrandint&#xff08;&#xff09;是取括号里范围的随机数。 >>> import random>>> random.randint(1,10)8>>>>>> random.randi…

【ABAP系列】SAP 面试 ABAPer的一些感想

公众号&#xff1a;SAP Technical本文作者&#xff1a;matinal原文出处&#xff1a;http://www.cnblogs.com/SAPmatinal/ 原文链接&#xff1a;【ABAP系列】SAP 面试 ABAPer的一些感想前言部分 大家可以关注我的公众号&#xff0c;公众号里的排版更好&#xff0c;阅读更舒适。 …

mean技术栈 linux,“MEAN”技术栈开发web应用

var express require(express);var app express();app.listen(3000);var _rootDir __dirname;var protectDir _rootDir /protect/;app.use(express.static(_rootDir));//注册路由app.get(/, function(req, res){res.sendFile(_rootDir/src/index.html);});app.use(functio…

VS2005 VS2008新建网站和新建项目里选Web应用程序区别

WebApplication编程模型的优点&#xff1a;●网站编译速度快&#xff0c;使用了增量编译模式&#xff0c;仅仅只有文件被修改后&#xff0c;这部分才会被增量编译进去。●生成的程序集WebSite&#xff1a;生成随机的程序集名&#xff0c;需要通过插件WebDeployment才可以生成单…

Perl线程池

Thread::Pool模块提供了Perl解释器线程的线程池&#xff0c;手册&#xff1a;https://metacpan.org/pod/Thread::Pool。 转载于:https://www.cnblogs.com/f-ck-need-u/p/10422449.html

编写干净的测试–分而治之

好的单元测试应该仅出于一个原因而失败。 这意味着适当的单元测试仅测试一个逻辑概念。 如果我们要编写干净的测试&#xff0c;则必须识别这些逻辑概念&#xff0c;并且每个逻辑概念仅编写一个测试用例。 这篇博客文章描述了我们如何识别从测试中发现的逻辑概念&#xff0c;以…

初学servlet之使用web.xml配置

先写两个servlet,之后展示web.xml配置 package app01c;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.Htt…