Nonclient area

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Jack Ferre
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 17.02.2014 (Пн) 14:31
Откуда: Казахстан, Костанай

Nonclient area

Сообщение Jack Ferre » 25.08.2014 (Пн) 13:47

Как изменить границы неклиентской области окна?

UPD:
Я хочу, чтобы неклиентская область не рисовалась, а координаты клиентской области совпадали с координатами окна.

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Nonclient area

Сообщение Debugger » 25.08.2014 (Пн) 15:46

BorderStyle = None ?

Jack Ferre
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 17.02.2014 (Пн) 14:31
Откуда: Казахстан, Костанай

Re: Nonclient area

Сообщение Jack Ferre » 25.08.2014 (Пн) 16:00

Ожидал такой ответ )

Нужно, чтобы стиль окна был WS_OVERLAPPEDWINDOW.

Зачем оно мне:
В Windows Aero есть анимация создания/уничтожения/свертывания/развертывания окна. При BorderStyle = None окно просто появляется/исчезает.

Экспериментировал со стилями окна - ничего.
Экспериментировал с сообщением WM_NCCALCSIZE - внешне результат то, что мне нужно. Но клиентская область начинает рисоваться с координат -8 x -8.

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Nonclient area

Сообщение The trick » 25.08.2014 (Пн) 20:04

Что-то ты не то значит экспериментировал. WM_NCCALCSIZE - как раз задает размер и положение окна и неклиентской области. 1-й возвращаемый прямоугольник должен содержать координаты клиентской области.
UA6527P

Jack Ferre
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 17.02.2014 (Пн) 14:31
Откуда: Казахстан, Костанай

Re: Nonclient area

Сообщение Jack Ferre » 25.08.2014 (Пн) 21:55

Манипуляции с координатами 1-го прямоугольника из NCCALCSIZE_PARAMS приводят к тому, к чему должны - изменением координат неклиентской области. При этом она (неклиентская область) все равно отрисовывается.
Если не трогать прямоугольник, а просто вернуть 0 в WndProc, неклиентская область не рисуется, а клиентская растягивается до размеров окна. Здесь проблема - как уменьшать окно обратно?

Кривоус Анатолий, обратите внимание на то, что в вашем проекте "Пользовательская отрисовка окна" существует та же проблема отрисовки клиентской области с координат -8 х -8 (а точнее -SM_CXFRAME x -SM_CYFRAME). Это заметно при развернутом окне. Левые 4 пикселя не отрисовываются (4 пикселя = SM_CXFRAME(8) - ваш SIZE_BORDER(4)).

Если при разворачивании окна еще можно сдвинуть клиентскую область, то как быть при изменение размеров окна в восстановленном (restored) состоянии?

UPD: [offtopic]Сегодня утром я думал - почему во многих программах с нестандартным интерфейсом отсутствует анимация окон...
...сейчас начинаю понимать :cheese: [/offtopic]

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Nonclient area

Сообщение The trick » 25.08.2014 (Пн) 22:44

Jack Ferre писал(а):При этом она (неклиентская область) все равно отрисовывается.

Нет, только кнопки если ControlBox = true
Jack Ferre писал(а):Здесь проблема - как уменьшать окно обратно?

Что значит уменьшать? Если имеешь в виду изменять размер, то перехват WM_NCHITTEST.
Jack Ferre писал(а):Кривоус Анатолий, обратите внимание на то, что в вашем проекте "Пользовательская отрисовка окна" существует та же проблема отрисовки клиентской области с координат -8 х -8 (а точнее -SM_CXFRAME x -SM_CYFRAME). Это заметно при развернутом окне. Левые 4 пикселя не отрисовываются (4 пикселя = SM_CXFRAME(8) - ваш SIZE_BORDER(4)).

Ничего не понял, нарисуй пожалуйста.
Любое окно при разворачивании перемещается в координаты -SM_CXFRAME, -SM_CYFRAME.
UA6527P

Jack Ferre
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 17.02.2014 (Пн) 14:31
Откуда: Казахстан, Костанай

Re: Nonclient area

Сообщение Jack Ferre » 26.08.2014 (Вт) 1:55

Paint :mrgreen:
nc.png
nc.png (8.31 Кб) Просмотров: 2014

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Nonclient area

Сообщение The trick » 26.08.2014 (Вт) 9:08

Все, понял. Так просто нужно когда разворачивается окно, обрабатывать WM_NCCALCSIZE и сдвигать клиентскую область.
UA6527P

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 12.09.2014 (Пт) 18:01

Jack Ferre писал(а):В Windows Aero есть анимация создания/уничтожения/свертывания/развертывания окна. При BorderStyle = None окно просто появляется/исчезает.

А тут случайно нельзя ли применить AnimateWindow?


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 53

    TopList