информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаПортрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Я тоже до этого додумал. Ниже по ветке код прилепил. 23.07.07 16:32  Число просмотров: 3161
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
Я тоже до этого додумал. Ниже по ветке код прилепил.

ЗЫ. Этот кусок кода я в MSDN'е видел. Это один из не многих касяков MS
<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-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach