Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

Co tu jest nie tak? (kod WinAPI)

#1
Co tu jest nie tak? (kod WinAPI)
Witam!
Niedawno miałem format całego dysku i wszystkie moje kody źródłowe zniknęły. Postanowiłem na nowo napisać program wyświetlający okno. Oto kod:
Kod:
// PLIKI NAGŁÓWKOWE
///////////////////////////////////////////
#include <windows.h>

// DEKLARACJE FUNKCJI
///////////////////////////////////////////
LRESULT WINAPI WndProc(HWND hWnd, UINT message,
                       WPARAM wParam, LPARAM lParam);

// DEFINICJE
///////////////////////////////////////////
LPSTR const lpWndClassName = "WindowClass";
HWND hWnd;

// WINAPI WinMain
///////////////////////////////////////////
int WINAPI
WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
        LPSTR lpCmdLine, int nShowCmd)
{
    /* Klasa okna */
    WNDCLASSEX wxWndClass = {0};

    /* Opcje systemowe */
    wxWndClass.hInstance = GetModuleHandle(NULL);
    wxWndClass.cbSize = sizeof(WNDCLASSEX);
    wxWndClass.lpfnWndProc = WndProc;
    wxWndClass.lpszClassName = lpWndClassName;

    /* Opcje graficzne */
    wxWndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wxWndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wxWndClass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
    wxWndClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

    /* Opcje dodatkowe */
    wxWndClass.lpszMenuName = NULL;
    wxWndClass.style = CS_VREDRAW | CS_HREDRAW;
    wxWndClass.cbClsExtra = 0;
    wxWndClass.cbWndExtra = 0;

    /* Rejestracja klasy okna */
    RegisterClassEx(&wxWndClass);

    /* Tworzenie okna */
    hWnd = CreateWindowEx(NULL, lpWndClassName, "Okno", WS_OVERLAPPEDWINDOW,
                          100, 100, 400, 300, NULL, NULL,
                          GetModuleHandle(NULL), NULL);

    /* Wyświetlenie okna  i odświeżenie okno*/
    ShowWindow(hWnd, SW_NORMAL);
    UpdateWindow(hWnd);

        // PĘTLA WIADOMOŚCI
        ///////////////////////////////////////////
        MSG msg = {0};
        for(;;)
        {
            GetMessage(&msg, hWnd, 0 ,0);
        
            if(msg.message == WM_QUIT) break;

            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }//for(;;)

    UnregisterClass(lpWndClassName, GetModuleHandle(NULL));
    return msg.wParam;
}// int WINAPI WinMain(...)

LRESULT WINAPI WndProc(HWND hWnd, UINT message,
                       WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
        case WM_CLOSE:
            DestroyWindow(hWnd);
            break;

        case WM_DESTROY:
            PostQuitMessage(0);
            break;

        default:
            DefWindowProc(hWnd, message, wParam, lParam);
    }//switch(message)

    return 0;

}//LRESULT WINAPI WndProc(...)
I tu następuję mój problem. Program skompiluje i uruchomi się bez problemu. Jednakże po uruchomieniu go w ogóle nie widzę mojego okna, nie wiem dlaczego. Kombinowałem z różnymi parametrami funkcji ShowWindow(), na próżno. Mam więc pytanie: Co tu jest nie tak?

PS. Jako środowiska używam Visual Studio, choć to bez znaczenia, ponieważ problem ten pojawia się również na innych.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#2
RE: Co tu jest nie tak? (kod WinAPI)
W funkcji WndProc, w instrukcji switch, w default wywołujesz DefWindowProc, ale nie zwracasz żadnej wartości. Funkcja ta zwraca taką wartość jaką powinien zwrócić program przetwarzając konkretny komunikat.
Ty zawsze zwracasz zero, mimo że większości komunikatów nie obsługujesz.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#3
RE: Co tu jest nie tak? (kod WinAPI)
No... nareszcie. Działa! Dziękuję, Borli. Temat do zamknięcia.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki (Co tu jest nie tak? (kod WinAPI))
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  [C#] Nie mogę dołączyć System.Net do projektu (tak samo z innymi) dorion300 12 11799 04.03.2015, 20:17
Ostatni post: dorion300
  [C++ WinAPI] Kompresja bitmapy kikiw 0 5203 25.12.2014, 16:15
Ostatni post: kikiw
  [c,winapi]-Access voliation reading location i problem z BITMAPFILEHEADER sfx 3 3418 12.08.2014, 16:11
Ostatni post: Darekg11

Skocz do:


Wybrane wątki (Co tu jest nie tak? (kod WinAPI))
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  [VBA] Przenoszenie danych między formularzami Pioro 4 9816 23.04.2018 11:48
Ostatni post: broda99
  Skrypt, który szuka i zamienia armen10 2 9542 23.04.2018 10:04
Ostatni post: armen10
  Liniowa regresja w Pythonie a budowanie modelu Trojan3000 2 9743 16.04.2018 13:26
Ostatni post: Trojan3000
  Początki z bashem - jak napisać skrypty: wysłanie maila i kalkulator? Kristov81 4 13590 21.03.2018 18:32
Ostatni post: Szachista
Ściana Zadanie cmd.... Yanke$ 2 10704 16.03.2018 17:20
Ostatni post: FireBytes
  Poszukuj kogoś do pomocy FireBytes 0 9318 16.03.2018 16:58
Ostatni post: FireBytes
  Program liczący liczby pierwsze Mersenne'a raistin 2 9610 12.03.2018 12:51
Ostatni post: Szachista
  Wykres Funkcji w Javie wanhelsing 4 10186 17.02.2018 22:27
Ostatni post: wanhelsing
  [SQL]procedura zliczania czasu CTRL85 0 9288 17.02.2018 12:58
Ostatni post: CTRL85
  [VBA Excel] Zaokrąglanie liczby w górę Pioro 2 10687 13.02.2018 21:25
Ostatni post: Pioro
  Sumowanie czasu excel. Cixi 7 9414 13.02.2018 11:52
Ostatni post: Cixi
  Sap i power bi książki Cixi 1 9156 09.02.2018 21:46
Ostatni post: Cixi
  Pomoc w VBA excel Woof 3 9622 19.01.2018 09:36
Ostatni post: Woof
Ściana [CMD] Dwa zadanka które mnie przerosły MihuJ 0 8920 11.01.2018 15:52
Ostatni post: MihuJ
  Czy programowanie jest dla mnie? Co powinienem robić? Kumiku 2 9256 05.01.2018 20:14
Ostatni post: broda99