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

Problem z CreateDialog

Ostatnio zmodyfikowano 2010-12-29 22:35
Autor Wiadomość
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 :)
P-25825
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)
P-25826
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 :)
P-25827
malan
» 2010-12-28 23:24:38
Tak dla pewności się zapytam... Wiesz teraz, co przekazać do
DestroyWindow
, prawda?
P-25829
flex55
Temat założony przez niniejszego użytkownika
» 2010-12-29 16:29:39
Tak to zrobiłem
C/C++
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
P-25873
malan
» 2010-12-29 17:00:17
Mi się wydaje, że przesyłasz dobry argument... :)
P-25887
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
P-25904
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.
P-25905
« 1 »
  Strona 1 z 1