zoukankan      html  css  js  c++  java
  • 深入浅出mfc随笔——MFc程序的生死因果

    1:窗口的显示与更新

    CMyWinApp theApp___AfxWinInit___pApp->Initapplication____pApp->InitInstance____m_pMainWnd=new CMyFramWnd()____CMyFramewnd中Create(NULL,"fds",....);____m_pMainWnd->showWindow(m_nCmdShow);____m_pMainwnd->updatewindow()____pApp->run();

    其中pApp指向CMyWinApp对象。CMywinapp继承自CWinApp。而Run又是CWinApp的一个虚函数,并没有改写他。所以相当与调用CWinApp::Run,在该函数中又实际的调用了CWinThread,CWinThread中的pumpMessage真正的做了消息循环的事情。

    获得的消息如何交给适当的程序去处理呢。sdk程序的做法是调用DispatchMessage.把消息丢给窗口函数。mfc也是如此。在afxenddeferregisterclass程序代码。他在注册四种窗口类之前已经指定窗口函数为wndcls.lpfnwndproc=defwindowproc;

    虽然窗口函数被指定为defwindowproc成员函数。但事实上消息并不是被送往该处。而是afxwndproc的全局函数中。再通过message map机制把消息和处理函数连接在一起。

    然后程序的死亡。wm_close____默认函数_____destroywindow发出wm_destroy_____postquitmessage发出wm_quit_____exitinstance

    注意:如果类的成员函数是一个callback函数。你必须声明它为static。才能把C++编译器加诸于函数的一个隐藏参数this去掉。凡是你设计而却由windows系统调用的函数。统称为callback函数。这些函数都有一定的类型。

    C++的static成员函数的特性是。即使对象还没有产生。static对象也已经存在(函数或变量都如此),换句话说,对象还没有产生之前你已经可以掉用类的static函数或使用类的static变量了

  • 相关阅读:
    VFP正则表达式判断是否是手机号码/电子邮件
    VFP自定义函数StringFormat (仿.NET String.Format 方法)
    解决SOAPCLIENT访问WebSerivce外网发布端口
    VFP调用SOAPTOOLKIT 低级API
    经典的Hello World VFP前端调后端C# Webservice
    VFP不同句柄 同一事务处理 统一提交或回滚
    C++文件(夹)选择对话框操作
    Linxu之rz和sz命令
    测试标题
    自定义Silverlight TextBox 具有下拉框提示控件
  • 原文地址:https://www.cnblogs.com/lzjsky/p/1761706.html
Copyright © 2011-2022 走看看