Why doesn't the window go out?



  • Hello! I can't figure out why a window isn't coming out.

    #include<windows.h>
    

    LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    switch (msg) {
    case WM_PAINT:
    break;
    case WM_DESTROY:
    {
    PostQuitMessage(0);
    return 0;
    }
    break;
    }
    return (DefWindowProc(hWnd, msg, wParam, lParam));
    }

    int CALLBACK WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    HWND hWnd;
    MSG msg;

    WNDCLASS wc;
    wc.style = CS_OWNDC;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.hInstance = 0;
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH) (6);
    wc.lpszMenuName = 0;
    wc.lpszClassName = L"class";
    
    RegisterClass(&amp;wc);
    
    // Теперь в операционной системе зарегистрирован новый класс окна и можно создать окно этого класса.
    
    hWnd = CreateWindow(L"class", L"заготовка программы",
        WS_OVERLAPPEDWINDOW,
        150, 100, 500, 400, NULL, NULL, hInstance, NULL);
    
    // show wnd
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);    // В данной функции окну посылается сообщение WM_PAINT и оно может нарисовать себя.
    
    while (GetMessage(&amp;msg, NULL, 0, 0))    //главный обработчик событий
    {
        TranslateMessage(&amp;msg);    //преобразование клавиатурного ввода
        DispatchMessage(&amp;msg);    //обработка и пересылка сообщений в WinProc
    }
    return (msg.wParam);
    
    while (true) {
        if (PeekMessage(&amp;msg, hWnd, 0, 0, PM_REMOVE)) {
            if (msg.message == WM_QUIT)
                break;
    
            TranslateMessage(&amp;msg);
            DispatchMessage(&amp;msg);
        }
    }
    

    }

    The annex is started (provided in the dispatcher) but there is no window or badge on the panel. ♪ ♪
    What's the mistake? Thank you!



  • If the structure is initialized, wc.cbWndExtra = 0; then the window comes. Here's the work source:

    #include <windows.h>
    

    LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    switch (msg) {
    case WM_PAINT:
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    return 0;
    }
    return (DefWindowProc(hWnd, msg, wParam, lParam));
    }

    int CALLBACK WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    HWND hWnd;
    MSG msg;

    WNDCLASS wc;
    wc.style = CS_OWNDC;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH) (6);
    wc.lpszMenuName = 0;
    wc.lpszClassName = "class";
    
    RegisterClass(&amp;wc);
    
    // Теперь в операционной системе зарегистрирован новый класс окна и можно создать окно этого класса.
    
    hWnd = CreateWindow("class", "заготовка программы",
        WS_OVERLAPPEDWINDOW,
        150, 100, 500, 400, NULL, NULL, hInstance, NULL);
    
    // show wnd
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);    // В данной функции окну посылается сообщение WM_PAINT и оно может нарисовать себя.
    
    while (GetMessage(&amp;msg, NULL, 0, 0))    //главный обработчик событий
    {
        TranslateMessage(&amp;msg);    //преобразование клавиатурного ввода
        DispatchMessage(&amp;msg);    //обработка и пересылка сообщений в WinProc
    }
    return 0;
    

    }




Suggested Topics

  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2