[WinAPI] edit +WM_CHAR

0

Cześć

Mam pytanie o otoz w Winapi jest to pole tekstu - edit. I chcialem zrobić tak, że po wcisnięciu entera "wział" mi do tablicy wszystko to co napisałem, ale gdy pisze to funkcja WM_CHAR nie działa. Nie wiem co mam zrobić. Pomóżcie!!

Z góry dziękujemy

0

"wział" mi do tablicy wszystko to co napisałem, ale gdy pisze to funkcja WM_CHAR nie działa

Edit swoja troga... ;)

Nie znam takiej funkcji jak WM_CHAR, ale jesli chodzi o komunikat to system powinien wyslac do odpowiedniego okienka odpowiedni komunikat ;).
Jak wam WM_CHAR nie dziala to go musieliscie nie obsluzyc, albo w petli glownej nie wstawiliscie TranslateMessage()...

Ogolnie: wszystko co byscie chcieli wiedziec jest w MSDN, ale wam sie pewnie d**y nie chce ruszyc :/.

0
Krukers. napisał(a)

Nie znam takiej funkcji jak WM_CHAR, ale jesli chodzi o komunikat to system powinien wyslac do odpowiedniego okienka odpowiedni komunikat ;).

Ale z tego co wiem to komunikat,y które się wyśyla do okien one nie mają na celu sprawdzenia czy jakiś przycisk jest wciśnięty, ale mają na celu tak jakbym wciśnięcie tego przycisku.... ale ja nie wiem jestem poczatkujący więc pewnie ty masz racje, ale jakbyś był łaskaw mi to wytlumaczyć...

Krukers. napisał(a)

Jak wam WM_CHAR nie dziala to go musieliscie nie obsluzyc, albo w petli glownej nie wstawiliscie TranslateMessage()...

To akruat mam chyba dobrze, bo obsłużyłem go w pętli głównej

0

WM_CHAR odpowiada za komunikat okna, do ktorego nalezy procedura obslugi komunikatow. Czyli tworzac edit'a w oknie nie obsluzysz go w funkcji glownej glownego okna. Nie wiem czy nie mozna tego obsluzyc poprzez WM_COMMAND z odpowiednimi parametrami lparam lub wparam. W najgorszym przypadku mozna zamienic oryginalna obsluge okna na wlasna (SetWindowLong z parametrem GWL_WNDPROC)

0

W najgorszym przypadku mozna zamienic oryginalna obsluge okna na wlasna (SetWindowLong z parametrem GWL_WNDPROC)

Wiesz ja nie zabardzo wiem o co Ci chodzi. Nie znam funkcji (?) SwtWindowLong, a niestety angielskiego tez za dobrze nie znam wieć na MSDN mi jest strasznie cięzko :/.

No ale o co chodzi z tymi komunikatami wysyłanymi do odpowiedniego okna??

0

Jak nie znasz angielskiego to przecież są różne translatory on-line [!!!]

0

chcesz przyklad w c czy delphi?

0
maniek_2 napisał(a)

chcesz przyklad w c czy delphi?

jakbyś mógł to byś dał przykład w c. Z góry dzięki!!

0

Nie wiem czy nie mozna tego obsluzyc poprzez WM_COMMAND z odpowiednimi parametrami lparam lub wparam

Jak przeglądałęm jescze raz ten temat abys ię coś dowiedzieć co mogłobymi się przydać, to rzuciło mi się w o czyte to oto zacytowane zdanie i pozostanowieniu się nie rozumiem.... o co chodzi, że można byłoby obsłużyć poprzez WM_COMMAND z odpowiednimi parametrami lparam i wparam.... nie rozumiem co to są ODPOWIEDNIE parametry - czy mogą odpowiednie parametry :/ ??

0

W poszukiwaniu desperacko jak to zrobić znalazłem taką funkcje OnKeyPress... tylko, że nigdzie nie moge znaleźć jak się ją używa - wiem tylko, że służy ona do sprawdania jaki klaiwsz został nacisięty czy cośpodobnego, no ale czy to możę się przydać aby po wciśnięciu enter'a "wziął" z edita tekst do tablicy??

0

Dobra, moze napisze jesli tym razem dobrze Cie zrozumialem ;)

if(msg.message == WM_COMMAND && HIWORD( msg.wParam ) == EN_CHANGE)
{
//...
}

Dostosuj sobie to do Twojego programu i powinno dzialac.
A na przyszłość: lepiej obslugiwac komunikaty w procedurze okna :]

Pozdrawiam

0

Nie zabardzo rozumiem :/
Próbowałem zrozumieć i mi nic nie wyszło. Njlepiej jak dam cały kod:

#include  <windows.h>
static TCHAR nazwa[]=TEXT("OKIENKO");

LRESULT CALLBACK ProcOkna(HWND uchwyt,UINT komunikat,WPARAM wParam,LPARAM lParam)
{
if(komunikat == WM_COMMAND && HIWORD(wParam ) == EN_CHANGE)
{
SetDlgItemText(uchwyt,100,"dobrze");
}

  switch (komunikat)
  {
        case WM_CREATE:
        //
        break;

        case WM_DESTROY:
        PostQuitMessage(0);
        break;

        case WM_KEYDOWN:
            switch (wParam)
            {
            case VK_ESCAPE:
            PostQuitMessage(0);
            break;
            }
        break;

default:
return (DefWindowProc(uchwyt,komunikat,wParam,lParam));
}
return(0L);
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WNDCLASS klasaokna;
HWND uchwyt;

klasaokna.style=CS_HREDRAW | CS_VREDRAW;
klasaokna.lpfnWndProc=ProcOkna;
klasaokna.cbClsExtra = 0;
klasaokna.cbWndExtra = 0;
klasaokna.hInstance = hInstance;
klasaokna.hIcon = NULL;
klasaokna.hCursor = LoadCursor(NULL, IDC_ARROW);
klasaokna.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
klasaokna.lpszMenuName = NULL;
klasaokna.lpszClassName = nazwa;

if(RegisterClass(&klasaokna)==0) return FALSE;

uchwyt=CreateWindow(nazwa,"pierwszy program w WINAPI",WS_OVERLAPPEDWINDOW,
        100, 100, 400, 300,NULL, NULL, hInstance, NULL);
CreateWindow("edit",NULL, WS_CHILD | WS_VISIBLE,0,50,125,15,uchwyt,(HMENU)100,hInstance,NULL);

if(uchwyt==NULL) return FALSE;

ShowWindow(uchwyt,SW_SHOW);
UpdateWindow(uchwyt);

MSG komunikat;
while(GetMessage(&komunikat, NULL, 0, 0))
{
TranslateMessage(&komunikat);
DispatchMessage(&komunikat);
}
return komunikat.wParam;
}

Izamiast Pojawić mi się słowo "dobrze" to mi się wyłącza. Wiem pewnie połełniłem jakiś błą, ale ja naprawde szukałem, niestety nie znalazłęm... nie było podobnego przykładu (bły tam jeszcze inne parametry jak id przycisku, kiedy został nacisniety)

0 użytkowników online, w tym zalogowanych: 0, gości: 0