Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Старое MDI и опять заморочки 
:(
    Опции темы
Royan
Дата 5.5.2004, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Назрел у меня вопрос про MDI приложения. Вот в чем он заключается:

Я создаю MDI приложение, при этом у меня

а) Успешно создается и отображается главное окно
б) Успешно создается окно прозванное MDI client, я делаю это точь в точь как в Майкросовтовских примерах (внутри обработчика WM_CREATE):
Код

CLIENTCREATESTRUCT ccs;

 // Retrieve the handle to the window menu and assign the
 // first child window identifier.
 ccs.hWindowMenu = GetSubMenu(GetMenu(hWnd), 1);
 ccs.idFirstChild = IDM_WINDOWCHILD;


 HMENU hMenu = GetMenu(hWnd);

 //Creating MDI client
 hwndMDIClient = CreateWindow("MDICLIENT", (LPCTSTR) NULL,
   WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL,
   0, 0, CW_USEDEFAULT, CW_USEDEFAULT, hWnd, hMenu, this->hInst, (LPSTR) &ccs);
 
 
 ShowWindow(hwndMDIClient, SW_SHOW);

Дескриптор hwndMDIClient получил надлежащее значение.

в)Создаю собственно само дочернее окно:
Код
MDICREATESTRUCT mcs;
mcs.szClass = lpszChildCls;
mcs.szTitle = "Untitled";
mcs.hOwner = ParentWndInstance;
               mcs.x = rect.left;
mcs.y = rect.top;
mcs.cx = rect.right - rect.left;
mcs.cy = rect.bottom - rect.top;
mcs.style = dwStyle;//Пробовал и SW_SHOWDEFAULT и просто SW_SHOW
mcs.lParam = (LPARAM)lpParam;

 
 
 hChildWnd = (HWND) SendMessage (pParentWnd->hwndMDIClient, WM_MDICREATE, 0,
       (LONG) (LPMDICREATESTRUCT) &mcs);
 
 
[i]/*hChildWnd = CreateMDIWindow(lpszChildCls, lpszChildCls, mcs.style, mcs.x, mcs.y, mcs.cx, mcs.cy,
   hwndMDIClient, ParentWndInstance, (LPARAM)this);*/[/i]
  ShowWindow(hWnd, SW_SHOWDEFAULT);


Что после выполнения SendMessage (), что после выполнения CreateMDIWindow() эффект один и тот же hChildWnd получает значение (оно инициализируется) но самого окна не видно! При жтом в надлежащее меню добавляются отметки о том что окно создано, больше того я обрабатываю его(child'а) сообщение WM_CREATE. И еще чудо. Если вызвать для дочернего окна ShowWindow(hChildWnd, SW_MAXIMIZE); то появяться его три кнопочки, как это и положено в правом верхнем углу но нажатие на них ни к чему не приводит.
Если посмотреть что возвращает GetLastError() после вызова SendMessage или CreateMDIWindow() то выяснится что ошибка == ERROR_INVALID_HANDLE, прошу заметить НЕ ERROR_INVALID_WINDOW_HANDLE, а именно какой-то хэндл.

И вот на этом моменте я топчусь у же дня три



--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
srd
Дата 5.5.2004, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: 27
Всего: 49



Цитата
mcs.style = dwStyle;//Пробовал и SW_SHOWDEFAULT и просто SW_SHOW

Зачем? SW_SHOWDEFAULT, SW_SHOW - константы для функции ShowWindow(). А стили там указываются другие:
Цитата

Specifies the style of the MDI child window. If the MDI client window was created with the MDIS_ALLCHILDSTYLES window style, this member can be any combination of the window styles listed in the description of the CreateWindow function. Otherwise, this member can be one or more of the following values.
WS_MINIMIZE
Creates an MDI child window that is initially minimized.
WS_MAXIMIZE
Creates an MDI child window that is initially maximized.
WS_HSCROLL
Creates an MDI child window that has a horizontal scroll bar.
WS_VSCROLL
Creates an MDI child window that has a vertical scroll bar.

Скопировано из MSDN


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
Royan
Дата 5.5.2004, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Это уже просто было от отчаяния. На самом деле никаких ShowWindow() не надо, достаточно (по теории достаточно, но видимо это не мой случай) написать mcs.style = 0; Где mcs это MDICREATESTRUCT. Это по правде очень сложный вопрос.


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0462 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.