Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: MDI на винапи  (Прочитано 5989 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
titov_alex
Участник

ru
Offline Offline

« : 13-11-2003 17:52 » 

Доброго всем времени суток.

у меня такая проблема:
нужно сделать MDI интерфейс на чистом винапи. Причем, клиентская область должна занимать лишь часть главного окна - там еще есть туллбары, строка состояния и т.п. Но, при создании клиентского окна ("MDICLIENT"), координаты и размеры создаваемого окна игнорируются. Т.е. несмотря на то, что я указываю X=100 и Y=100, клиентское окно размещается на все главное (FRAME) окно. А в результате, например тулл бар расположен прямо поверх клиентского окна, и дочерние MDI окна, залезают под него.  Молчу

Пишу на VC++ 6.0, вот куски кода создания окон:

создание главного окна:
Код:
hWnd = CreateWindow)szWindowClass, szTitle, WS_OVERLAPPEDWINDOW | WS_MAXIMIZE | WS_CLIPCHILDREN,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL:;

это - при инициализации главного окна:
Код:
CreateStatusWindow )WS_CHILD | WS_VISIBLE, "hello", hWnd, ID_STATUS_LINE:;

ccs.hWindowMenu = GetSubMenu)GetMenu)hWnd:, 1:;
ccs.idFirstChild = ID_MDI_CHILD;
child_hwnd = CreateWindow) "MDICLIENT", )LPCTSTR: NULL, WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL | WS_CLIPSIBLINGS,
100, 100, 200, 200, hWnd, )HMENU: 0xCAC, hInst, )LPSTR: &ccs:;

это - при открытии нового сеанса:
Код:
new_hwnd = CreateMDIWindow)"MDI_CHILD_WINDOWS_CLASS", "mdi1", MDIS_ALLCHILDSTYLES | WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL | WS_CLIPSIBLINGS ,
300,100,300,300,child_hwnd,hInst,NULL:;


тоесть, все практически один-в-один согласно примерам из МСДН-а... :?

Вот и вопрос, а как это, сообственно, делается-то по-хорошему?

ЗЫ: после долгих мучений получилось отучить дочерние окна разворачиваться на все главное окно (путем ввода ограничений на перемещения окна - по мессаге WM_MOVING и WM_SIZING + координаты развернутого окна при обработке WM_SIZE сообщения), но этот вариант очень плохо смотрится, если включить ХР-шный интерфейс - ведь нужно, чтобы заголовок дочернего окна "прятался" под тулбар, а в разных темах рабочего стола по видимому разные размеры этого заголовка Жаль

ЗЫЫ: и еще вопросик...  глупый :oops:
что за "(HMENU) 0xCAC" указывается при создании клиентского окна? В МСДН-е это в примере стоит, хотя пробовал поставить 0 - все нормально!  :?

Спасибо.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #1 : 14-11-2003 19:34 » 

Надо посмотреть - так сразу не скажу...
В любом случае копай в сторону стилей.
Записан

А птичку нашу прошу не обижать!!!
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines