【VC++】005窗口重绘

在前面的绘制直线,或是画刷之类的我们发现当我们改变窗口大小的时候,之前的操作就会不见;

在***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
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值