Нашёл причину. GetDCEx почему-то не захотела есть хендл окна...21.07.07 16:27 Число просмотров: 3453 Автор: Vedrus <Serokhvostov Anton> Статус: Member Отредактировано 21.07.07 16:28 Количество правок: 1
Давно известно, что в Windows с помощью регионов можно создавать окна произвольной формы. А как к обычному квадратному окну прикрутить ещё что-нибудь? Хочу сверху заголовка окна разместить ещё что-нибудь. Кто-нибудь в подобную сторону думал? Куда податься?
[Win32] По моему только еще одним липучим окном19.07.07 19:47 Автор: amirul <Serge> Статус: The Elderman
> квадратному окну прикрутить ещё что-нибудь? Хочу сверху > заголовка окна разместить ещё что-нибудь. Кто-нибудь в > подобную сторону думал? Куда податься?
За заголовком идет не то, что не клиентская (куда рисуют обычные окна), но даже не неклиентская (куда можно самому рисовать заголовок, кнопки и т.д.). В общем создавай еще одно окно и обрабатывай WM_SIZE/WM_SIZING и WM_MOVE/WM_MOVING на главном окне, чтобы тягать "липучее" следом.
Ищу все доступные окна с помощью функции EnumWindows. У меня...20.07.07 11:08 Автор: Vedrus <Serokhvostov Anton> Статус: Member
Ищу все доступные окна с помощью функции EnumWindows. У меня открыто около 10 окон, а она перечисляет около 200. Это что, невидимки что ли? Можно ли как-то их отсечь? Есть ли функция для определения видимости окна (в MSDN не нашёл)?
IsWindowVisible жива и здравствует в user32.dll23.07.07 12:32 Автор: HandleX <Александр М.> Статус: The Elderman
> Ищу все доступные окна с помощью функции EnumWindows. У > меня открыто около 10 окон, а она перечисляет около 200. > Это что, невидимки что ли? Можно ли как-то их отсечь? Есть > ли функция для определения видимости окна (в MSDN не > нашёл)? Subj. Ну и опять же, я там выше про Spy++ писал, она открывает капот винды в винды в винды в винды в винды в винды ;-)
А я до неё не добрался. Спасибо, пригодится23.07.07 14:28 Автор: Vedrus <Serokhvostov Anton> Статус: Member
WM_PAINT для клиентской области
WM_NCPAINT - для неклиентской (как раз рамка)
> RegisterClass/CreateWindow в оперативной памяти изменить. > Сложно конечно дизассемблировать, но можно.. На фига? Для этих целей давно есть SetWindowLongPtr с GWLP_WNDPROC/DWLP_DLGPROC
Сохраняешь старую WndProc, хучишь ее и обрабатываешь отрисовку как душа пожелает. Хоть до основного обработчика, хоть после, хоть вместо. Но насколько я понял, ты же хочешь рисовать НАД caption bar-ом. А там окно попросту рисовать не может. Для этого туда надо поместить еще одно окно.
-----------
Только что подумал, что мог неправильно тебя понять. "Сверху квадратного окна" это в твоем понимании выше по x-координате или по z? Дополнительное окно надо лепить только если по x
Вопрос по поводу wm_ncpaint20.07.07 17:32 Автор: Vedrus <Serokhvostov Anton> Статус: Member
Но почему-то не видно, чтобы он что-то рисовал. Видно, что стандартный отрисовщик не работает, но мой не рисует. Почему?
Для того, чтобы рисовать в неклиентской части окна, контекст нужно брать функцией GetWindowDC. ИМХО.23.07.07 12:37 Автор: HandleX <Александр М.> Статус: The Elderman
Я тоже до этого додумал. Ниже по ветке код прилепил.
ЗЫ. Этот кусок кода я в MSDN'е видел. Это один из не многих касяков MS
Ты закрыл тему с энумом окон, поэтому отвечу здесь [update]23.07.07 19:11 Автор: amirul <Serge> Статус: The Elderman Отредактировано 23.07.07 19:16 Количество правок: 1
Приглядись повнимательнее к условию - там логическая ошибка. В том виде, в котором оно у тебя есть - оно будет отлично пропускать WS_POPUP окна.
--------------
Только что глянул: и Shell_TrayWnd и Progman имеют WS_POPUP
Serg, спасибо. Я думал amirul тупит, а оказалось кое-кто...23.07.07 19:58 Автор: Vedrus <Serokhvostov Anton> Статус: Member Отредактировано 23.07.07 20:11 Количество правок: 2
Второй вариант не смотрел (классы накручены), а второй то же...21.07.07 05:23 Автор: Vedrus <Serokhvostov Anton> Статус: Member Отредактировано 21.07.07 16:50 Количество правок: 1
Второй вариант не смотрел (классы накручены), а первый то же что и мой делает, т.е. ничего.
Нашёл причину. GetDCEx почему-то не захотела есть хендл окна...21.07.07 16:27 Автор: Vedrus <Serokhvostov Anton> Статус: Member Отредактировано 21.07.07 16:28 Количество правок: 1
Хочу именно по x, и именно НАД caption bar-ом. Из моих разговоров может показаться, что я в идеологии Windows полный лох, но заверяю, что оконный механизм, модель перерисовки и передачи сообщений знаю достаточно хорошо.
ЗЫ. А за WM_NCPAINT спасибо. Не знал. Пригодится.
А зачем такой изврат?20.07.07 03:14 Автор: Zef <Alloo Zef> Статус: Elderman