在前面的绘制直线,或是画刷之类的我们发现当我们改变窗口大小的时候,之前的操作就会不见;
在***View类中,我们会发现有个OnDraw函数,如果我们在此设下一个断点,调试,我们会发现每当窗口出现时,就会进入OnDraw函数;
void CProject3View::OnDraw(CDC* pDC)
{
CProject3Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
所以,我们如果想函数如何变化时,即将我们显示的东西放在OnDraw函数中即可。
另外,由这个函数的定义可知,当它被调用时,应用程序框架会构造一个CDC类对象的指针并传递给这个函数,故可以直接使用传递进来的CDC对象指针调用CDC的成员函数,完成绘制。
输出字符串我们通过使用CString类,查下MSDN;
CString( );
CString( const CString& stringSrc );
throw( CMemoryException );
CString( TCHAR ch, int nRepeat= 1 );
throw( CMemoryException );
CString( LPCTSTR lpch, int nLength);
throw( CMemoryException );
CString( const unsigned char* psz );
throw( CMemoryException );
CString( LPCWSTR lpsz );
throw( CMemoryException );
CString( LPCSTR lpsz );
throw( CMemoryException );
利用CString类在OnDraw实现字符串显示,在OnDraw函数中贴下:
CString str("VC++学习 天下");
pDC->TextOut(50,50,str);
执行:
PS:CDC类封装的TextOut函数与Platform SDK提供的全局TextOut函数的区别:前者不需要DC句柄作为参数,因为CDC内部专门有一个成员变量(m_hDC)保存了DC句柄。
这时,我们改变窗体大小,对字符串“VC++学习 天下”是没有影响的。
当然我们也可以这样使用:
CString str;
str="VC++学习 天下";
pDC->TextOut(50,50,str);
这样是对结果没有影响的,因为CString类重载了“=”操作符,直接将字符串赋值给CString对象;
在CString类中还有另外一个成员函数,LoadString:
BOOL LoadString( UINTnID );
throw( CMemoryException );
通过LoadString函数中的nID标识的字符串资源,我们可以构造一个字符串资源,在我们需要的时候将其装载到字符串变量中,这样可以不用在程序中对字符串直接赋值;
在VC++中,有一个Resource View选项卡,点开String Table,双击,即可见到字符串表:
字符串表:
双击“字符串表”最底部空行,会弹出添加新字符资源的对话框;
输入ID及标题,即可使用:如ID:IDS_STRINGVC标题:VC++学习 文本编程:
这样我们就可以在OnDraw中使用了:
str.LoadString(IDS_STRINGVC);
pDC->TextOut(0,100,str);
执行:
这样,字符串资源也成功使用了...
小工程可见:http://download.csdn.net/detail/xjm199/6779123
继续前行...o(∩_∩)o