第四节 CView 和GDI 以及类与继承 一.建立MFC 单文档 首先打开VS2008,在“文件”中新建项目,选择 visualC++中的“MFC 应用程序” 命名为“Five”确认,弹出“MFC 应用程序向导”; 点击下一步,在应用程序类型中选择“单文档”,在“用户功能界面”中勾选“最大化”;点击下一步,在生成的类中的 基类选择“CView”,点击完成单文档CView 的建立。 然后像以前一样将工程属性中的常规中使用的字符集改为“使用多字节字符集”。 二.熟悉 CView 的结构 CView 不像前面所说的 CFromView,在CView 中没有对话框,没有可以从工具箱拖动的控件等,只能在自己利用代码创建一个控件并为其添加事件。 下面我们以建立一个 CTreeCtrl,即树状控件。 首先在FiveView.h 中实例化一个控件对象,代码如下: CTreeCtrl m_tree; 然后再 FiveView.cpp 中创建一个 CTreeCtrl,创建前需要先为 FiveView.cpp 添加一个OnCreat()事件,创建方法在前面几节中有介绍,下面创建CTreeCtrl,代码如下: int CFiveView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; m_tree.Create(WS_VISIBLE|WS_CHILD|WS_BORDER|TVS_HASLINES|TVS_HASBUTTONS|TVS_EDITLABELS|TVS_LINESATROOT|TVS_CHECKBOXES,CRect(0,0,0,0),this,IDC_TREECTRL); m_tree.ModifyStyle(TVS_CHECKBOXES,0); return 0; } 如果直接写上面的程序会报出错误,因为没有IDC_TREECTRL,其中IDC 代表资源文件。因此我们需要现在 resources.h 中声明此 ID,代码如下: #define IDC_TREECTRL 130 不能与 resources.h 中的其他重复。 另外我需要介绍下 m_tree.Creat 方法中的相关内容,代表了创建的CTreeCtrl 拥有的样式, 而后面的m_tree.ModifyStyle()的作用是对 CTreeCtrl 的样式进行增加或删除,其定义为: BOOL ModifyStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0); dwRemove是进行删除的项,若没有,设为0;dwAdd是进行添加的项,同样,没有则设为0。 上面的功能就是移除已经定义了的TVS_CHECKBOXES。 其中的CRect(0,0,0,0)代表建立一个确定坐标的矩形。 当改变窗体大小时,树状控件也随其变化,并充满窗体。首先为FiveView.cpp 添加一个OnSize()事件,写下如下代码: if(m_tree.m_hWnd) m_tree.SetWindowPos(NULL,0,0,cx,cy,SWP_NOZORDER); 在属性为FiveView....