- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五节 CView和GDI以及类与继承
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.cpp添加一个OnInitialUpdate()方法,通过此方法为树状控件添加节点,代码如下:
void CFiveView::OnInitialUpdate()
{
CView::OnInitialUpdate();
HTREEITEM m_node=m_tree.InsertItem(根节点,TVI_ROOT);
m_tree.InsertItem(第一层节点,m_node);
m_tree.InsertItem(根节点2,TVI_ROOT);
}
运行效果如图:
基于CView的GDI绘图
新建一个工程,命名为“Five_GDI”,方法与上面一样。
找到Five_GDIView.cpp中的OnDraw()方法,其中的CDC就是进行绘图的类,
1)下面在指定坐标上输出文字,代码如下:
void CFive_GDIView::OnDraw(CDC* pDC)
{
CFive_GDIDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
pDC-TextOut(100,100,Hello,World!);
}效果如图
在窗口中画线,代码如下:
pDC-MoveTo(100,200);
pDC-LineTo(500,600);
效果如图
在窗口画矩形和椭圆
pDC-Rectangle(100,100,200,200);
pDC-Ellipse(400,200,500,400);
效果如
文档评论(0)