现在的位置: 首页 > 综合 > 正文

MFC学习笔记—如何在窗口中画图

2013年09月14日 ⁄ 综合 ⁄ 共 1243字 ⁄ 字号 评论关闭
也许MFC是一个不太时髦的东东了, 现在流行.NET,可是用来做做小东西还是一个不错的选择吧。学着点, 有什么心得,方法就写下来, 以后也许会有用的。

在做一些项目的时候, 我们常常会碰到需要在工程中插入一些动态的图像,所谓动态并不是指gif之类的图像,而是指这些图像是需要我们自己描绘,且会根据不同的需求而变化,比如从数据库中取数据然后再描绘曲线图之类的。在这种情况下,往往有两种选择,一种是使用CStatic类,而另一种是利用CView。

先写写怎么利用CStatic来画图, 不知道是不是因为太基本的东西,反而没多少人写,呵呵。不多说了,写了再说吧。

CStatic常常是用来做静态文本标签的,但是就如同MSDN中是这样解释这个控件的:
A static control is a control used to display text, to draw frames or lines separating other controls, or to display icons.
因此,可见这个类用途极为广泛。我们可以用它来描图。具体做法如下:

首先利用ClassWizard创建一个继承于CStatic的新类CMyStatic,然后重载CStatic的OnPaint函数。
当控件被破坏(被其它窗口遮住或其它类似情况)时,系统会发送WM_PAINT消息,随即此函数会被调用,以便重画控件。

在OnPaint函数中,我们拥有CPaintDC对象dc,利用此对象,即可画图了。

在CStatic中描图是一种通常的做法,但是如果我们需要往图中点选或描绘新的图形时,CStatic就不大合适了,因为它并不接收用户输入。此时我们就必须用到CView的继承类了。

在创建新的继承子类上,CView与前者并无区别,但是由于CView并不在控件库内,因此就必须采用create方法。具体过程如下:
创建CView的子类CMyView,在视图的初始化函数内写:
CMyView *pMyView = CMyView();
pMyView->create(NULL, NULL, WS_CHILD | WS_VISIBLE, CRect(0,0,200,200), this, 1234);

create的函数参数如下:
BOOL Create( LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);

lpszClassName: 指的是已注册的Windows类,由于子类是我们自己创建的,写NULL即可。
lpszWindowName : 控件名,可有可无。
dwStyle:控件形式,具体参数可以查询MSDN。
rect:控件所在的位置。
pParentWnd:此控件的父窗口,即把这个控件放置于哪个窗口内。
nID: 控件的ID号,随意

如此,我们即可在主窗口内创建一个CView的窗口出来,用以画图,接受输入等等。

抱歉!评论已关闭.