mfc 机制笔记--摘自《把脉vc++》

mfc 3类消息
1 windows 消息: WM_开头的. WM_PAINT,WM_TIMER
#define WM_USER_FILE   (WM_USER+4)
2 命令消息: WM_COMMAND.  菜单,工具条按钮,加速键等 (WM_NOTIFY)
3 控件通知消息.

消息映射
不是按照switch (message) 的方式.
MFC采用类似map的方案来解决问题.
OnMessage()根据消息ID获取到应该执行的函数,并自动执行该函数。这是MFC实现消息映射的精髓.
如: BEGIN_MESSAGE_MAP
      ON_WM_PAINT()
      ...
      ON_BN_CLICKED(IDC_BUTTON1,&CMessageMapTestDlg::OnBnClickedButton)
     END_MESSAGE_MAP

消息映射宏
MFC的消息映射宏4种
1 windows消息的宏, "ON_WM_" 
2 用于命令消息的宏ON_COMMAND
ON_COMMAND(ID_FILE_PRINT,&CView::OnFilePrint)
3 用于控件通知消息的宏
ON_BN_CLICKED
4 用户自定义消息的映射宏
ON_MESSAGE 
    
消息和事件之间的关系:
事件是面向人理解的语言,如点击鼠标,onclick事件.
消息是mfc的宏,如button_message.

message 路由
传统的windows消息传递来说,响应消息的实体只可能是某个窗口,如果每个窗口没处理该消息,那么该消息就会被ignore,什么都不会发生。
因此MFC竭其所能改进该机制,它让消息沿着某种路径继续传递,直到找到处理函数为止.如果你的窗口CXXXView没有OnFileOpen(),没关系,
要是你的CXXXApp提供了OnFileOpen(),那么效果是一样的。这种神奇的行为,即消息路由
上图P440  图10-25


消息反射
当父窗口拿到控件的通知消息时,它会先将该消息交给控件去处理,如果它没有处理,则再自行处理


void CMessageReflectionTestDlg::OnBnClickdButton1()


消息泵
BOOL CWinThread::PumpMessage()
{
   //取到WM_QUIT了,直接返回false
   if (!::GetMessage(&m_msgCur,NULL,NULL,NULL))
   {
       return FALSE;
   }
   if (m_msgCur.message!=WM_KICKIDLE&&PreTranslateMessage(m_msgCur))
   {
      ::TranslateMessage(&m_msgCur);//键转换
      ::DispatchMessage(&m_msgCur); //派送消息
   }
}
每个CWinThread都包含一个消息泵,它的Run()函数一直迫使着这个泵不停工作
int CWinThread::Run()
{
   for (;;)
   {
      ...
      do
      {
         //pump message,
         if (!PumpMessage())
            return ...;
      } while(::PeekMessage(...))
   }
}
消息泵的工作非常单调而简单;读取消息GetMessage->翻译消息TranslateMessage->分派消息DispatchMessage。

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

main ()
{
  int* ip=new int;
  return 0;
}
new属于堆。任何进程分配后,必须释放。否则就是泄露。
已经分配的不会自动回收。必须手动回收。
进程退出,也不会被别的进程分配了(因为已经有内容,是被分配的内存了)

dynamic_cast  支持多态而存在,它主要用于类之间的转换
用于父类,子类的转换。向下转换和向上转换.
operator将A类转成B类。用于不同类之间的转换.

指针和引用的区别
4.2.3节。父类是基类引用,引用不能改变指向。指向不同类型的子类。而父类指针则可以,随便指

cstring.format 和sprinf是一样

copy构造函数,赋值构造函数,就是初始化和赋值的区别.
初始化是变量的诞生,如static的初始化,不属于函数,属于类,所以在函数外诞生
===========================================
第10章和第13章
windows 消息机制
举个例子
什么是事件, onacive
什么是消息, wm_active_...
begin_message
.......
end_message
map机制 。发送。接收.存储

mfc 机制
10-2例子:
thread1: GatherMessages--postmessage(msgQueue)
thread2: main---GetMessage(msgQueue)--TranslateMessage---DispatchMessage---onchar/onclose
图10-10
typedef void (*Messageproc)(int Message,int Parameter)
MessageProc _MessageHandler;
函数指针定义:
http://baike.baidu.com/link?url=M3Trku_kCLpWSdxhDrkMGXprAVH6T8MS3VoyeVyfZLoHBYJZL5Io4c3Jzsh_cZm4xhf5IXFKcM2nlTfgMU_c0_

typedef 这种定义函数指针的格式,不同于定义变量。属于为复杂的声明定义一个新的简单的别名。
http://wenku.baidu.com/link?url=VktxbN-T56khzty1cD9e_ZvU2rs2ayjbtZeHtV9Ij6E7jKZMqX-o_B186cxuVyOUyscOQKrRHEZM23gKrYs5VSCYA3f9KwvGucy3Nvi3WTi


使用函数指针与使用函数调用的区别
http://www.cnblogs.com/gmh915/archive/2010/06/11/1756067.html
函数指针可以作为入参,可以变更指向,指向同一类的不同函数。参数可以变成不同函数。类似于参数都是int类型,传值是1,3,5等不同.

消息泵和window消息系统关系??
一样.同10-2
===============
一个窗口是一个class吗?窗口与class。进程,线程关系/
onInitDialg和InitInstance 什么关系

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可 6私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值