您的位置:首页 > 编程语言 > C语言/C++

孙鑫vc++学习(vs2008)笔记之第三课MFC内部运行原理

2012-02-12 16:04 381 查看
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

class CWnd
{
public:
BOOL CreateEx(
DWORD dwExStyle,
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HINSTANCE hInstance,
LPVOID lpParam);
BOOL ShowWindow(int nCmdShow);
BOOL UpdataWindow();
public:
HWND m_hwnd;
};

BOOL CWnd::CreateEx(DWORD dwExStyle,
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HINSTANCE hInstance,
LPVOID lpParam)
{
m_hwnd = ::CreateWindowEx(dwExStyle,lpClassName,dwStyle,x,y,
nWidth,nHeight,hWndParent,hMenu,hInstance,lpParam);
if(m_hwnd != NULL)
return TRUE;
else
return FALSE;
}

BOOL CWnd::ShowWindow(int nCmdShow)
{
return ::ShowWindow(m_hwnd,nCmdShow);
}

BOOL CWnd::UpdataWindow()
{
return ::UpdateWindow(m_hwnd);
}

int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPWSTR lpCmdLine,
int nShowCmd
)
{
WNDCLASS wndcls;
wndcls.cbClsExtra = 0;
wndcls.cbWndExtra = 0;

...

RegisterClass(&wndcls);

CWnd wnd;
wnd.CreateEx(...);
wnd.ShowWindow(SW_SHOWNORMAL);
wnd.UpdataWindow();

HWND hwnd;
hwnd = CreateWindowEx();
::ShowWindow(hwnd,SW_SHOWNORMAL);
::UpdateWindow(hwnd);

......
}


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

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

如何设置win7下搜索文件包含文字:组织——文件夹和搜索选项——搜索——搜索内容里面选择始终搜索文件名和内容(此过程可能需要几分钟)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: