VC中在对话框上的static控件中绘图

本文介绍了在MFC Dialog工程中,如何在static控件上进行绘图,尤其是解决绘图内容无法显示的问题。讨论了三种方法:直接使用CPaintDC绘图,使用Invalidate()和UpdateWindow()更新控件,以及创建自定义CStatic类实现OnPaint。最终选择了创建自定义类并在OnInitDialog中初始化内存DC来绘制静态控件的网格图形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

建立了一个Dialog类型的MFC工程,拖动了一个static控件到上面,然后在控件上绘图,我是想绘制一个类似围棋网格的图形。

开始时,我在主Dialog类的OnPaint函数中加的code,如下所示:


我是采用了内存DC的方式,先创建兼容内存DC并在上面绘图,然后再通过bitblt函数将内存DC刷到当前DC上。当然,创建与绘制的过程应该在其它的函数中执行,OnPaint中只执行bitblt操作。这样会防止每次窗口重绘调用OnPaint时再一次创建兼容DC并绘图,这是没有意义的。这里我就不细说了,code先这样写。

但是,这有一个问题,程序运行之后,static上并不会出现我们想绘制的图形。后来经过多方查阅,我发现是因为主Dialog的OnPaint函数执行完之后,才会执行每个控件的创建显示,所以我们把code加在这个OnPaint中,就被后来的操作给覆盖了,相当于没什么用处。

解决这个问题有三种方法:

第一种,我们不用这种memDC的方式,直接创建一个CPaintDC,然后在上面绘图,就可以正常显示。

第二种,我们在bitblt函数上面强制让程序绘制static控件,加上GetDlgItem(IDC_STATIC)->Invalidat

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值