MDI-child и ресурс диалогового окна (WinAPI)

Doid 24.03.2004 - 08:36 | Разработка ведется в MS VS.NET с использованием WinAPI. Как в MDI-приложении создать MDI-child, взяв в качестве формы ресурс диалогового окна? Подскажите, плз. Заранее благодарен. P.S. MFC и прочее не предлагать.
Doid 1 - 25.03.2004 - 11:19 | А можно ли считать инфу класса окна вызовом функции GetClassInfoEx() с указанием в качестве класса окна выражения (LPCTSTR)IDD_MY_DIALOG? P.S. Пробовал, но структура не заполняется. Может нужно что-то специально сделать или вызвать в другой момент? P.P.S. Совсем за^#%лся :((.
UE 2 - 25.03.2004 - 13:05 | 2Doid: > Как в MDI-приложении создать MDI-child, взяв в качестве формы ресурс диалогового окна? Может быть можно сделать так, чтобы диалог был дочерним к обычному MDI-child'ному окошку?... > А можно ли считать инфу класса окна вызовом функции GetClassInfoEx() с указанием в качестве класса окна выражения (LPCTSTR)IDD_MY_DIALOG? Нельзя. (LPCTSTR)IDD_MY_DIALOG - не есть класс окна. Кстати, хорошо, что не упало приложение после такого вызова GetClassInfoEx :)
Doid 3 - 26.03.2004 - 12:31 | (UE) 1. У меня не получилось сделать дочерним диалог к MDI-child`ному окну :(. 2. Спасибо, буду знать.
UE 4 - 27.03.2004 - 06:12 | 2Doid: > 1. У меня не получилось сделать дочерним диалог к MDI-child`ному окну :(. Почему?
Doid 5 - 29.03.2004 - 09:27 | (UE) > Почему? Привожу последовательность действий: 1. Регистрирую класс главного окна приложения. 2. Создаю главное окно: ... locWnd = CreateWindow(globWindowClass, globTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, _Instance, NULL); ... 3. В обработчике события WM_CREATE процедуры главного окна создаю MDI-клиента: ... globMDIClient = CreateWindow( "MDICLIENT", (LPCTSTR) NULL, WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL, 0, 0, 0, 0, _Wnd, (HMENU)NULL, globInst, (LPSTR) &locCCS); ShowWindow(globMDIClient, SW_SHOW); ... 4. Там же регистрирую класс MDI-child`а: ... RegisterRROIClass(globInst, globRROIWindowClass); ... 5. В оконной процедуре главного окна вызывается (в конце) обработчик DefFrameProc. 6. В оконной процедуре MDI-child`а вызывается (в конце) обработчик DefMDIChildProc. 7. В обработчике события вызова MDI-child`а создается сам MDI-child: ... case IDM_TOOLS_RROI: HWND locDB; locDB = CreateMDIWindow(globRROIWindowClass, NULL, NULL, 100, 100, 250, 250, globMDIClient, globInst, NULL); // (До этого момента все нормально создается и функционирует) // В качестве примера взял базовы CreateDialog(globInst, (LPCTSTR)IDD_ABOUTBOX, locDB, (DLGPROC)About); break; ...
Doid 6 - 29.03.2004 - 09:49 | (UE) > Почему? Привожу последовательность действий: 1. Регистрирую класс главного окна приложения. 2. Создаю главное окно: ... locWnd = CreateWindow(globWindowClass, globTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, _Instance, NULL); ... 3. В обработчике события WM_CREATE процедуры главного окна создаю MDI-клиента: ... globMDIClient = CreateWindow( "MDICLIENT", (LPCTSTR) NULL, WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL, 0, 0, 0, 0, _Wnd, (HMENU)NULL, globInst, (LPSTR) &locCCS); ShowWindow(globMDIClient, SW_SHOW); ... 4. Там же регистрирую класс MDI-child`а: ... RegisterRROIClass(globInst, globRROIWindowClass); ... 5. В оконной процедуре главного окна вызывается (в конце) обработчик DefFrameProc. 6. В оконной процедуре MDI-child`а вызывается (в конце) обработчик DefMDIChildProc. 7. В обработчике события вызова MDI-child`а создается сам MDI-child: ... case IDM_TOOLS_RROI: HWND locDB; locDB = CreateMDIWindow(globRROIWindowClass, NULL, NULL, 100, 100, 250, 250, globMDIClient, globInst, NULL); // !!До этого момента все нормально создается и функционирует!! // Теперь сам трабл. // Поскольку функций создания окон из идентификаторов диалога я не нашел, // воспользовался функцией CreateDialog для создания немодального окна // диалога. В качестве процедуры диалога взял стандартную процедуру // обработки для окна About. Свойства диалогового окна следующие: // DS_SETFONT | DS_FIXEDSYS | WS_CHILD. CreateDialog(globInst, (LPCTSTR)IDD_RROI, locDB, (DLGPROC)About); break; ... 8. Запускаю... и вижу, что сам MDI-child создается, но диалогом и не пахнет. Мозг при этом испытывает неприятное чувство скрежета лыжи об асфальт.
Doid 7 - 29.03.2004 - 09:51 | :O Блин, на пост №5 просьба не обращать внимание.
UE 8 - 29.03.2004 - 10:50 | 2Doid: > CreateDialog(globInst, (LPCTSTR)IDD_RROI, locDB, (DLGPROC)About); Попробуй вот так: HWND hDlg = CreateDialog(globInst, MAKEINTRESOURCE(IDD_RROI), locDB, (DLGPROC)About); ShowWindow(hDlg, SW_SHOW); Кроме того, погляди отладчиком, создается ли диалог. Если создается все и диалога нет, то погляди с помощью Spy, что у тебя с окошками творится... возможно, эта инфа будет полезна.
Doid 9 - 29.03.2004 - 11:34 | (UE) ShowWindow, оказывается, не хватало. Все работает! Спасибо большое за советы! :)

>>