MessageBox 弹框 怎么改前边图标颜色
时间: 2023-09-02 18:07:42 浏览: 94
如果你是在 Windows 平台上使用 C++ 编程语言,可以使用消息框函数 `MessageBox` 来创建一个弹框。要改变消息框中的图标颜色,你需要使用自定义消息框。以下是一个使用自定义消息框的示例代码,其中包括更改消息框图标颜色的代码:
```c++
//定义一个自定义消息框函数
int CustomMessageBox(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType, COLORREF iconColor) {
HINSTANCE hInstance = GetModuleHandle(NULL);
HICON hIcon = LoadIcon(hInstance, IDI_APPLICATION);
HBRUSH hBrush = CreateSolidBrush(iconColor); //创建画刷,用于填充图标区域
int result = MessageBox(hWnd, lpText, lpCaption, uType);
//获取消息框句柄
HWND hMsgBox = FindWindow(NULL, lpCaption);
if (hMsgBox != NULL) {
//获取消息框中图标句柄
HWND hIconBox = GetDlgItem(hMsgBox, 0x2);
if (hIconBox != NULL) {
//获取图标的位置和大小
RECT rc;
GetWindowRect(hIconBox, &rc);
int width = rc.right - rc.left;
int height = rc.bottom - rc.top;
//创建自定义图标
HDC hDC = GetDC(hIconBox);
HDC hMemDC = CreateCompatibleDC(hDC);
HBITMAP hBitmap = CreateCompatibleBitmap(hDC, width, height);
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
SelectObject(hMemDC, hBrush);
Rectangle(hMemDC, 0, 0, width, height);
IconDraw(hMemDC, hIcon, 0, 0, width, height, LR_DEFAULTCOLOR);
SelectObject(hMemDC, hOldBitmap);
ReleaseDC(hIconBox, hDC);
DeleteDC(hMemDC);
//设置自定义图标
SendMessage(hIconBox, STM_SETIMAGE, IMAGE_ICON, (LPARAM)hBitmap);
}
}
DeleteObject(hBrush);
return result;
}
//使用自定义消息框函数
int main() {
CustomMessageBox(NULL, L"Hello, World!", L"My Caption", MB_OK, RGB(255, 0, 0));
return 0;
}
```
在上面的代码中,我们首先定义了一个名为 `CustomMessageBox` 的自定义消息框函数。该函数的前四个参数与 `MessageBox` 函数相同,第五个参数 `iconColor` 是用于指定图标颜色的 RGB 值。在函数内部,我们首先调用 `MessageBox` 函数来创建一个消息框,并保存返回值(即用户点击的按钮)。然后,我们使用 `FindWindow` 函数查找消息框的句柄,然后使用 `GetDlgItem` 函数获取消息框中的图标句柄。接下来,我们获取图标的位置和大小,然后创建一个自定义的位图,使用 `IconDraw` 函数将原始图标绘制到自定义位图中,并使用 `SendMessage` 函数将自定义图标设置为消息框中的图标。最后,我们删除创建的画刷和位图,并返回 `MessageBox` 函数的结果。
阅读全文