I have an application, a game, that I've been working on and I stuck with a button not been (visually) updated.
The button is a pause button. When the app starts it is disabled (has WS_DISABLED style), but when the user starts a game, I simply remove that style responsable to disable it (WS_DISABLED).
The problem is: the button remains (visually) with the disabled style (when removing the style).
Or remains (visually) with the enable style (when adding the style). 
However, the button is correctly updated when I click in it. I assume that this is a repaint/update issue.
I tried to repaint the window (no sucess):
RedrawWindow(hWnd,NULL,NULL,RDW_ALLCHILDREN | RDW_UPDATENOW);
Here is the code fragment located in WinProc function:
switch (message) {
case WM_CREATE:
    CreateControls(hWnd);
    break;
case WM_COMMAND:
{
    switch (HIWORD(wParam)) {
    case BN_CLICKED:
        switch (LOWORD(wParam)) {
        case 3:
        {
            char text[50];
            GetDlgItemTextA(hWnd, 3, text, 50);
            HWND pauseB = GetDlgItem(hWnd, 4);
            LONG style = GetWindowLong(pauseB, GWL_STYLE);
            if (strncmp(text, "Start", strlen(text)) == 0) {
                SetDlgItemTextA(hWnd, 3, "Stop");
                SetWindowLong(pauseB, GWL_STYLE, style & ~WS_DISABLED);
                std::thread bt(RunGame, hWnd);
                bt.detach();
            } else {
                SetDlgItemTextA(hWnd, 3, "Start");
                SetWindowLong(pauseB,GWL_STYLE,style | WS_DISABLED);
            }
            RedrawWindow(hWnd,NULL,NULL,RDW_ALLCHILDREN | RDW_UPDATENOW);
            //SendMessage(hWnd, WM_PAINT, NULL, NULL);
        }
        default:
            break;
        }
        break;
    default:
        break;
    }
}
break;
// other cases...
}
I may confess that I don't know much about c++. So sorry for my mistakes.
