Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI] Poprawna pętla komunikatów dla zwykłych programów

Ostatnio zmodyfikowano 2012-04-22 21:25
Autor Wiadomość
Savail
Temat założony przez niniejszego użytkownika
[WinAPI] Poprawna pętla komunikatów dla zwykłych programów
» 2012-04-22 20:52:00
hej,
Jak powinna wyglądać zwyczajna petla komunikatow w winapi dla zwyklych programow? Kazdy przyklad jaki znajduje dotyczy petli dla gier...
To moja wlasna wersja i nie wiem czy nie przekombinowalem?:O
C/C++
while( msg.message != WM_QUIT )
{
    if( !Render() )
    {
        MessageBox( NULL, "Failed to render", "Error", MB_OK | MB_ICONEXCLAMATION );
        break;
    }
   
    if( GetMessage( & msg, NULL, 0, 0 ) > 0 ) //NAJPOPRAWNIEJSZA FORMA
    {
        TranslateMessage( & msg );
        DispatchMessage( & msg );
    }
}
P-55038
xevuel
» 2012-04-22 20:54:37
Przykład żywcem zerżnięty z Deva:
C/C++
/* Run the message loop. It will run until GetMessage() returns 0 */
while( GetMessage( & messages, NULL, 0, 0 ) )
{
    /* Translate virtual-key messages into character messages */
    TranslateMessage( & messages );
    /* Send message to WindowProcedure */
    DispatchMessage( & messages );
}

Twoje IDE nie tworzy ci podstawowego kodu przy wyborze Windows Application?

//WinAPI się pisze z wielkiej litery :)
P-55039
Savail
Temat założony przez niniejszego użytkownika
» 2012-04-22 20:59:02
no widzialem ten przyklad wczesniej ale gdzie powinienem renderowac grafike w powyzszym przykladzie? Gdy napisalem na gamedevie(a ostatnio cos coraz wiecej pytajacych niz odpowiadajacych :P wiec rzadko mozna czegos sie dokladniej dowiedziec) chyba taki przyklad:
C/C++
while( GetMessage( & messages, NULL, 0, 0 ) )
{
    Render();
    TranslateMessage( & messages );
    DispatchMessage( & messages );
}
to ktos napisal ze jest to niepoprawne ale juz dalej odpowiedzi dlaczego sie nie doczekalem ;p
P-55040
xevuel
» 2012-04-22 21:05:16
Zwykłe programy nie potrzebują najczęściej modyfikacji tejże pętli.

Jeśli chcesz generować grafikę, najoptymalniejsza będzie wersja "growa" czy jak to tam odmienić ;)

//Pętla jest poprawna, aczkolwiek czasami nie chcesz na naciśnięcie byle klawisza odrysowywać sceny :)
P-55041
Savail
Temat założony przez niniejszego użytkownika
» 2012-04-22 21:16:16
no wlasnie, spotkalem sie z czyms takim ze powinno sie obsluzyc wszystkie komunikaty zanim przystapie do renderowania ale jak to zrobic? i najczesciej w petlach tego typu najpierw obsluza sie komunikat a pozniej wstawia sie wlasne funkcje (np Render()). Ale gdy ja tak zrobie to przy wylaczeniu programu zawsze wyskakuje blad, chyba ze Render() wcisne przed obsluga komunikatow... Pewnie dlatego ze w funkcji WindowProcedure gdy dostane komunikat WM_CLOSE to niszcze okno i przsylam PostQuitMessage(0); a wtedy DirectX nie ma gdzie renderowac jesli funkcja renderujaca wywolywana jest po obsluzeniu komunikatu.
P-55042
xevuel
» 2012-04-22 21:25:01
To po PostQuitMessage wyjdź z pętli break-iem, i nie zapomnij wcześniej zakończyć pracę DX-a.
P-55043
« 1 »
  Strona 1 z 1