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 daswhile (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_
-
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_
-
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.