В чём отличия GetWindowDC от GetDC?
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.223] |
|
|
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы
В чём отличия GetWindowDC от GetDC?
|
Сообщ.
#1
,
|
|
|
|
По описанию похожи:
![]() ![]() function GetWindowDC; external user32 name 'GetWindowDC'; function GetWindowDC(hWnd: HWND): HDC; stdcall; function GetDC; external user32 name 'GetDC'; function GetDC(hWnd: HWND): HDC; stdcall; Если я хочу вывести, к примеру, текст на GetDesktopWindow, мне нужно пользоваться GetWindowDC. Если я пользуюсь GetDC, то для того чтобы текст появился на экране нужно или выгрузить окно FindWindow('Progman','Program Manager')(Окно с иконками и панель задач, которое распологается поверх GetDesktopWindow) или использовать GetDC(GetWindow(GetDesktopWindow, GW_OWNER))(окно с хендл 0(что за окно кстати???)). |
|
Сообщ.
#2
,
|
|
|
|
![]() ![]() // Получить DC клиентской области окна по его хэндлу function GetDC; { Функция GetDC извлекает дескриптор контекста дисплея для клиентской области указанного окна. Контекст дисплея может быть использован в последующих функциях GDI для рисования в клиентской области окна. Эта функция извлекает общий, классовый или частный контекст устройства в зависимости от стиля класса, указанного для заданного окна. Для общих контекстов устройства GetDC присваивает контексту атрибуты по умолчанию каждый раз при извлечении контекста устройства. Для классовых и частных контекстов устройства GetDC оставляет ранее присвоенные атрибуты без изменений. } // Получить DC всего окна (включая его заголовок, меню, скроллбары и т.д.) по его хэндлу function GetWindowDC; { предназначена для получения контекста окна, включая заголовок, меню, скроллбары, т.е. получив контекст с помощью этой функции можно рисовать в НЕклиентской области окна. Функция } // Освободить DC, ранее полученный по GetDC или GetWindowDC function ReleaseDC; -------------------------------> GetDC(0) Дескриптор 0 а по техническому Windows Handle = 0 мы получаем контекст полностью всех окон как один глобальный другими словами Мы можем рисовать прямо на монитореб, конечно это только для GetDC. Тут уже от тебя зависит что тебе использовать GetDC или GetWindowDC |
|
Сообщ.
#3
,
|
|
|
|
Цитата NikNet_ @ Получить DC всего окна Понятно. А что тогда понимается под "клиентская область окна"? |
|
Сообщ.
#4
,
|
|
|
|
^D^ima, это все, что не входит в служебную (неклиентскую область). Служебная - это заголовок, бордюры, меню, скроллбары и т.д. Все что осталось предназначено для пользовательских целей и называется клиентская область.
|
|
Сообщ.
#5
,
|
|
|
|
Цитата Rose @ Все что осталось Ну тогда получается что сама область должна иметь разные разммеры? А при выводе что 1-й что 2-й функцией текст выводится в 1 месте. |
|
Сообщ.
#6
,
|
|
|
|
Цитата Ну тогда получается что сама область должна иметь разные разммеры? Смотря у какого окна. В общем случае - разные, в частном - могут и совпадать. Цитата А при выводе что 1-й что 2-й функцией текст выводится в 1 месте. Для Desktop-а - скорее всего, так как верхний левый угол клиентской и полной области окна совпадают. А для формы, например, уже нет: ![]() ![]() procedure TForm1.FormPaint(Sender: TObject); var DC: HDC; begin DC:=GetDC(Handle); try TextOut(DC,100,100,'aaa',3); finally ReleaseDC(Handle,DC); end; DC:=GetWindowDC(Handle); try TextOut(DC,100,100,'aaa',3); finally ReleaseDC(Handle,DC); end; end; Текст, выведенный во втором случае, будет смещен вниз на высоту заголовка окна, и вправо - на ширину бокового бордюра. |