浅析CWnd::GetClientRect和CWnd::GetWindowRect函数

今天在将一个位图加载到对话框中的一个picture控件时,调用StretchBlt函数绘制时,发现位图加载错位了(位图左上角粘在对话框左上角),查找原因,原来在函数StretchBlt的第1和第2个参数传值错误,这两个参数我是由调用GetClientRect函数获取的,错误就在这.

原因是函数GetClientRect只是获取控件的客户区域大小,而控件的位置是不包括在这里面的,假设调用GetClientRect(ClientRC),ClientRC.left=ClentRC.top=0,所以调用StretchBlt后出现位图粘在对话框左上角.

要正确的加载,需从GetWindowRect函数获取,该函数是获取控件的位置(left,top,right,bottom),注这是屏幕坐标,还需调用ScreenToClient将屏幕坐标转化为客户区坐标.假设调用GetWindowRect(&rc),StretchBlt的第1和第2参数正确传值应该是rc.left,rc.top.最后验证位图加载位置正确.

这是个很简单的错误,主要是对函数不熟,各位不要笑话,在这写博客主要是为自己做个笔记和提醒.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值