Tastureingabe abfragen



  • Wenn du einen Dialog hast wird der ja vom Dialog-Manager verwaltet! Wo hast du denn da überhaupt WM_KEYDOWN abgefangen? Code!



  • BOOL CALLBACK WindowProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	switch (message)
        {
    		case WM_LBUTTONDOWN:
    			{
    				POINT p;
    				GetMousePos(p);
    				if(p.x != -1 && p.y != -1) Level->AddTile(p,TreeView->GetName());
    			}break;
    		case WM_KEYDOWN:
    			{
    				switch(wParam)
    					{
    						case VK_ESCAPE:
    							{
    								loop = false;
    							}break;
                                                  }
                                }
    }
    

    DAs ist ein Auszug! Ich habe dem Dialog diese CallbackFunktionion zugewiesn

    ( hwnd = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_MAIN),NULL,WindowProc); )

    Ich hoffe das sind alle Infos, ansonsten fragen!



  • Unregistrierter bin ich. Hatte Probs mit einloggen!



  • Du bist dir aber schon bewusst, dass es einen Unterschied zwischen einer normalen WindowProc und der DialogProc gibt (siehe Link) 🙄
    Bekommst du denn WM_LBUTTONDOWN, oder funktioniert das auch nicht? Bin mir nämlich grad nicht ganz sicher, was für Messages du in DialogProc alles bekommst (kannst du ja mal testen (z.B. mit Spy++)



  • Hi,

    ja ich bin mir dessen bewusst. WM_LBUTTONDOWN funktioniert einwandfrei. Ich habe auch schon manuell die entsprechende NAchricht an das Fenster gesendet:

    SendMessage(hwnd,WM_KEYDOWN,VK_ESCAPE,0)

    und die Nachricht wurde empfangen. Von daher muss die Message bei Dialogen gleich sein!



  • Hast du schonmal mit Spy++ nachgeschaut, was für Messages beim Tastendruck empfangen werden?



  • Ja, habe ich schon.

    Beim Tastendruck wird keine Message gesendet bzw. empfangen!



  • Hm - dann bin ich mit meinem Latein wohl leider am Ende 😞 - da muss dir jetzt wohl jemand anderes helfen (falls es überhaupt geht) 🙄



  • So ich habe jetzt herausgefunden, dass wenn ich alle Steuerelemnte, die ich auf das Dialogfeld angesetzt habe weglasse, also nur das per Hand erstellte OGL Fenster da ist, so wird die Nachricht gesendet bzw. empfangen. Sobald ein anderes Steuerelement dabei ist, kommt die Nachricht nicht an.



  • Hallo,

    ich habe jetzt den Focus abgefragt und der liegt immer auf dem ListView-Element:

    if(GetDlgItem(hwnd,IDC_LAYER) == GetFocus()) MessageBox(NULL,"X","X",MB_OK);
    

    Jetzt habe ich mal versucht den Focus auf das Hauptfenster zu setzen und dann wieder abzufragen:

    SetFocus(hwnd);
    if(hwnd == GetFocus()) MessageBox(NULL,"X","X",MB_OK);
    

    Das ist nun sehr seltsam, d.h. also ich kann den Focus nicht auf das Hauptfenster setzen, wieso?



  • Was sagt denn GetLastError()? Evtl. kannst du auch mal SetFocus(NULL); ausprobieren 🙄



  • Ich habe jetzt festgestellt, dass das Hauptfenster nie den Focus hat, wodurch die Nachricht WM_KEYDOWN nie empfangen werden konnte. Ich habe jetzt eigene Callbackfunktionen für die anderen Steuerelemente erstellt und die WM_KEYDOWN Message an das Hauptfenster weitergeleitet. Jetzt klappt alles!


Anmelden zum Antworten