Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как определить экранные координаты Menu?


GROL ©   (2002-11-25 12:23:00) 

Обрабатываю сообщение wm_drawitem для меню.

Var
DIS: PDrawItemStruct;
R:tRect;
Pmbi: TMenuBarInfo;
Begin
...
WM_DRAWITEM:
begin
DIS := Pointer( Msg.lParam );
R := DIS.rcItem;
...
End;

Полученные координаты прямоугольника R в локальных координатах меню, а мне нужно в координатах экрана.
Пробовал получить координаты меню, но так как я делаю, там нули

pmbi.cbSize := SizeOf(pmbi);
GetMenuBarInfo(DIS.hwndItem, OBJID_MENU, 0, pmbi);


Как их правильно перевести?


Игорь Шевченко   (2002-11-26 09:38:00) [1]

Эт все хорошо(ClientToScreen, MapWindowPoint), но где у меню окно (hWnd) ?


> координаты прямоугольника R в локальных координатах меню

Или все-таки в локальных координатах окна, к которому меню относится ?

Из TFM"а:

When drawing menu items, the owner window must not draw outside the boundaries of the rectangle defined by the rcItem member.

Так что странного все-таки желать не стоит.


valler   (2002-11-25 22:29:00) [2]

Гдето в дебрях MSDN было такое слово:

ClientToScreen

The ClientToScreenfunction converts the client-area coordinates of a specified point to screen coordinates.

BOOL ClientToScreen(
HWND hWnd, // handle to window
LPPOINT lpPoint // screen coordinates
);



Eugen Honeker   (2002-11-25 20:32:00) [3]



rcMenu: TRECT;
hwndMenu: HWND;
...

WM_DRAWITEM:
begin
with PDRAWITEMSTRUCT(lParam)^ do
begin

hwndMenu:= WindowFromDC(hDC);
GetWindowRect(hwndMenu, rcMenu);
...
end;
end;


charge   (2002-11-25 18:20:00) [4]

MapWindowPoints(DIS.hwndItem, HWND_DESKTOP, R, 2)
или ClientToScreen два раза


Игорь Шевченко   (2002-11-25 14:18:00) [5]

MBo © (25.11.02 13:17)

Нет, он хочет рисовать свое меню, используя GetDC(0) (Насколько я понял...)


MBo   (2002-11-25 13:17:00) [6]

>Игорь Шевченко
нуля я сразу не приметил - видимо, он со снимка экрана хочет вырезать кусок, содержащий меню


MrAngel   (2002-11-25 13:17:00) [7]

Рисовать бортики получается но только иногда когда не настроены какиенибудь фишки в виндовсе, ну например "анимированное меню" когда оно как ьы выезжает из другого...


Игорь Шевченко   (2002-11-25 13:08:00) [8]

если капчить GetDC(0) то все подряд.

Это тебе, мягко говоря, кажется...GetDC(0) - это Device Context Desktop"а, к меню не имеющий никакого отношения...


MBo   (2002-11-25 13:07:00) [9]

>если капчить GetDC(0) то все подряд.
Заблуждаешься - GetDC - это клиентская область,
а целиком - GetWindowDC


GROL   (2002-11-25 13:02:00) [10]

здрасти...
если капчить GetDC(0) то все подряд.
Вот мне и нужно координаты из локальных перевести в экранные


Игорь Шевченко   (2002-11-25 12:55:00) [11]

Капчить все меню, включая бортики

Не получится. Device Context не даст.


GROL   (2002-11-25 12:45:00) [12]

Капчить все меню, включая бортики


Игорь Шевченко   (2002-11-25 12:36:00) [13]

А глупый вопрос - зачем надо экранные ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо