关于MFC的消息机制学习心得(MFC不懂MFC消息是啥那就等于0)求知的朋友看过来!

首先声明,本人在学习阶段,所以所讲之处!难免会出错且啰嗦,本文旨在跟大家分享近期对iocp(window高并发服务器编程)之 MFC界面程序消息传送的几点心得。大神欢迎大家喷我。
先为大家介绍一个c++高并发的大神群!
群主非常热情,而且技术实力雄厚。只要大家能虚心学习,群主每天群里分享面试以及编程经验。欢迎加入QQ群49114021 名字是高性能服务器开发 群主 范蠡³² 教授级大神。 本人仅仅群内潜水小鸟一个。请勿见笑。

本人两年前,开始接触MFC 一般人可能很难理解一个新手的苦恼,所有控件数值改变以及窗体,本人全部都是通过窗口或者控件指针完成!我想刚入门的朋友可能都跟我一样 有这样的苦恼!

消息的用处!
1,首先说指针,(非常复杂)的用法
假设我在某某自定义类 产生数据 int x=123456;我想把x传给窗口的list控件
这TM就麻烦了,先获取窗口指针,然后获取控件指针,然后操作控件的某部位显示x。。假设你要是窗口类也定义了一个这个自定义类 那就悲剧了,涉及两个类的相互引用,当然相互引用有办法解决(一个定义普通对象 一个定义指针对象,这里点到为止,不做细述) 曾经我被这个问题整折腾一个多星期之后不得已放弃,(这也许是自学C++无人指导的新人经常不得已而放弃的原因)不过还好我没放弃(最终我们群主收留了我)。在我的坚持不懈下终于琢磨出了 使用消息的方法。
2,说牛叉的消息传递,
同理 当自定义类产生消息的时候。
首先我们就瞎JB定义一个消息就行 一般在
// rom.h : PROJECT_NAME 应用程序的主头文件
//

pragma once

ifndef AFXWIN_H

#error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件"

endif

include “resource.h” // 主符号

define WM_ONLINE (WM_USER+100)

// CromApp:
// 有关此类的实现,请参阅 rom.cpp
//

class CromApp : public CWinApp
{
public:
CromApp();

// 重写
public:
virtual BOOL InitInstance();

// 实现

DECLARE_MESSAGE_MAP()

};

extern CromApp theApp;

这个文件里面定义

define WM_ONLINE (WM_USER+100)

使我们自己定义的消息
WM_ONLINE消息名称 WM_USER+100 其实就是为了避开系统消息 避免跟系统消息重复!+100之后就行一般不要小于+100
这是我们定义了一个消息

然后我们关联消息
BEGIN_MESSAGE_MAP(CromDlg, CDialog)
主窗口类 直接查找这个
中间添加
ON_MESSAGE(WM_ONLINE,&CromDlg::MyOnLine)
前面那个宏是自定义消息的意思 参数是1我们的消息宏 后面是我们的消息处理函数 因为是我们定义到了主窗口类所以&CromDlg:: 至于为啥用&号
抱歉我也不知道为啥,现在不去纠结这个 或许以后学到了自然就领悟了
所谓消息处理函数就是我们收到消息了 怎么处理的函数
这个函数可以附带两个参数 就是这两个参数其中一个定义为x即可
处理函数原型
这时候有人要问了 怎么传递呢。这就要看产生消息了
CromDlg pFram = (CromDlg)AfxGetApp()->m_pMainWnd;
主窗口指针(并不是一定要之窗口指针)
比方说如果你要给某个控件发消息就用这个控件的指针就行了
pFram->SendMessage(WM_ONLINE, (WPARAM)&m_ClientInfo.GetAt(idx), (LPARAM)idx);

这句就是发送消息
第一个参数
(WPARAM)&m_ClientInfo.GetAt(idx),
这是啥呢第一个很好理解强制转换 取地址(先符合消息参数的格式,到处理函数可以强制转回去)
第二个
(LPARAM)idx
同上,假设idx是上文说的x话
处理函数里面写上 int x=(int)idx
就可以恢复x了
LRESULT MyOnLine(WPARAM wp, LPARAM lp);(注意是类里面定义)
LRESULT CromDlg::MyOnLine(WPARAM wp, LPARAM lp)
{
这直线写上你要处理的代码的代码
int x=(int)idx
然后某某控件给我显示这个x就行了

}
到此为止 我们完整的实现了一个消息的传递。
是不是感觉超简单!
可是我学会这个经历了很久很久!希望大家都能快点领悟
赶紧行动起来,学C++不要放弃。加油!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值