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

[WinAPI]Sprawdzanie przycisku na oknie dialogowym

Ostatnio zmodyfikowano 2014-03-31 05:45
Autor Wiadomość
McAffey
Temat założony przez niniejszego użytkownika
[WinAPI]Sprawdzanie przycisku na oknie dialogowym
» 2014-03-25 05:45:31
Tworzę okno dialogowe WinAPI za pomocą CreateDialog a potem wyświetlam za pomocą ShowWindow. Jednak potrzebuję w nim trzeci przycisk, oprócz zwracanego IDCANCEL czy też IDOK, więc znając uchwyt do okna dialogowego po prostu rysuję sobie dodatkowz przycisk. Niestety nie wiem jak sprawdzać czy jest przyciśnięty. Zwykły if po ShowWindow
if(( HWND ) lPar == Przycisk )
 nie zdaje egzaminu, jak mogę się do tego przycisku dobrać ? Z góry dzięki za pomoc :)
P-107162
Adik80
» 2014-03-25 13:51:27
Obsluge przyciskow okna dialogowego robisz w kolejce komunikwatow okna dialogowego. Jesli chcesz wykonac jakas akcje w oknie glownym po nacisnieciu przycisku na oknie dialogowym to poporstu zdefinuj wlasny komunikat (#define WM_MENDDLGMSG WM_USER+1) i w obsludze zdarzenia wyslij go do okna glownego: SendMessage(GetParent(hWnd), WM_MENDDLGMSG, XXX, YYY); (Mam nadzieje ze niczego nie pomieszaleb bo z winapi nie bawilem sie od dluzszej chwili)
P-107164
McAffey
Temat założony przez niniejszego użytkownika
» 2014-03-29 23:21:30
Zobacz, mam zwykłą kolejkę komunikatów okna dialogowego taką :
C/C++
switch( msg ) {
case WM_COMMAND:
    {
        switch( LOWORD( wParam ) ) {
        case IDCANCEL:
            EndDialog( hwnd, 0 );
            break;
           
        case IDOK:
            MessageBox( NULL, "test.", "test", MB_ICONINFORMATION | MB_OKCANCEL );
            break;
        }
    }
    break;
    default:
    return FALSE;
}

a gdy wciskam dodany przez siebie przycisk wywołuje się MessageBox, tak jakbym klikał "OK".

Gdy dodaję sprawdzenie czy wcisnąłem przycisk o tak :
C/C++
switch( msg ) {
case WM_COMMAND:
    {
        switch( LOWORD( wParam ) ) {
        case IDCANCEL:
            EndDialog( hwnd, 0 );
            break;
           
        case IDOK:
            MessageBox( NULL, "test.", "test", MB_ICONINFORMATION | MB_OKCANCEL );
            break;
        }
       
        if(( HWND ) lParam == przycisk )
        {
            MessageBox( NULL, "test2.", "test2", MB_ICONINFORMATION | MB_OKCANCEL );
        }
    }
    break;
    default:
    return FALSE;
}

to wywołują się oba messageboxy, jakbym kliknął zarówno przycisk dodany przez siebie i "OK". Jak można to "rozdzielić" ?
P-107457
Monika90
» 2014-03-30 10:42:12
Zobacz, mam zwykłą kolejkę komunikatów okna dialogowego taką :
Kolejka komunikatów to struktura danych, którą zarządza Windows, w twoim kodzie jej nie ma. (to tak na marginesie).

to wywołują się oba messageboxy
Może id które nadałeś temu twojemu przyciskowi jest równe 1. Użyj większej liczby, większej niż 100 najlepiej.
P-107464
McAffey
Temat założony przez niniejszego użytkownika
» 2014-03-30 13:04:49
Nie nadają przyciskowi żadnej wartości, tworzę go jako uchwyt :
C/C++
przycisk = CreateFont( 14, 0, 0, 0, 300, false, false, false, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, "Arial" );
przycisk = CreateWindowEx( 0, WC_BUTTON, "tekst", WS_CHILD | WS_VISIBLE, 90, 176, 75, 23, hDlg,( HMENU ) 1, * hInst, 0 );
 co w takiej sytuacji ?
P-107470
Monika90
» 2014-03-30 13:21:57
A to
( HMENU ) 1
, to co niby jest? To jest id równe 1, czyli to samo co IDOK.

P-107473
McAffey
Temat założony przez niniejszego użytkownika
» 2014-03-31 05:45:31
No jasne, już wszystko gra, dzięki za pomoc.
P-107507
« 1 »
  Strona 1 z 1