Надо: Создать диалог, две кнопки OK, CANCEL и обычный Tree... Сделал (в VS2005): Создал пустой проектик, вставил туда ресурс типа диалог, он пустой, там только кнопки OK, CANCEL. Так вот зацикливается мой DialogProc, в него падает мессага 0x0030 (WM_SETFONT вроде как) и все, далее рекурсия... Вот мой код: Код (Text): INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_COMMAND: switch(LOWORD(wParam)) { case IDOK: EndDialog(hwndDlg, TRUE); PostQuitMessage(0); return TRUE; case IDCANCEL: EndDialog(hwndDlg, FALSE); PostQuitMessage(0); return TRUE; default: return FALSE; } break; } return DefDlgProc(hwndDlg, uMsg, wParam, lParam); } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { BOOL bRet; MSG msg; HWND hwndDlg = NULL; hwndDlg = CreateDialog( hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, DialogProc); bRet = ShowWindow(hwndDlg, SW_SHOW); bRet = UpdateWindow(hwndDlg); while ( (bRet = GetMessage(&msg, NULL, 0, 0)) != 0 ) { if (bRet == -1 ) { // handle the error and possibly exit } else if (!IsWindow(hwndDlg) || !IsDialogMessage(hwndDlg, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return 0; } Чего не сделал, подскажите, или отошлите на сампл где можно подсмотреть?
так. ты, я вижу, из ресурса диалог грузишь.. а, ну ты и написал что из ресурса. ок, тогда почему бы тебе просто не сделать DialogBoxParam(0х400000, ТвойРесурс, 0, &WindowProc, 0); ? на этом месте этот тред зависнет до окончания диалога, зато WindowProc будет стабильно получать сообщения. кароче это я к тому, что после DialogBoxParam() код писать не стоит ¦)
sasha_s Из описания DialogProc в MSDN: Из описания DefDlgProc в MSDN: [offtop]Когда же народ начнёт читать MSDN?[/offtop]