How to set background color of window after I have registered it?

后端 未结 3 946
伪装坚强ぢ
伪装坚强ぢ 2020-12-05 18:21

I am not using a dialog, I\'m using my own custom class which I have registered and then used the CreateWindow call to create it, I have preset the background c

相关标签:
3条回答
  • 2020-12-05 18:41

    From Window Background comes:

    ...The system paints the background for a window or gives the window the opportunity to do so by sending it a WM_ERASEBKGND message when the application calls BeginPaint. If an application does not process the message but passes it to DefWindowProc, the system erases the background by filling it with the pattern in the background brush specified by the window's class.....

    ...... An application can process the WM_ERASEBKGND message even though a class background brush is defined. This is typical in applications that enable the user to change the window background color or pattern for a specified window without affecting other windows in the class. In such cases, the application must not pass the message to DefWindowProc. .....

    So, use the WM_ERASEBKGND message's wParam to get the DC and paint the background.

    0 讨论(0)
  • 2020-12-05 18:42

    Short answer: Handle WM_ERASEBKGND.

    Longer answer:

    When you register the WNDCLASS, you're providing information about all windows of that class. So if you want to change the color of just one instance of the window, you'll need to handle it yourself.

    When it's time to repaint your window, the system will send your wndproc a WM_ERASEBKGND message. If you don't handle it, the DefWindowProc will erase the client area with the color from the window class. But you can handle the message directly, painting whatever color (or background pattern) you like.

    0 讨论(0)
  • 2020-12-05 18:48

    You may try the following:

    HBRUSH brush = CreateSolidBrush(RGB(0, 0, 255));
    SetClassLongPtr(hwnd, GCLP_HBRBACKGROUND, (LONG_PTR)brush);
    
    0 讨论(0)
提交回复
热议问题