我正在开发一个 Windows 程序,其目标是使用 GDIPlus 和 Windows 头文件显示图像按钮。
图像附加到全局 CAutoPtr 数组。在按钮回调中,我通过使用按钮的标识符 (GetDlgCtrlID(hWnd)) 搜索图像数组 (imageList) 来处理 WM_PAINT 消息。
我可以使用 imageList 中的第一张图像进行绘制,但是,当我尝试使用 imageList[2] 绘制下一个按钮时,它不会显示任何图像。
问题到底出在哪里,为什么除了 imageList 的第一个插槽中的任何内容之外,我不能显示任何图像?
谢谢!
这处理所有按钮消息。
CAutoPtr<Gdiplus::Image> typedef GdiplusImagePtr;
GdiplusImagePtr imageList[50];
Rect imagePositions[50];
LRESULT CALLBACK CustomButtonProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch (msg) {
case WM_CREATE:
{
// Same as WM_PAINT
break;
}
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC newDC = BeginPaint(hWnd, &ps);
Gdiplus::Graphics newGraphics(hWnd);
newGraphics.DrawImage(imageList[GetDlgCtrlID(hWnd)], imagePositions[GetDlgCtrlID(hWnd)]);
EndPaint(hWnd, &ps);
ReleaseDC(hWnd, GetDC(hWnd));
DeleteDC(newDC);
break;
}
return CallWindowProc(customButtonProc, hWnd, msg, wp, lp);
}
我使用这行代码将图像附加到 imageList。我确认 imageList 确实包含其他图像;我只是无法显示它们。
imageList[1].Attach(new Gdiplus::Bitmap(L"TestImage.png"));