Probleme mit dem tabulator



  • Hey @all,

    ich habe ein Dialogfenster mit dem Designer erstellt, das ich wie folgt aufrufe:

    CreateDialog(hInst, (LPCTSTR)IDD_EDITOR, hDlg, (DLGPROC)DialogEditor);
    

    Mein Problem ist nun, dass ich NICHT mit den Tabulator navigieren kann, wie es normalerweise üblich bzw. bekannt ist.

    Kann mir diesbezüglich jemand helfen?

    Vielen Dank im Voraus

    Lg _freeze_



  • Soweit ich weis hat das was mit deiner Nachrichtenschleife zu tun.
    Versuch mal das

    while (GetMessage (&msg, NULL, 0, 0))
       {
          if (!IsWindow(hDlg) || !IsDialogMessage(hDlg, &msg))
          {
             TranslateMessage (&msg);
             DispatchMessage (&msg);
          }
       }
    

    hDlg ist in diesem Fall ne globale Variable die du dann beim Aufruf von CreateDialog dir holst.

    hDlg = CreateDialog(hInst, (LPCTSTR)IDD_EDITOR, hDlg, (DLGPROC)DialogEditor);
    

    Hoffe das hilft dir weiter.

    MfG schirrmie



  • Die Nachrichtenschleife habe ich eh so, es tut sich trotzdem leider nix 😞

    Gibts noch eine andere alternative?

    Also die Enter bzw. ESC Taste funktionieren auch nicht, scheint so als wenn keine Funktionalität vorhanden wäre

    Lg _freeze_



  • Sorry das ich den Thread nochmals hoch hebe... Hat wirklich keiner eine Idee? 😞

    Lg _freeze_


  • Mod

    freeze schrieb:

    Die Nachrichtenschleife habe ich eh so, es tut sich trotzdem leider nix 😞

    Gibts noch eine andere alternative?

    Also die Enter bzw. ESC Taste funktionieren auch nicht, scheint so als wenn keine Funktionalität vorhanden wäre

    Bist Du ganz sicher, dass hDlg auch das Handle Deines Dialoges erhält und, dass auch wirklich diese Schleife durchlaufen wird?



  • Also, in der Hauptfunktion steht folgendes:

    int APIENTRY _tWinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPTSTR    lpCmdLine,
                         int       nCmdShow) {
    .
    .
    .
        ShowWindow(hWndM, true);
    
        hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_CONFIG_EDITOR); 
        if (hAccelTable == NULL) {
            MessageBox(hWndM, "Error by Accelerator", "", MB_OK);
        }
    
        while(IsWindow(hWndM)) {
            while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
                if(msg.message == WM_QUIT)
                    break;
                if (!TranslateAccelerator(hWndM, hAccelTable, &msg)) {
                    TranslateMessage(&msg);
                    DispatchMessage(&msg);
                }
                memset(&msg, 0, sizeof(msg));
            }
            Sleep(1);
        }
    .
    .
    .
    }
    

    Der Dialog wird wie folgt aufgerufen:

    HWND hDlg = CreateDialog(hInst, (LPCTSTR)IDD_EDITOR, hWndM, (DLGPROC)DialogEditor);
    

    Die Callback Funktion selbst sieht da in etwas so aus:

    LRESULT CALLBACK DialogEditor(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {
        switch (message) {
    	case WM_INITDIALOG: {
                HFONT hFixFont = CreateFont(15, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "Courier New");
                SendMessage(GetDlgItem(hDlg, IDC_RICHEDIT21), WM_SETFONT, (WPARAM)hFixFont, MAKELONG(TRUE, 0));
                return TRUE;
    	}
    	case WM_COMMAND:
                if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) {
                    //EndDialog(hDlg, LOWORD(wParam));
                    dia_editor = NULL;
                    DestroyWindow(hDlg);
                    return TRUE;
                }
                break;
    .
    .
    .
    

    Sehe hier keinen Fehler

    Lg _freeze_


  • Mod

    freeze schrieb:

    Sehe hier keinen Fehler

    Ich schon! 🕶 Hast Du eigentlich die Nachricht von schirrmie gelesen?

    Schau mal genau hin:

    while (GetMessage (&msg, NULL, 0, 0))
       {
          if (!IsWindow(hDlg) || !IsDialogMessage(hDlg, &msg))
          {
             TranslateMessage (&msg);
             DispatchMessage (&msg);
          }
       }
    

    Hier steht das Zauberwort ⚠ IsDialogMessage, auch ich habe Dich gefragt ob Du hDlg auch wirklich benutzt hast!

    BTW: Den memset auf msg kanst Du Dir getrost sparen.


Anmelden zum Antworten