[WinAPI] Poprawna pętla komunikatów dla zwykłych programów
Ostatnio zmodyfikowano 2012-04-22 21:25
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 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 ) { TranslateMessage( & msg ); DispatchMessage( & msg ); } } |
|
xevuel |
» 2012-04-22 20:54:37 Przykład żywcem zerżnięty z Deva: while( GetMessage( & messages, NULL, 0, 0 ) ) { TranslateMessage( & messages ); DispatchMessage( & messages ); }
Twoje IDE nie tworzy ci podstawowego kodu przy wyborze Windows Application? //WinAPI się pisze z wielkiej litery :) |
|
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: 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 |
|
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 :) |
|
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. |
|
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. |
|
« 1 » |