📄 05.2.1 ondraw函数.txt
字号:
5.2.1 OnDraw函数
在 CTextView类中, OnDraw函数的定义如例 5-4所示。
例 5-4
void CTextView: : OnDraw(CDC* pDC) CTextDoc* pDoc = GetDocument();
ASSERT_VAL工 o (pDoc) ;
// TODO: add draw code for native data here
我们可以在此函数处设置一个断点,调试运行程序,看看程序调用这个函数的时机。我们知道当窗口初次出现时,即从无到有时,会产生 WM_PAINT消息,让窗口重绘,这时程序停在所设置的 OnDraw函数断点处。继续调试程序,在调试过程中,可以看到,每次窗口要出现的时候,就会进入 OnDraw函数。因此,如果希望输入的图形或文字始终能够在窗口上显示的话,就可以在这个 OnDraw函数中进行处理。
另外,从这个函数的定义可知,当它被调用时,应用程序框架会构造一个 CDC类对象的指针并传递给这个函数,这给我们提供了方便,在这个函数内部就不需要再去构造 CDC类的对象,可以直接使用传递进来的 CDC对象指针去调用 CDC类的成员函数,完成绘制功能。
接下来,我们要实现在程序窗口中输出一串文字这一功能,这可以使用第 1章中介绍的 TextOut这个函数来实现。在 C语言中,如果要使用宇符串的话,一般是定义一个 char*类型的变量。在 MFC中,它提供了一个字符串类: CString,这个类没有基类。一个 CString对象由一串可变长度的宇符组成。在 C语言中,利用 char类型指针操作宇符串时,一旦给它分配了堆内存,那么它就只能存储己分配大小的字符数量。如果想要另外再多存储些字符,就只能对这个指针所指向的堆内存进行再分配。然而,利用 CString操作字符串时,无论存储多少个字符,我们都不需要对它进行内存分配,因为这些操作在 CString类的内部都己经替我们完成了,这就是 CString类的好处。在 MFC程序中利用 CString类对宇符串进行操作是很方便的。读者可以在 MSDN中查看 CString类的成员,将会发现它重载了多个操作符,这为我们操作 CString类的对象提供了极大的便利。可以把 CString类型的对象当作简单类型的变量一样进行赋值、相加操作,例如利用"="操作符,可以直接把一个字符或另一个 CString类型的字符串赋给一个 CString类型的对象:利用"+"操作符,可以方便地把两个字符串或一个字符与一个字符串联成一个字符串。
CString类提供了多个重载的构造函数(如例 5-5代码所示),利用这些构造函数,我们可以构造一个空的 Cstring对象,或者用一个己有的 CString对象构造一个新的 CString对象,或者用一个字符指针构造一个 CString对象。
例 5-5
CString ( );
CString( const CString& stringSrc );
CString( TCHAR ch, int nRepeat = 1 };
CString( LPCTSTR lpch , int nLength };
CString( const unsigned char* psz };
CString( LPCWSTR lpsz } ;
CString( LPCSTR lpsz } ;
例 5-6所示代码就是利用 CString类在 OnDraw函数内实现字符串显示的代码:例 5-6
void CTextView : : OnDraw(CDC* pDC}
{ CTextDoc * pDoc = GetDocurnent(} ;
ASSERT_VALID(pDoc} ;
// TODO: add draw code for native data here
CString str("C++深入编程") ;
pDC->TextOut(50 , 50 , str) ;
注意: CDC封装的 TextOut函数与阳form SDK提供的会图 TextOut
函数的区别:前者不需要 DC句柄作为参数,因为 CDC内部专门有一个成员变量( 没m_hDC)保存了 DC句柄。
Build并运行 Text程序,可以看到在程序窗口中输出了我们指定的字符串,如图 5.8所示。并且可以发现,当窗口大小发生改变时,字符串仍显示在窗口当中,这是因为我们是在 OnDraw函数中实现字符串的显示操作的。
图 5 .8 字符串显示结果
下面是另一种 CString字符串构造形式:
CString str;
str = "VC++ 深入编程";
CString类重载了" ="操作符,可以直接把一个字符串赋给一个 CString对象。读者可以试试这段代码,将会发现程序运行结果是一样的。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -