zoukankan      html  css  js  c++  java
  • 孙鑫vc++学习(vs2008)笔记之第三课MFC内部运行原理

    1.查看类的继承图标Hierarchy Chart。

    2.进入main(WinMain)前,系统给全局对象分配内存。

    3.每一个mfc程序有且有一个由CWinApp派生的类,有且仅有一个应用程序类实例化的全局对象。

    4. pThreadState->m_pCurrentWinThread = this;根据继承原理this指向的是派生类。

    5.Afx前缀函数是应用程序框架函数,辅助生成应用程序框架模型。Application framework应用程序框架。

    6.WinMain函数在appmodel.cpp文件中,AfxWinMain在winmain.cpp文件中,CWinApp构造函数在appcore.cpp文件中,AfxEndDeferRegisterClass在wincore.cpp文件中,CFrameWnd::PreCreateWindow在MainFrm.cpp文件中,CreateWindow在wincore.cpp文件中,CFrameWnd在winfrm.cpp文件中

    7.c++不是完全的面向对象语言,为了让各个类之间能够有机地组织在一起,会定义一些全局函数,叫做应用程序框架类函数,以Afx开头的,在每一个类里面都可以调用。

    8.AfxGetApp()、AfxGetThread()获得子类的指针。

    9.带Ex的表示扩展函数

    10. CREATESTRUCT& cs引用

    11. CWinThread::Run完成消息循环,winmain.cpp中pThread->Run()指消息循环。

    12.InitInstance()完成初始化操作:窗口类注册,窗口产生,窗口显示和更新。

    13.CDocument类:数据的存储加载。CView:

    14.::使用的是全局函数,win32的API函数

    15.c++窗口销毁跟对象销毁不是一回事、

    16.WS_VISIBLE,ShowWindow()

    17.三态复选框

    18.获取父窗口:GetParent()

     

    View Code
     1 class CWnd
    2 {
    3 public:
    4 BOOL CreateEx(
    5 DWORD dwExStyle,
    6 LPCTSTR lpClassName,
    7 LPCTSTR lpWindowName,
    8 DWORD dwStyle,
    9 int x,
    10 int y,
    11 int nWidth,
    12 int nHeight,
    13 HWND hWndParent,
    14 HMENU hMenu,
    15 HINSTANCE hInstance,
    16 LPVOID lpParam);
    17 BOOL ShowWindow(int nCmdShow);
    18 BOOL UpdataWindow();
    19 public:
    20 HWND m_hwnd;
    21 };
    22
    23 BOOL CWnd::CreateEx(DWORD dwExStyle,
    24 LPCTSTR lpClassName,
    25 LPCTSTR lpWindowName,
    26 DWORD dwStyle,
    27 int x,
    28 int y,
    29 int nWidth,
    30 int nHeight,
    31 HWND hWndParent,
    32 HMENU hMenu,
    33 HINSTANCE hInstance,
    34 LPVOID lpParam)
    35 {
    36 m_hwnd = ::CreateWindowEx(dwExStyle,lpClassName,dwStyle,x,y,
    37 nWidth,nHeight,hWndParent,hMenu,hInstance,lpParam);
    38 if(m_hwnd != NULL)
    39 return TRUE;
    40 else
    41 return FALSE;
    42 }
    43
    44 BOOL CWnd::ShowWindow(int nCmdShow)
    45 {
    46 return ::ShowWindow(m_hwnd,nCmdShow);
    47 }
    48
    49 BOOL CWnd::UpdataWindow()
    50 {
    51 return ::UpdateWindow(m_hwnd);
    52 }
    53
    54 int WINAPI WinMain(
    55 HINSTANCE hInstance,
    56 HINSTANCE hPrevInstance,
    57 LPWSTR lpCmdLine,
    58 int nShowCmd
    59 )
    60 {
    61 WNDCLASS wndcls;
    62 wndcls.cbClsExtra = 0;
    63 wndcls.cbWndExtra = 0;
    64
    65 ...
    66
    67 RegisterClass(&wndcls);
    68
    69 CWnd wnd;
    70 wnd.CreateEx(...);
    71 wnd.ShowWindow(SW_SHOWNORMAL);
    72 wnd.UpdataWindow();
    73
    74 HWND hwnd;
    75 hwnd = CreateWindowEx();
    76 ::ShowWindow(hwnd,SW_SHOWNORMAL);
    77 ::UpdateWindow(hwnd);
    78
    79 ......
    80 }


    小知识:vs2008中的add windows message hander:右键一个类——属性——消息列表。

    查找cpp文件路径:D:\Program Files\Microsoft Visual Studio 9.0\VC\ce\atlmfc\src\mfc

    如何设置win7下搜索文件包含文字:组织——文件夹和搜索选项——搜索——搜索内容里面选择始终搜索文件名和内容(此过程可能需要几分钟)

  • 相关阅读:
    对抽象编程:接口和抽象类
    工厂方法模式
    用例建模Use Case Modeling
    分析一套源代码的代码规范和风格并讨论如何改进优化代码
    结合工程实践选题调研分析同类软件产品
    如何提高程序员的键盘使用效率
    Java复习面试指南01什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
    Mac系统下MySql下载MySQL5.7及详细安装流程
    Java复习面试指南02JDK和JRE的区别?程序从源代码到运行经历哪几步?
    毕业半年小结
  • 原文地址:https://www.cnblogs.com/quantumplan/p/2348036.html
Copyright © 2011-2022 走看看