![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как определить экранные координаты 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]А глупый вопрос - зачем надо экранные ?