我正在努力解决如何在按钮上添加图标以及如何在 MFC cpp 中向对话框添加图像,我是 mfc 的新手

问题描述 投票:0回答:1

我不知道我到处搜寻 我试图在我的对话中显示图片,并尝试在我的按钮上添加小图标

不知道该怎么做,我复制并粘贴了这段代码到 initdialog 函数中:

pp = new CStatic;
pp->Create(_T(""), WS_CHILD | WS_VISIBLE | SS_BITMAP, CRect(10, 10, 100, 100), this);
pp->SetDlgCtrlID(IDC_STATIC_PICTURE);

// Load and set the image for the dynamic picture control
CImage image;
if (SUCCEEDED(image.Load(_T("OIP.jpg"))))
{
    CRect rect;
    pp->GetClientRect(&rect);

    // Create a compatible DC for the image
    CDC dc;
    dc.CreateCompatibleDC(pp->GetDC());

    // Select the image into the DC
    CBitmap bmp;
    bmp.Attach(image.Detach());
    dc.SelectObject(&bmp);

    // Stretch the image to fit the control
    pp->GetDC()->StretchBlt(0, 0, rect.Width(), rect.Height(), &dc,
                            0, 0, image.GetWidth(), image.GetHeight(), SRCCOPY);
}

加上我写了这个:

CStatic *pp;
在我的对话头文件中我还将图片控制类型从帧切换为位图

mfc
1个回答
0
投票

为什么要以编程方式创建控件?它们适用于您的对话框类,因此可以简单地将它们放置在对话框资源上:具有

SS_BITMAP
样式集的静态控件(在 VS 的对话框资源编辑器中轻松完成)和按钮控件,可能带有
BS_BITMAP
样式设置(查看Win32文档以了解设置或不设置此样式有什么效果)。并且您绘制控件的方式是错误的,您应该使用
STM_SETIMAGE
中的
BM_SETIMAGE
OnInitDialog()
(或其 MFC 包装器)(或它们的 MFC 包装器)(一次)将图像放入控件中,而不是响应绘制请求。您在这里的实现也是错误的,因为在对话框初始化期间不会收到绘制请求,而是由于“无效”(由用户或应用程序引起)或状态或样式更改而稍后收到。我认为你甚至不需要为你的控件定义变量(比如
CStatic *pp;
),你可以简单地调用
SendDlgItemMessage()
中的
OnInitDialog()
函数,将上述消息发送到你的控件。

© www.soinside.com 2019 - 2024. All rights reserved.