"kleines" problem mit tastaturabfrage bei nichtmodalen dialogen



  • hi...
    habe das problem, dass ich die nachrichtenverarbeitung noch nicht so ganz kapiere...
    ich möchte ein oder mehrere nichtmodale dialoge erzeugen und vom jeweils aktiven die tastatureingabe abfangen (WM_KEYDOWN)...

    da ich von natur aus faul bin, habe ich meinen "main-dialog" mit DialogBox erstellt...

    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow )
    {
    	ghInst = hInstance;
    	int iRet;
    
    	iRet = DialogBox(ghInst, MAKEINTRESOURCE(IDD_DIALOG_MAIN), NULL, (DLGPROC)dlgProcMain);
    	return false;
    }
    

    der 2te dialog soll nichtmodal werden, deswegen createdialog!?

    BOOL CALLBACK dlgProcMain( HWND hwndMain, UINT uMsg, WPARAM wParam, LPARAM lParam )
    {
    	switch(uMsg)
    	{
    
    	case WM_INITDIALOG:
    
    		ghwndMain = hwndMain;
    		break;
    
    	case WM_COMMAND:
    		switch(wParam)
    		{
               case IDC_BtnDia2: 
               if(!IsWindow(ghwndShow))
    			{
    				ghwndShow = CreateDialog(ghInst, MAKEINTRESOURCE(IDD_DIALOG_SHOW), ghwndMain, (DLGPROC)dlgProcShow);
    				ShowWindow(ghwndShow, SW_SHOW);
    			}
    			else
    				SendMessage(ghwndShow, WM_INITDIALOG, 0, 0);
    
    			SetForegroundWindow(ghwndShow);
    			break;
            }
       }
    ...
    }
    

    nachdem was ich bis jetzt gefunden hab könnte man das prob. mit einem Hook lösen (dachte nur, es geht vllt auch etwas einfacher)...

    als nächtes gibts die nachrichtenschleife....

    while(GetMessage(&Msg, NULL, 0, 0))
        {
            if(!IsDialogMessage(hwnd, &Msg))
            {
                TranslateMessage(&Msg);
                DispatchMessage(&Msg);
            }
        }
    

    nun mein eigentliches problem:
    kann/darf ich diese schleife mit einbauen, wenn ich "DialogBox" benutze?
    wenn ja wo?
    wenn nicht, gibts eine andere möglichkeit die eingaben abzufangen?

    MfG
    Schandmaul


  • Mod

    Diese Nachrichtenschleife macht bei einer DialogBox keinen Sinn! DialogBox hat selbst eine Nachrichtenschleife.
    Wenn Du DialogBox verwendest, hast Du gar keine Möglichkeit die Tastatureingaben vorzufiltern, außer Du verwendest einen Hook.

    Einfacher ist es den Dialog nicht Modal zu bauen, dann eine entsprechende Nachrichtenschleife selbst zu bauen, in der Du IsDialogMessage verwendest.
    Evtl. dann von Hand, den Parent Dialog disablen und wieder enablen.


Anmelden zum Antworten