更改对话框win32api的背景颜色

Dav*_*vid 1 c++ winapi

我正在尝试更改对话框的背景颜色(win 7,vs2010,c ++).

我试图捕捉WM_CTLCOLOR,WM_ERASEBKGND并改变颜色.我设法只捕获WM_ERASEBKGND消息,但是这样我在调试模式下管理,看到我改变了窗口的背景颜色,但是当dialogBox完成上传本身时,颜色被DialogBox的defualt灰色溢出. .

我正在使用CreateDialogParam函数创建DialogBox.

case WM_ERASEBKGND:
{
   HBRUSH brush;
   RECT rect;
   brush = CreateSolidBrush(RGB(255,0,0));
   SelectObject((HDC)wParam,brush);
   GetClientRect(m_hDlg,&rect)//m_hDlg is HWND type
   Rectangle((HDC)wParam,rect.left,rect.top,rect.right,rect.bottom);
   break;
}
Run Code Online (Sandbox Code Playgroud)

我试着使用这个功能:

SetBkMode((HDC)wParam,TRANSPARENTE);
Run Code Online (Sandbox Code Playgroud)

但它没有帮助.

我该怎么办?

arx*_*arx 7

你需要处理WM_CTLCOLORDLG.你应该返回刷柄.例如,要使背景为白色:

case WM_CTLCOLORDLG:
    return (INT_PTR)GetStockObject(WHITE_BRUSH);
Run Code Online (Sandbox Code Playgroud)

  • @ user2171244在问题中你说WM_CTLCOLOR,而不是WM_CTLCOLORDLG.在Visual Studio中创建一个新的win32应用程序.将上面的代码粘贴到"关于"功能(关于框的消息处理程序)中.约会框现在将具有白色背景.你的问题是手指麻烦或你身份不明的框架中的问题.没有代码,我也无法帮助. (2认同)