Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Назначить клиентскую область 
V
    Опции темы
Zmeevic
Дата 29.12.2007, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 20.6.2007

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



Вот такой вопрос: можно ли назначить ClientRect POPUP окну?
прубую что-то мудрить с WM_NCCALCSIZE, пока  smile 
PM MAIL   Вверх
Mihhail
Дата 29.12.2007, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 13.9.2007

Репутация: 5
Всего: 9



Можно сделать следующим образом: в главном окне создать дочернее окно-панельку, которое меньше родительского на величину заголовка и бордюра, оно и будет клиентской областью.
PM MAIL WWW   Вверх
Zmeevic
Дата 29.12.2007, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 20.6.2007

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



Пробовал я этот вариат... но хотелось ближе к стандарту... smile 
т.е. что-то где-то отловить, подменить и выплюнуть через DefWindowProc(); smile 
PM MAIL   Вверх
Earnest
Дата 6.1.2008, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Цитата(Zmeevic @  29.12.2007,  20:46 Найти цитируемый пост)
Вот такой вопрос: можно ли назначить ClientRect POPUP окну?
прубую что-то мудрить с WM_NCCALCSIZE, пока    

Можно, и именно так и нужно. lParam есть адрес структуры NCCALCSIZE_PARAMS, туда (в rgrc) и нужно записать новые координаты клиентской области (уменьшив на сколько надо исходные). И все дела. 



--------------------
...
PM   Вверх
Denis_Vik
Дата 8.1.2008, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.12.2007

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



Здравствуйте.

Не моглибы вы привести здесь небольшой пример использования сообщения wm_nccalcsize.
А то не понятен смысл использования трех структур rect и структуры windowpos в структуре nccalcsize_param.

Привидите пожалуста, если можно, пример изменения клиентской области окна, уменьшив ее на 10 пикс. со всех сторон.
PM MAIL   Вверх
Earnest
Дата 8.1.2008, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Пример есть только для MFС, примерно так:
Код

void CMyView::OnNcCalcSize (BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp) 
{
    CRect* pr=(CRect*)lpncsp->rgrc;
    pr->DeflateRect (10, 10);
}

Здесь bCalcValidRects - это wParam, а lpncsp - lParam.
Согласно MSDN, lParam может содержать не только NCCALCSIZE_PARAMS*, и зависит это от wParam, но в коде, откуда я взяла кусок, это не проверяется, но тем не менее все работает. Возможно, в каких-то конкретных случаях надо проверять.

Да, нужно иметь в виду, что это сообщение посылается в процессе создания окна. Т.е. если окно создается не под твоим контролем, то в свой обработчик ты можешь и не попасть. Чтобы перустановить клиентскую область после создания окна, нужно вызвать SetWindowPos с флагом SWP_FRAMECHANGED - тогда NCCALCSIZE опять придет.



--------------------
...
PM   Вверх
Zmeevic
Дата 10.1.2008, 04:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 20.6.2007

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



to Earnest, спасибо, если б мог, поднял бы репутацию, а пока еще раз СПАСИБО!!!
PM MAIL   Вверх
dizzy1984
Дата 10.1.2008, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

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



Ты поднял Earnest репутацию.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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