资源描述:
《第八节-MFC类的窗口类.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第八节MFC类的窗口类一.视图分割首先新建一个工程,工程名为“Spiltter”,选择“单文档”,并勾选“拆分窗口”,基类为“CView”。建立完成后设置项目属性的字符为“使用多字节字符集”。引用头文件:在使用前需要添加所需的头文件(1)在SpiltterView.h中添加头文件“#include"SpiltterDoc.h"”,若不添加会出现“错误6errorC4430:缺少类型说明符-假定为int。注意:C++不支持默认int”,或者“错误5errorC2143:语法错误:缺少“;”(在“*”的前面)”的错误。(2)在“MainFrm.h”中添加“#include"SpiltterView
2、.h"”,如果缺乏此头文件,会报出“错误1errorC2653:“CSpiltterView”:不是类或命名空间名称”。(3)在工程中添加一个MFC类“CMyView”,基类为CView,建立后同时在“MainFrm.h”中添加“#include"CMyView.h"”,后面我们将会使用该类对拆分后的窗口用来显示视图。下面我们需要编写程序来对窗口进行拆分,打开“MainFrm.cpp”,添加如下代码:BOOLCMainFrame::OnCreateClient(LPCREATESTRUCT/*lpcs*/,CCreateContext*pContext){CRectrect;GetClient
3、Rect(rect);//获得客户去视图范围m_wndSplitter.CreateStatic(this,2,1,WS_CHILD
4、WS_VISIBLE
5、WS_BORDER);//创建固定视图,可以拆分视图的行列m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CSpiltterView),CSize(0,rect.Height()*0.65),pContext);m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CSpiltterView),CSize(0,0),pContext);//设置分割视图}Ctrl+F5运行
6、后如下图:二.在分割视图上打印出字我们想要在分割后的视图上显示文字,需要在“SpiltterView.cpp”的OnDraw()中添加代码:voidCSpiltterView::OnDraw(CDC*pDC){......................TextOut(pDC->m_hDC,100,100,"HelloWorld!",12);}运行后效果如下:这样我们会发现一个问题,就是两个视图的内容相同,因此我们需要考虑如何让两个视图显示不同的信息,现在我们回顾前面所讲的m_wndSplitter.CreateView,在这儿修该代码就可以实现我们设想的,另外我们开始添加了一个MFC类CMy
7、View,我们在创建View时在RUNTIME_CLASS中可以选择不同的View,把设置分割视图的代码修改如下:m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CSpiltterView),CSize(0,rect.Height()*0.65),pContext);m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CMyView),CSize(0,0),pContext);//设置分割视图但我们想要下方的视图显示不同的信息,我们就需要修改CMyView中的OnDraw();voidCMyView::OnDraw(CDC
8、*pDC){CDocument*pDoc=GetDocument();pDC->TextOut(200,100,"我是下面的视图");//TODO:在此添加绘制代码}运行后效果下面我们通过菜单栏来判断以上两个视图谁获得焦点。首先当然是在‘资源视图’中Menu菜单中添加三个菜单,ID分别为:ID_32771,ID_32772,ID_32773。并为三个菜单添加事件处理程序,但三者选择不同的基类ID_32771:CSpiltterView,“测试1”ID_32772:CMyView,“测试2”ID_32773:CMainFrame,“测试3”通过添加程序我们可以看到三者的不同之处,添加代码如下:C
9、MyView:voidCMyView::On32772(){//TODO:在此添加命令处理程序代码MessageBox("这是MyView!","",MB_OK
10、MB_YESNO);}CSpiltterView:voidCSpiltterView::On32771(){//TODO:在此添加命令处理程序代码MessageBox("这是SpiltterView!","",MB_OK
11、MB_YESNO