flex55 Temat założony przez niniejszego użytkownika |
Problem z CreateDialog » 2010-12-28 22:58:09 Hej chłopaki ;) napotkałem kolejny problem, z którym nie mogę sobie poradzić samemu. A mianowicie przy tworzeniu okna dialogowego modalnego nie mam żadnego problemu, podczas gdy podmieniłem DialogBox na CreateDialog oraz EndDialog na DestroyWindow w celu przerobienia okna dialogu na niemodalne, wyskakuje mi błąd podczas kompilacji, w wierszu: int ret = CreateDialog( GetModuleHandle( NULL ), MAKEINTRESOURCE( 200 ), hwnd, DlgProc ); wywołuje dialog wyskakuje mi błąd 65 F:\PULPIT\WINAPI moje opisy\projekt\main.cpp invalid conversion from `HWND__*' to `int' Jak już napisałem, program działa dla okna modalnego po zmianach dla okna niemodalnego nie działa, dlatego myślę że nie ma sensu wklejania całego kodu. Chociaż gdy ktoś sobie zażyczy to wkleje do :) |
|
malan |
» 2010-12-28 23:08:19 CreateDialog zwraca HWND, a nie int, do którego próbujesz zapisać wartość, którą zwraca funkcja. int zwraca DialogBox. CreateDialog Function (msdn) |
|
flex55 Temat założony przez niniejszego użytkownika |
» 2010-12-28 23:15:03 Dziękuję za pomoc, opierałem się tylko na tym co pisze w tym kursie, a tam ta informacja nie była podana :) |
|
malan |
» 2010-12-28 23:24:38 Tak dla pewności się zapytam... Wiesz teraz, co przekazać do DestroyWindow , prawda? |
|
flex55 Temat założony przez niniejszego użytkownika |
» 2010-12-29 16:29:39 Tak to zrobiłem LRESULT CALLBACK WndProc( HWND hwnd, UINT mesg, WPARAM wParam, LPARAM lParam ) { switch( mesg ) { case WM_COMMAND: { HWND ret = CreateDialog( GetModuleHandle( NULL ), MAKEINTRESOURCE( 200 ), hwnd, DlgProc ); switch( wParam ) { case IDOK: MessageBox( hwnd, "Wybrano \'Fajnie\' w oknie dialogowym!", "Test", MB_ICONINFORMATION ); break; case IDCANCEL: MessageBox( hwnd, "Wybrano \'Anuluj\' w oknie dialogowym!", "Test", MB_ICONINFORMATION ); break; } } break; case WM_DESTROY: PostQuitMessage( 0 ); break; default: return DefWindowProc( hwnd, mesg, wParam, lParam ); } return 0; }
BOOL CALLBACK DlgProc( HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam ) { switch( Msg ) { case WM_COMMAND: { switch( LOWORD( wParam ) ) { case IDOK: DestroyWindow( hwnd, IDOK ); break; case IDCANCEL: DestroyWindow( hwnd, IDCANCEL ); break; } } break; default: return FALSE; } return TRUE; }
no i wiem,że zły argument przesyłam do funkcji DestroyWindow, a tam ma być uchwyt do okna które chce zniszczyć, czyli wg mnie HWND ret, no tylko że w tej funkcji nie jest on widoczny. Sorki ale programista ze mnie marny heheee |
|
malan |
» 2010-12-29 17:00:17 Mi się wydaje, że przesyłasz dobry argument... :) |
|
flex55 Temat założony przez niniejszego użytkownika |
» 2010-12-29 22:31:26 No i jak wyczytałem w funkcji DestroyWindow( hwnd ) podajemy teraz tylko jeden argumenty, a nie jak w przypadku funkcji EndDialog( hwnd, IDOK ) . Ale i tak coś jeszcze trzeba zmienić, żeby to okienko było niemodalne. hmmmm, odpocznę i za tydzień wrócę do tematu hehe xD |
|
malan |
» 2010-12-29 22:35:03 Hm..., może to: To support keyboard navigation and other dialog box functionality, the message loop for the dialog box must call the IsDialogMessage function. |
|
|
« 1 » |