c++ - 如何在 MFC 对话框上绘制/创建 GDI+

标签 c++ mfc gdi+

我有一个基于对话框的 MFC 应用程序。我使用 this 从资源创建了一个 GDI+ 对象.

MyDlg.cpp:

BOOL CSetupDlg::OnInitDialog()
{
    Gdiplus::GdiplusStartupInput gdiplusStartupInput;
    Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
        ...
}

无效MyFunction():

CGdiPlusBitmapResource* pBitmap = new CGdiPlusBitmapResource;
if (pBitmap->Load(ID_SPL_LG))
{
    CPaintDC dc(this);
    Gdiplus::Graphics graphics(dc);
    graphics.DrawImage(*pBitmap, 0, 0);
    //It is loaded . I checked with messagebox and its in here.
}
Invalidate(); //Not sure if necessary.

现在,表单/对话框什么也不显示。未插入或附加图像。

现在,我尝试了一些方法来将此图像添加到对话框中,但我无法做到这一点。

我尝试的是GDIObject.Create()CStatic.Create()PictureControl.Create()

我想做的就是将此图像插入到对话框中。

任何想法或展示路径表示赞赏。

最佳答案

您需要重写响应对话框中的 WM_PAINT 消息的 OnPaint 方法。通常您不需要这样做,因为对话框不需要绘制任何内容,它只是让其中包含的控件自行绘制。

将您显示的代码移至 OnPaint 处理程序中。

请勿从您自己的处理程序中调用默认的 OnPaint。

请勿从 OnPaint 处理程序中调用 Invalidate,否则您将陷入无限循环。

关于c++ - 如何在 MFC 对话框上绘制/创建 GDI+,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14044536/

相关文章:

python - 通过双向管道传递文件内容

c++ - sendto() 从错误的源端口发送

c++ - 使用现有的 Q_PROPERTY 为继承 QObject 的 QGraphicsItem 制作动画

c++ - 如何更改新 MFC 对话框的默认语言(地区)?

mfc - [VC++]如何在另一台PC上运行我的程序?

c# - 如何在使用 GDI+ 的 c# 中不使用控件的情况下获取 Graphic 的对象?

c++ - C++ 和汇编程序之间的 Scanf 函数

c++ - MFC C映射。将 cmap 存储在 cmap 中

德尔福/GDI+ : When is a Device Context created/destroyed?

c# - 如何使用 GDI+ 合法地滚动?