Dlaczego CreateWindowEx() tworzy ucięte przydkie okno?

0

Rejestruję okno - zwraca true:

BOOL RejestrujResizeWindow( HINSTANCE hInst ){
    WNDCLASSEX wincl;

    wincl.hInstance = hInst;
    wincl.lpszClassName = "WH_RESIZEWINDOW";
    wincl.lpfnWndProc = ResizeWindowProc;
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 16;
    wincl.cbWndExtra = 16;
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    return RegisterClassEx( & wincl );
} 

Następnie tworzę okno:

bool RESIZEWINDOW::Create(){
    if(!cWindow->Window())
     Destroy();

    cWindow->SetWindow(CreateWindowEx(0, "WH_RESIZEWINDOW", "Odtwarzacz", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, HWND_DESKTOP, NULL, GetModuleHandle(NULL), NULL));
    if(!cWindow->Window())
     return false;
    SetWindowLongPtr(cWindow->Window(), GWLP_USERDATA, (LONG)this);
    ShowWindow(cWindow->Window(), CmdShow);
    return true;
} 

Kod wywołujący funkcje i metody:

int WINAPI WinMain (HINSTANCE hThisInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow)
{
    MSG messages;

    ENGINE = new cENGINE(hThisInstance, nCmdShow);
    { /// Glowne okno
        if(!RejestrujResizeWindow(hThisInstance)){
            MessageBox(0, "Main Window - Error Initialize !", "Error", MB_ICONERROR | MB_OK);
            delete ENGINE;
            return 0;
        }
        ResizeWindow = new RESIZEWINDOW(ENGINE_GetMessage, hThisInstance, nCmdShow);
        if(!ResizeWindow->Create()){
            MessageBox(0, "Main Window - Error Creating !", "Error", MB_ICONERROR | MB_OK);
            delete ENGINE;
            delete ResizeWindow;
            return 0;
        }

    }
    ENGINE->f_LoadPlugin("Plugins\\MainDir\\MainWindow\\MainWindow.dll");
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    delete ENGINE;
    delete ResizeWindow;
    return messages.wParam;
} 

Pokazuje mi się coś takiego i pętla komunikatów się zawiesza chyba : /
a50f61cc01.png
Jakieś pomysły?

2
    wincl.cbClsExtra = 16;
    wincl.cbWndExtra = 16;

Używasz tego gdzieś? Nie widzę. Jak nie to zostaw 0.

    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

Bardzo częsty błąd. Działa, ale wybiera ci inny kolor niż podałeś.
Prawidłowa forma to

(HBRUSH)(COLOR_BACKGROUND+1)
    return RegisterClassEx( & wincl );

RegisterClassEx zwraca nie BOOL tylko ATOM.
Jak chcesz zwracać BOOLa to daj retun RegisterClassEx(...) != NULL;.

CreateWindowEx(0, "WH_RESIZEWINDOW", "Odtwarzacz", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, HWND_DESKTOP, NULL, GetModuleHandle(NULL), NULL)

Nigdy, przenigdy, nie dawaj HWND_DESKTOP jako parenta okna. Okno główne nie ma parenta (NULL), a nie jest oknem podrzędnym pulpitu.

MSG messages;

Przenieś to niżej, tam gdzie jest użyte. I skasuj to s na końcu, to nie jest kontener żeby miał liczbę mnogą.

1 użytkowników online, w tym zalogowanych: 0, gości: 1