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

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

建立了一个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

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在MFC显示读取的参数图像可以通过以下步骤实现: 1. 首先,你需要在MFC应用程序的资源文件夹添加一个静态图片控件。你可以在资源视图选择对应的对话框,然后右键点击添加控件,在控件列表选择“Picture Control”并添加到对话框。 2. 接下来,在你的对话框,找到OnInitDialog函数并添加以下代码: ``` CStatic* pImageControl = (CStatic*)GetDlgItem(IDC_STATIC_IMAGE); // 将IDC_STATIC_IMAGE替换为你在资源文件添加的图片控件的ID CImage image; image.Load(_T("path_to_your_image")); // 替换为你的图像路径 pImageControl->SetBitmap(image.Detach()); // 将图像显示到控件 ``` 3. 最后,你需要在你要显示图像的地方调用UpdateData()函数来更新对话框控件。你可以在你的程序的任何地方调用它,例如在按钮点击事件或者在图像读取成功后。 ``` UpdateData(FALSE); // 显示最新的图像 ``` 这样,在MFC应用程序,你就可以显示读取的参数图像了。请确保替换代码的路径和控件ID为你自己的实际值,并且图像文件格式与Load函数支持的一致。 ### 回答2: 首先,在MFC应用程序,我们可以使用CImage类来加载和显示图像。下面是一个简单的步骤,用于在VC显示读取的参数图像: 1. 首先,确保已将图像文件添加到项目,并将其包含在您的源代码文件,以便可以访问图像的路径。 2. 在您的对话框,声明一个CImage成员变量,例如: CImage m_Image; 3. 在OnInitDialog()方法,加载图像文件到CImage对象,例如: m_Image.Load(_T("图像文件路径")); 4. 然后,获取图像的宽度和高度,并将其用作绘图区域的大小,例如: int nWidth = m_Image.GetWidth(); int nHeight = m_Image.GetHeight(); CRect rect; GetDlgItem(IDC_STATIC_PICTURE)->GetClientRect(rect); // 假设您在对话框上有一个静态文本控件ID为IDC_STATIC_PICTURE rect.right = rect.left + nWidth; rect.bottom = rect.top + nHeight; 5. 创建一个DC并选择绘图区域,然后在绘图区域上绘制图像,例如: CDC* pDC = GetDlgItem(IDC_STATIC_PICTURE)->GetDC(); m_Image.Draw(pDC->m_hDC, rect); 6. 最后,释放DC并刷新静态文本控件,使图像显示在对话框上,例如: GetDlgItem(IDC_STATIC_PICTURE)->ReleaseDC(pDC); GetDlgItem(IDC_STATIC_PICTURE)->Invalidate(); 这样,您就可以在VCMFC应用程序显示读取的参数图像了。请注意替换实际的图像文件路径和静态文本控件ID以适应您的应用程序。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值