前几天公司的实习生问了一个问題点击按钮在窗口的子控件上显示图像,但是无法显示咋一看代码没啥问题呀!
MFC在窗ロ上显示一张图片,从逻辑上看没有任何问题加载资源 —— 获取画布及区域 —— 在画布上绘图。一般情况下绘制但没显示,有2个原因:
经过代码调试发现是DC对应的坐标系搞错了,CDC *pDC = pUI->GetDC()
是获取子控件DC是以控件左上角为坐标原点,而rt
是相对于屏幕的矩形区域要解决此问题,只需DC与坐标系相匹配即可
// 获取桌面DC,对应屏幕坐标系
// 屏幕坐标系 -> 子控件坐标系
我们在一个控件上绘图时会涉及到3种DC(画布),对应彡种坐标系
-
桌面(屏幕)DC,以屏幕左上角为坐标原点;
-
窗口DC以应用程序窗口左上角为坐标原点;
-
子控件DC,以子控件左上角为坐标原点;
所以我们在解决此问题时,要以画布为基准去匹配正确的坐标点。下图为DC与坐标系的对应图:
理清这层关系后就有了第三种方法:
// 将屏幕坐标,转成主窗口坐标
// 获取的是主窗口DC
如果文章对您有帮助记得点个赞哈!即是鼓励,也是提醒我坚持下去的动力~
发布了15 篇原創文章 · 获赞 7 · 访问量 1万+