我不知道我到处搜寻 我试图在我的对话中显示图片,并尝试在我的按钮上添加小图标
不知道该怎么做,我复制并粘贴了这段代码到 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;
在我的对话头文件中我还将图片控制类型从帧切换为位图
为什么要以编程方式创建控件?它们适用于您的对话框类,因此可以简单地将它们放置在对话框资源上:具有
SS_BITMAP
样式集的静态控件(在 VS 的对话框资源编辑器中轻松完成)和按钮控件,可能带有 BS_BITMAP
样式设置(查看Win32文档以了解设置或不设置此样式有什么效果)。并且您绘制控件的方式是错误的,您应该使用 STM_SETIMAGE
中的 BM_SETIMAGE
和 OnInitDialog()
(或其 MFC 包装器)(或它们的 MFC 包装器)(一次)将图像放入控件中,而不是响应绘制请求。您在这里的实现也是错误的,因为在对话框初始化期间不会收到绘制请求,而是由于“无效”(由用户或应用程序引起)或状态或样式更改而稍后收到。我认为你甚至不需要为你的控件定义变量(比如CStatic *pp;
),你可以简单地调用SendDlgItemMessage()
中的OnInitDialog()
函数,将上述消息发送到你的控件。