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

winAPI obsługa text area

Ostatnio zmodyfikowano 2014-02-26 10:18
Autor Wiadomość
debilek
Temat założony przez niniejszego użytkownika
winAPI obsługa text area
» 2014-02-24 16:31:08
Witam!

Mam coś takiego

C/C++
#define BUTTON_1 501
#define BUTTON_2 502
#define BUTTON_3 503
#define EXIT     504
#define TEKST    505

C/C++
g_przycisk_1 = CreateWindowEx( 0, "BUTTON", "BUTTON 1", WS_CHILD | WS_VISIBLE, 100, 100, 100, 50, g_okno,( HMENU ) BUTTON_1, * g_hInst_wsk, 0 );
g_przycisk_2 = CreateWindowEx( 0, "BUTTON", "BUTTON 2", WS_CHILD | WS_VISIBLE, 201, 100, 100, 50, g_okno,( HMENU ) BUTTON_2, * g_hInst_wsk, 0 );
g_przycisk_3 = CreateWindowEx( 0, "BUTTON", "BUTTON 3", WS_CHILD | WS_VISIBLE, 302, 100, 100, 50, g_okno,( HMENU ) BUTTON_3, * g_hInst_wsk, 0 );

g_exitButton = CreateWindowEx( 0, "BUTTON", "EXIT", WS_CHILD | WS_VISIBLE, 403, 100, 100, 50, g_okno,( HMENU ) EXIT, * g_hInst_wsk, 0 );

g_txtArea = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", 0, WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 100, 210, 200, 200, g_okno,( HMENU ) TEKST, * g_hInst_wsk, 0 );

C/C++
LRESULT CALLBACK WndProc( HWND hwnd, UINT komunikaty, WPARAM wPar, LPARAM lPar )
{
    switch( komunikaty )
    {
    case WM_COMMAND:
        switch( wPar )
        {
        case BUTTON_1:
            MessageBox( hwnd, "Nacisnoles button 1", "INFO", MB_OK | MB_ICONINFORMATION );
            break;
        case BUTTON_2:
            MessageBox( hwnd, "Nacisnoles button 2", "INFO", MB_OK | MB_ICONINFORMATION );
            break;
        case BUTTON_3:
            MessageBox( hwnd, "Nacisnoles button 3", "INFO", MB_OK | MB_ICONINFORMATION );
            break;
        case EXIT:
            PostQuitMessage( 0 );
            break;
        case TEKST:
            MessageBox( hwnd, "Nacisnoles button 3", "INFO", MB_OK | MB_ICONINFORMATION );
            break;
            //default:
            //MessageBox(hwnd, "Nacisnoles nie wiadomo co", "INFO", MB_OK | MB_ICONINFORMATION);
        }
        //if( (HWND)lPar == g_txtArea )
        // SetWindowText(g_txtArea, "blablablabla");
        //if( wPar == 1) alternatywny sposób
        //MessageBox(hwnd, "Ty gnido", "Info", MB_OK | MB_ICONINFORMATION);
        break;
    case WM_CLOSE:
        PostQuitMessage( 0 );
        break;
        default:
        return DefWindowProc( hwnd, komunikaty, wPar, lPar ); //domyślna obsługa reszty komunikatów
    }
    return 0;
}

i teraz tak:
kiedy nacisnę w obszarze g_txtArea to powinien się wywołać 'case TEKST:', ale się tak nie dzieje, zamiast tego wykonuje się default (jeśli od komentuje).
ale w ten sposób
C/C++
if(( HWND ) lPar == g_txtArea )
SetWindowText( g_txtArea, "blablablabla" )
funkcja setWindowsText aktywuje się dopiero po kliknięciu w obszar g_txtArea.

Dlaczego rzutowanie stałej na HMENU w tym przypadku nie działa?
oraz dlaczego kiedy sprawdzam kliknięcie za pomoca if to blokuje wprowadzanie danych??
proszę o pomoc
P-105200
Monika90
» 2014-02-25 11:04:35

C/C++
case WM_COMMAND:
switch( wPar )
Powyższy kod jest błędny, powinno być
C/C++
case WM_COMMAND:
switch( LOWORD( wPar ) )

dlaczego kiedy sprawdzam kliknięcie za pomoca if to blokuje wprowadzanie danych??
Nie sprawdzasz kliknięcia. Kontrolka EDIT nie wysyła komunikatu gdy zostanie kliknięta. Choć wysyła w innych sytuacjach np. gdy zyska albo straci focus.
P-105239
debilek
Temat założony przez niniejszego użytkownika
» 2014-02-25 15:32:52
skoro kontrolka edit nie sprawdza kliknięcia to dlaczego wywołuje mi się default kiedy kliknę w jej obszarze ??
i to dwa razy, najpierw raz, klikam ok i znowu się pojawia messageBox
P-105255
Monika90
» 2014-02-25 16:33:49
Muszę cytować samą siebe
wysyła w innych sytuacjach np. gdy zyska albo straci focus
P-105257
debilek
Temat założony przez niniejszego użytkownika
» 2014-02-25 17:56:22
juz nic nie rozumiem, lecę z waszym kursem winapi, a już przy kontrolkach jest pełno luk których nigdzie nie moge znaleźć.
Więc jak klikam w obszarze kontrolki EDIt to jak uniknąć żeby się ten default nie wywołał, mam ten sam problem z comboboxem.
żeby uzyć tego makra to odczytania indexu to musialem dołączyć windowsx.h, a pisało że windows.h wystarcza, to jeszcze jak wybiore opcje w comboboxie to sie Message box wyświetla kilka razy 
P-105260
Monika90
» 2014-02-26 10:18:26
jak uniknąć żeby się ten default nie wywołał
Ale po co Ci ten default? Usuń default, to się nie będzie wywoływał.

jak wybiore opcje w comboboxie to sie Message box wyświetla kilka razy 
Combobox wysyła wiele różnych powiadomień, tu masz listę:
http://msdn.microsoft.com​/en-us/library/windows/desktop​/ff485902%28v=vs.85%29.aspx
wybierz to które Cię interesuje, prawdopodobnie CBN_SELCHANGE, a może CBN_SELENDOK.

Rodzaj powiadomienia jest zapisany w HIWORD(wParam) komunikatu WM_COMMAND
P-105284
« 1 »
  Strona 1 z 1