Dialog in Klasse macht Probleme :(
-
Hallihallo, ich sitz nunmehr schon seit etwas längerer zeit an einem Problem wo ich nicht mehr weiterweis.
Und zwar geht es um folgendes:
ich habe eine DLL mit einer Dialogresource. In dieser DLL ist wiederum eine Klasse die die Resource per DialogBox lädt/öffnet/anzeigt ^^. Ich hab es nun hinbekommen das die scheinbar richtige Resource geladen wird, aber es wird einfach nix angezeigt. Ich frage in der Dialog-Callback die msg's ab, dort wird sehr häufig der Wert '28' geliefert, aber auch '48', '272'. Das sind meißten werte.
Jetzt wollte ich gern wissen warum das Dialogfeld einfach nicht angezeigt wird, ich hoffe ihr könnt mir da helfen =))Hier der Source dazu:
bool GLWindow::ShowDisplayDialog() { DialogBox(GetModuleHandle("engine.dll"), MAKEINTRESOURCE(IDD_SETTING), NULL, GLWindow::DlgProc); return true; } INT_PTR CALLBACK GLWindow::DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { static DEVICE dev; static DISPLAY dis; static GLWindow win; static char entry[256]; static char buf[256]; sprintf(buf, "callback->msg: %d", msg); MessageBox(NULL, buf, "Msg", NULL); switch(msg) { MessageBox(NULL, "switch", "Msg", NULL); case WM_INITDIALOG: { MessageBox(NULL, "init", "Msg", NULL); InitCommonControls(); dev.device_num = 0; dev.adapter = NULL; dis.display_num = 0; dis.settings = NULL; win.EnumDisplayAdapters(&dev); win.EnumDisplaySetting(&dev, &dis, 0); for(unsigned long j = 0; j < dis.display_num; j++) { sprintf(entry, "%u x %u x %u %uHz", dis.settings[j].width, dis.settings[j].height, dis.settings[j].bpp, dis.settings[j].frequenzy); SendDlgItemMessage(hwnd, IDC_SETTINGS, CB_ADDSTRING, 0, (LPARAM)(char*)entry); } for(unsigned int i = 0; i < dev.device_num; i++) { SendDlgItemMessage(hwnd, IDC_ADAPTER, CB_ADDSTRING, 0, (LPARAM)(char*)dev.adapter[i].device_string); } SendDlgItemMessage(hwnd, IDC_ADAPTER, CB_SETCURSEL, (WPARAM)0, 0); SendDlgItemMessage(hwnd, IDC_SETTINGS, CB_SETCURSEL, (WPARAM)0, 0); return TRUE; } case WM_COMMAND: { switch(LOWORD(wParam)) { case IDC_ADAPTER: { if(HIWORD(wParam) == CBN_SELCHANGE) { int i = (int)SendDlgItemMessage(hwnd, IDC_ADAPTER, CB_GETCURSEL, 0, 0); win.EnumDisplaySetting(&dev, &dis, i); SendDlgItemMessage(hwnd, IDC_SETTINGS, CB_RESETCONTENT, 0, 0); for(unsigned long j = 0; j < dis.display_num; j++) { sprintf(entry, "%u x %u x %u %uHz", dis.settings[j].width, dis.settings[j].height, dis.settings[j].bpp, dis.settings[j].frequenzy); SendDlgItemMessage(hwnd, IDC_SETTINGS, CB_ADDSTRING, 0, (LPARAM)(char*)entry); } SendDlgItemMessage(hwnd, IDC_SETTINGS, CB_SETCURSEL, (WPARAM)0, 0); } } case IDC_CANCEL: { PostQuitMessage(0); } case IDC_OK: { EndDialog(hwnd, wParam); return TRUE; } break; } } case WM_CLOSE: { EndDialog(hwnd, wParam); return TRUE; } case WM_DESTROY: { MessageBox(NULL, "WM_DESTROY", "Msg", NULL); return TRUE; } case WM_QUIT: { MessageBox(NULL, "WM_QUIT", "Msg", NULL); return TRUE; } } return FALSE; }Er kommt überhaupt nicht erst in den äußeren switch block.
-
Geht er denn in die GLWindow::DlgProc (BTW: Ist die als static deklariert (
Statische Methode) ? ) ?
-
Ja, er geht rein, hat sich aber auch inzwischen erledigt. Ein fehlendes "break" war der auslöser, da kann man schon wahnsinnig werden.
Mfg