| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Назначить клиентскую область |
| Автор: Zmeevic 29.12.2007, 19:46 |
| Вот такой вопрос: можно ли назначить ClientRect POPUP окну? прубую что-то мудрить с WM_NCCALCSIZE, пока |
| Автор: Mihhail 29.12.2007, 20:18 |
| Можно сделать следующим образом: в главном окне создать дочернее окно-панельку, которое меньше родительского на величину заголовка и бордюра, оно и будет клиентской областью. |
| Автор: Zmeevic 29.12.2007, 21:19 |
| Пробовал я этот вариат... но хотелось ближе к стандарту... т.е. что-то где-то отловить, подменить и выплюнуть через DefWindowProc(); |
| Автор: Denis_Vik 8.1.2008, 11:10 |
| Здравствуйте. Не моглибы вы привести здесь небольшой пример использования сообщения wm_nccalcsize. А то не понятен смысл использования трех структур rect и структуры windowpos в структуре nccalcsize_param. Привидите пожалуста, если можно, пример изменения клиентской области окна, уменьшив ее на 10 пикс. со всех сторон. |
| Автор: Earnest 8.1.2008, 21:48 | ||
Пример есть только для MFС, примерно так:
Здесь bCalcValidRects - это wParam, а lpncsp - lParam. Согласно MSDN, lParam может содержать не только NCCALCSIZE_PARAMS*, и зависит это от wParam, но в коде, откуда я взяла кусок, это не проверяется, но тем не менее все работает. Возможно, в каких-то конкретных случаях надо проверять. Да, нужно иметь в виду, что это сообщение посылается в процессе создания окна. Т.е. если окно создается не под твоим контролем, то в свой обработчик ты можешь и не попасть. Чтобы перустановить клиентскую область после создания окна, нужно вызвать SetWindowPos с флагом SWP_FRAMECHANGED - тогда NCCALCSIZE опять придет. |
| Автор: Zmeevic 10.1.2008, 04:38 |
| to Earnest, спасибо, если б мог, поднял бы репутацию, а пока еще раз СПАСИБО!!! |
| Автор: dizzy1984 10.1.2008, 12:56 |
| Ты поднял Earnest репутацию. |