информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Spanning Tree Protocol: недокументированное применениеГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Крупный взлом GoDaddy 
 Просроченный сертификат ломает... 
 Phrack #70/0x46 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Но ведь мне нужны не все сообщения, а только WM_SIZE,... 25.07.07 05:30  Число просмотров: 2414
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
Но ведь мне нужны не все сообщения, а только WM_SIZE, WM_SIZING, WM_MOVE, WM_MOVING. Если поставить хук WH_GETMESSAGE, то он все сообщения всех окон ловить будет. Другие варианты есть?
<programming>
[Win32] Я не извращенец, просто люблю окошки 19.07.07 17:45  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
Давно известно, что в 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.dll 23.07.07 12:32  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
> Ищу все доступные окна с помощью функции EnumWindows. У
> меня открыто около 10 окон, а она перечисляет около 200.
> Это что, невидимки что ли? Можно ли как-то их отсечь? Есть
> ли функция для определения видимости окна (в MSDN не
> нашёл)?
Subj. Ну и опять же, я там выше про Spy++ писал, она открывает капот винды в винды в винды в винды в винды в винды ;-)
А я до неё не добрался. Спасибо, пригодится 23.07.07 14:28  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
А кто отвечает за отрисовку окна? Может копию... 19.07.07 20:22  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
А кто отвечает за отрисовку окна? Может копию RegisterClass/CreateWindow в оперативной памяти изменить. Сложно конечно дизассемблировать, но можно..
WindowProc отвечает [update] 20.07.07 11:42  
Автор: amirul <Serge> Статус: The Elderman
Отредактировано 20.07.07 12:06  Количество правок: 1
<"чистая" ссылка>
> А кто отвечает за отрисовку окна? Может копию

WM_PAINT для клиентской области
WM_NCPAINT - для неклиентской (как раз рамка)

> RegisterClass/CreateWindow в оперативной памяти изменить.
> Сложно конечно дизассемблировать, но можно..
На фига? Для этих целей давно есть SetWindowLongPtr с GWLP_WNDPROC/DWLP_DLGPROC

Сохраняешь старую WndProc, хучишь ее и обрабатываешь отрисовку как душа пожелает. Хоть до основного обработчика, хоть после, хоть вместо. Но насколько я понял, ты же хочешь рисовать НАД caption bar-ом. А там окно попросту рисовать не может. Для этого туда надо поместить еще одно окно.

-----------
Только что подумал, что мог неправильно тебя понять. "Сверху квадратного окна" это в твоем понимании выше по x-координате или по z? Дополнительное окно надо лепить только если по x
Вопрос по поводу wm_ncpaint 20.07.07 17:32  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
Вопрос по поводу WM_NCPAINT

Написал следующий код:
	case WM_NCPAINT:
		hdc = GetDCEx(hwnd, (HRGN)wParam, DCX_WINDOW|DCX_INTERSECTRGN);
		Rectangle(hdc, 0, 0, 20, 20);
		ReleaseDC(hwnd, hdc);
		return TRUE;

---

Но почему-то не видно, чтобы он что-то рисовал. Видно, что стандартный отрисовщик не работает, но мой не рисует. Почему?
Для того, чтобы рисовать в неклиентской части окна, контекст нужно брать функцией GetWindowDC. ИМХО. 23.07.07 12:37  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
MSDN думает иначе :-) 23.07.07 14:52  
Автор: amirul <Serge> Статус: The Elderman
Отредактировано 23.07.07 14:53  Количество правок: 1
<"чистая" ссылка>
http://msdn2.microsoft.com/en-us/library/ms534905.aspx

The wParam value can be passed to GetDCEx as in the following example.
case WM_NCPAINT:
{
    HDC hdc;
    hdc = GetDCEx(hwnd, (HRGN)wParam, DCX_WINDOW|DCX_INTERSECTRGN);
    // Paint into this DC
    ReleaseDC(hwnd, hdc);
}

---


Хотя по факту - GetDCEx не заработал.
Я тоже до этого додумал. Ниже по ветке код прилепил. 23.07.07 16:32  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
Я тоже до этого додумал. Ниже по ветке код прилепил.

ЗЫ. Этот кусок кода я в 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
<"чистая" ссылка>
Serg, спасибо. Я думал amirul тупит, а оказалось кое-кто другой...
Вроде так будет:
	if (!(dwStyle & WS_POPUP) && (dwStyle & WS_VISIBLE))
	{

---
Некоторые ф-ции, связанные с DC в отладчике работают иначе, 24.07.07 03:10  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
чем в релизе. Например GetPixel иногда возвращает только 0 или FFFFFFFF.
GetDCEx болеет этим и в релизе. 24.07.07 06:04  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
Честно говоря не знаю 20.07.07 19:31  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Но почему-то не видно, чтобы он что-то рисовал. Видно, что
> стандартный отрисовщик не работает, но мой не рисует.
> Почему?

Ни разу не рисовал в неклиентской области, так что какие там подводные камни - не знаю. Но можешь попробовать посмотреть как это делают другие:
http://google.com/codesearch?hl=ru&lr=&q=case%5Cs%2Awm_ncpaint&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA

Или так
http://google.com/codesearch?hl=ru&lr=&q=%3A%3Aonncpaint&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA
Второй вариант не смотрел (классы накручены), а второй то же... 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
<"чистая" ссылка>
Нашёл причину. GetDCEx почему-то не захотела есть хендл окна (говорит, что не верный дескриптор). Вот этот код работает:
	case WM_NCPAINT:
		DefWindowProc(hwnd, msg, wParam, lParam);
		hDC = GetWindowDC(hwnd);
		SetPixel(hDC, 0, 0, 0x00FF00);
		ReleaseDC(hwnd, hDC);
		return TRUE;

---
Хочу именно по x, и именно НАД caption bar-ом. Из моих... 20.07.07 12:18  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
Хочу именно по x, и именно НАД caption bar-ом. Из моих разговоров может показаться, что я в идеологии Windows полный лох, но заверяю, что оконный механизм, модель перерисовки и передачи сообщений знаю достаточно хорошо.

ЗЫ. А за WM_NCPAINT спасибо. Не знал. Пригодится.
А зачем такой изврат? 20.07.07 03:14  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Ты просто создаешь окно без заголовка и "приклеиваешь" к нему дочернее окно любой формы и типа, которое и будет выполнять функции заголовка.
1  |  2 >>  »  






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2021 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach