如何在运行时设置(Win32 API)图片控制的图像

How do I set the image of a (Win32 API) Picture Control at runtime?

本文关键字:控制 图像 API Win32 运行时 设置      更新时间:2023-10-16

这个测试用例非常简单。我想在按下按钮(IDC_BUTTON2)时将图片控件(IDC_STATIC1)的内容设置为位图资源(IDB_BITMAP1)。我遇到的问题是,当我按下按钮时,图片控制不加载图像。我已经验证了按钮按正在正确注册,并且从LoadImage返回值不是null。

下面的代码是对话框的消息处理程序:
BOOL WINAPI DialogProc2(HWND hWindow, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_CLOSE:
            EndDialog(hWindow, 0);
            DestroyWindow(hWindow);
            return TRUE;
        case WM_INITDIALOG:
            return TRUE;
        case WM_COMMAND:
            if (LOWORD(wParam) == IDC_BUTTON2)
            {
                HBITMAP bmp;
                bmp = (HBITMAP)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
                if (bmp == NULL)
                {
                    MessageBox(NULL, "Error", "ERROR", MB_OK);
                    return TRUE;
                }
                SendDlgItemMessage(hWindow, IDC_STATIC1, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)bmp);
                //placing a MessageBox here proves that the button press is being registered properly and that the message is being sent, but nothing is happening...
            }
            return TRUE;
    }
    return FALSE;
}

看起来图片控件的"Name"属性被设置为"IDC_STATIC1",但"ID"属性被设置为"IDC_STATIC"。将其更改为"IDC_STATIC1"解决了这个问题。