您的位置:首页 > 其它

深入浅出MFC笔记——第一章

2010-08-05 10:38 246 查看
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
if (!hPrevInstance)
if (!InitApplication(hInstance))
return (FALSE);
if (!InitInstance(hInstance, nCmdShow))
return (FALSE);
...
}
//--------------------------------------------------
BOOL InitApplication(HINSTANCE hInstance)
{
WNDCLASS wc;
...
return (RegisterClass(&wc));
}
//--------------------------------------------------
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
_hWnd = CreateWindow(...);
...
}

1. 在Windows 3.x 时代,窗口类别只需注册一次,即可供同一程序的后续每一个
执行实例(instance)使用。所以我们把RegisterClass 这个动作安排在「只有第一个执行个体才会进入」的InitApplication 函数中。产生窗口,是每一个执行实例( instance ) 都得做的动作, 所以我们把CreateWindow 这个动作安排在「任何执行实例都会进入」的InitInstance 函数中。现在的版本中已经被忽略,这样写的原因MFC 把这两个函数包装成CWinApp 的两个虚拟成员函数。

2. TranslateMessage 是为了将键盘消息转化。

3. CreateWindow函数发出WM_CREATE消息产生窗口,DefWindowProc 收到WM_CLOSE 后, 调用DestroyWindow 把窗口清除。DestroyWindow 本身又会送出WM_DESTROY。程序对WM_DESTROY 的标准反应是调用PostQuitMessage。 PostQuitMessage 没什么其它动作,就只送出WM_QUIT 消息,准备让消息循环中的GetMessage 取得0结束。

4. Console程序与DOS程序的差别:利用Windows 编译器、联结器做出来的程序,都是所谓Win32 程序。如果程序是以main 为进入点,调用Cruntime 函数和「不牵扯GUI」的Win32 API 函数,那么就是一个console 程序。过去在DOS 环境下开发的程序,称为DOS 程序,它也是以main 为程序进入点,可以调用C runtime 函数。但不可能调用Win32 API 函数。

5. 使用CreateProcess函数创建进程,建立新进程之前,系统必须做出两个核心对象,也
就是「进程对象」和「执行线程对象」。调用ExitProcess函数进程可以结束自己的生命,调用TerminateProcess函数可以结束其它进程的生命。最好不用利用TerminateProcess函数结束子进程生命,因为系统不会清理子进程遗留下来的垃圾。使用CloseHandle函数可以割断父进程和子进程之间的关联。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: