SendMessage problem
-
hi,
ich hab ein problem beim senden einer nachricht.
folgendes problem:
in meiner anwendung gibt es eine eingabezeile in der suchwörter eingegeben werden können, die suche soll dann entsprechend durch drücken der eingabetaste gestartet werden, oder über klicken des "Go" Buttons.Ich hab deshalb die Eingabzeile gesubt-classed um das drücken der Eingabetaste abzufangen und um dann ein SendMessage an die WM_COMMAND vom Hauptfenster zu schicken das nun die Case-Anweisung des "Go-Buttons" ausgeführt werden soll.
Die Nachricht wird auch verschickt(return code 0), allerdings passiert nix und ich weis nicht sor echt woran es liegt. Hier mal die entsprechenden codeschnipsel:
#define ID_GOBUTTON WM_USER+3 /* ID des Go-Button */ ----------------------------------- /* Erzeugung und Sub-Classing der Zeile für die Suchbegriffe */ hSearchLine = CreateWindow(L"edit", L"", WS_VISIBLE | WS_CHILD | ES_LEFT | WS_TABSTOP , 0, 0, 0, 0, hWnd, HMENU(ID_SEARCHLINE), ((LPCREATESTRUCT)lParam)->hInstance, NULL); PrevWndProcSearchLine = SetWindowLongPtr(hSearchLine, GWLP_WNDPROC, (LONG_PTR) SearchLineProc); ------------------------------------- /* Die Callbackroutine für die Suchbegriffzeile */ LRESULT CALLBACK SearchLineProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_KEYDOWN: switch(wParam) { case 0x0D: /* Carrige Return (Entertaste) abfragen */ int a= SendMessage(hWnd, WM_COMMAND, NULL, ID_GOBUTTON); /* Bei Eingabetaste identisch wie mit Buttonklick verhalten */ break; } } return CallWindowProc ((WNDPROC) PrevWndProcSearchLine, hWnd, message, wParam, lParam); } ------------------------------------------------------------- /* Hauptroutine wo eigentlich der Sendmessage ankommen und verarbeitet werden sollte */ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc, hdcTmp; static HWND hListView, hSearchLine, hGoButton; static int iWindowWidth, iWindowHeight; switch (message) { /* .... */ case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Menüauswahl bearbeiten: switch (wmId) { case IDM_\1: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; case ID_GOBUTTON: { MessageBox(hWnd, L"pog",L"pog", MB_OK); break; } default: return DefWindowProc(hWnd, message, wParam, lParam); } break; /* .... */Die Nachricht kommt, why ever, nicht an. Jemand eine Idee?
-
slfk schrieb:
Die Nachricht wird auch verschickt(return code 0), allerdings passiert nix
Du sendest via SendMessage () WM_COMMAND mit ID_GOBUTTON als lParam. Aber in der WndProc fragst Du bei "case WM_COMMAND" den lParam nicht ab.
-
hm, ok, scheint jedoch nicht das problem gelöst zu haben.
Wenn ich jetzt
SendMessage(hWnd, WM_COMMAND, ID_GOBUTTON, NULL);schicke tut sich trotzdem nix.
Wenn ich nachdem senden der nachricht das nächstemal in der Hauptschleife wieder an die WM_COMMAND komme, steht dort als wmID die ID_SEARCHLINE drin (was WM_USER +2 bzw 1026 entspricht).
muss ich irgendwie eine unterscheidung für das loword/hiword beim sendmessage mitgeben?
-
Prüfe mal, welches Fenster das hWnd in SendMessage (hWnd,...) ist. Hauptfenster oder Edit-Feld ?
-
merker schrieb:
Prüfe mal, welches Fenster das hWnd in SendMessage (hWnd,...) ist. Hauptfenster oder Edit-Feld ?
Danke, das war der Fehler.......
