GE_MAP(CMyFrame,CFrameWnd) ON_WM_LBUTTONDOWN() ON_WM_PAINT() END_MESSAGE_MAP()
CMyFrame::CMyFrame(){
Create(NULL,"MYAPP Application"); } void CMyFrame::OnLButtonDown (UINT nFlags,CPoint point) { TRACE("Entering CMyFrame::OnLButtonDown - %lx,%d,%d\n", (long)nFlags,point.x ,point.y); }
void CMyFrame::OnPaint () { CPaintDC dc(this); dc.TextOut (0,0,"Hello World!"); } 4、编译运行,报错。为什么呢?原来还没有添加 MFC 的支持,在 Project Setting 选项 General 属性页选择” Use MFC in a Static Library" 5、再 Ctrl+F5,哈成功了。 让我们看看这个程序中的一些元素。 ①WinMain 函数:并非不存在只是已经被隐藏在应用程序框架内部。 ②CMyApp 类:CMyApp 类的对象代表一个应用程序,CWin
App 基类决定它的大部分行为。 ③应用程序的启动:当开始运行应用程序时 WINDOWS 会调用 WinMain 函数,WinMain 会查找该应用程 序的全局对象 theApp。 ④CMyApp::InitInstance 成员函数:发现 theApp 后自动调用重载的虚函数 InitInstance 来完成主窗口的构造 和显示工作。记住这个函数。 ⑤CWinApp::Run 成员函数:WinMain 在调用 InitInstance 之后紧接着调用 Run 函数,它被隐藏在基类中负 责传递应用程序的消息给相映的窗口。 (我把它理解为好象 SDK 的窗口的过程函数不知对不对) ⑥CMyFrame 类: 此类的对象代表着应用程序的主窗口。 它的构造函数调用基类 CFrameWnd 的 Create 函数 创建具体的窗口结构。 ⑦CMyFrame::OnLButtonDown 函数:
演示消息处理机制,当鼠标坐键被按下这一事件被映射到 CMyFrame 的 OnLButtonDown 函数上,如果你选择 F5 进行编译运行的话可以在调试窗口看到 TRACE 宏显示的类似 下面的信息 Entering CMyFrame::OnLButtonDown - 1,309,119 Entering CMyFrame::OnLButtonDown - 1,408,221 ⑧CMyFrame::OnPaint 函数:应用程序每次重新绘制窗口都需要调用此函数,将显示"Hello World!"放在这 里是因为每次窗口发生变化时保证"Hello World!"被显示,你可以试着将语句: CPaintDC dc(this); dc.TextOut (0,0,"Hello World!"); 写在别出,例如写在 void CMyFrame::OnLButtonDown (UINT nFlags,CPoint point) { TRACE("Entering CMyFrame::OnLButtonDown - %lx,%d,%d\n", (long)nFlags,point.x ,point.y); CPaintDC dc(this); dc.TextOut (0,0,"Hello World!");
} 运行后当点击左键时显示"Hello World!",但当窗口最小化再最大化时"Hello World!"不见了。 ⑧关闭应用程序:用户关闭应用程序时会有一系列事件发生。首先 CMyFrame 对象被删除,然后退出 Run, 进而退出 WinMain,最后删除 CMyApp 对象。 通过上面的示例我们看见程序的大部分功能包含在基类 CWinApp 和 CFrameWnd 中,我们只写了很少的函 数,便可以完成很复杂的功能。所以应用程序框架不仅仅是一种类库,它还定义了应用程序的结构,除了 基类外还包括 WinMain 函数,以及用来支持消息处理、诊断、DLL、等都包含在应用程序框架中。 第三篇: 第三篇:消息映射和视图类 在写了两篇笔记后有很多朋友给我发信,和我交流一些在
学习过程中的问题。但由于我也是一个初学者, 对一些
问题自己也没有把握,所以实在不敢做答,但我会尽量尽我所能和大家一起研究,谢谢大家的鼓励 和信任。 在开始先补充一下上一篇的内容“内容窗口的创建” ,兼答天歌网友的问题(如果天歌兄弟能看到的话 ) 。 为了简化我们看一个更简单代码,只有一个文件,创建一个空白的窗口,什么也不做。注意哦:真写程序 时还是要分成.h 和.cpp 两个文件比较
清晰。 前几步和『VC++技术内幕』学习笔记(2)中的一样,下面是代码: //********************************** // MyApp.cpp //afxwin.h 会调用 windows.h 是 MFC 编程的