Форум: "WinAPI";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
ВнизПомогите, <b>PLEASE</b> Найти похожие ветки
← →
Goblinus (2002-07-03 17:08) [0]Доброго всем времени суток! Подскажите, ПЛЗ, как создать TrayIcon без использования компонентов (прога - выдвигалка сидюка - пишется на чистом Win API). Причём чтобы при этом картинка содержалась в приложении, а не загружалась извне. И сразу уж - как туда менюшку добавить (на Win API не писал до этого вообще :-((( )
← →
asmer (faq) (2002-07-03 17:34) [1]Q4: Как добавить иконку на Tray ?
A4: Для работы с SystemTray существует всего одна функция. Вот ее
Си-прототип:
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(
DWORD dwMessage, // message identifier
PNOTIFYICONDATA pnid // pointer to structure
);
Эта функция описана в заголовочном файле Win32-SDK "shellapi.h",
включаемом в программу при включении "windows.h". Параметр
dwMessage может принимать одно из трех значений: NIM_ADD,
NIM_DELETE, NIM_MODIFY. Для добавления иконки он должен быть
установлен в NIM_ADD.
Параметр pnid имеет тип PNOTIFYDATA, который описан как:
typedef struct _NOTIFYICONDATA { // nid
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
char szTip[64];
} NOTIFYICONDATA, *PNOTIFYICONDATA;
Поля структуры NOTIFYICONDATA имеют следующий смысл:
cbSize - размер структуры, должен быть
sizeof(NOTIFYICONDATA).
hWnd - дескриптор окна, которое будет получать события
мыши над иконкой.
uID - уникальный идентификатор иконки. Идентификатор
должен быть уникален в пределах окна - обрабо-
тчика, передаваемого в hWnd.
uFlags - битовое поле, определяющее какое из следующих
полей несет действительную информацию.
Может быть одним из следующих значений: NIF_ICON,
NIF_MESSAGE, NIF_TIP или их OR-комбинацией.
uCallbackMessage - сообщение, передаваемое окну - обработчику при
событиях мыши. Желательно получать номер
сообщения вызовом RegisterWindowMessage(),
но допускаются и значения WM_USER+N, где N > 0.
hIcon - дескриптор иконки, помещаемой на Tray.
szTip - текст для ToolTip"а, если szTip[0] = 0x00, то
ToolTip"а не будет.
Таким образом, для добавления иконки на Tray необходимо
заполнить экземпляр структуры NOTIFYICONDATA и вызвать функцию
Shell_NotifyIcon() с параметром NIM_ADD и указателем на
заполненный экземпляр структуры.
При добавлении иконки необходимо заполнить поля cbSize, hWnd,
uID, uFlags, uCallbackMessage, hIcon. Поле szTip можно оставить
пустым, если вам не нужен ToolTip. Поле uFlags должно содержать
как минимум NIF_MESSAGE | NIF_ICON.
===================
Q8: Многие программы показывают Pop-Up меню при щелчке на их иконке,
помещенной на Tray, как этого добиться ?
A8: Вы должны обрабатывать сообщение, указанное вами при добавлении
иконки на Tray. При значении (UINT)lParam, равном WM_RBUTTONDOWN
(это обычно дял Pop-Up меню по правой кнопке), или любому другому
необходимому вам, вы должны вызовом функции GetCursorPos()
получить позицию курсора в момент события (вряд ли пользователь
успеет убрать мышь за время обработки сообщения, особенно если
он ожидает меню), получить вескриптор Pop-Up меню одним из многих
способов (LoadMenu(), GetSubMenu(), CreateMenu(), и т.д.) и
выполнить следующий код:
SetForegroundWindow(hWnd);
TrackPopupMenuEx(hMenu,TPM_HORIZONTAL|TPM_LEFTALIGN,x, y,hWnd,
NULL);
DestroyMenu(hMenu);
PostMessage(hWnd,WM_USER,0,0);
где hWnd - дескриптор окна, которое будет обрабатывать команду
меню, hMenu - дескриптор меню, x и y - позиция курсора. Для
подробностей смотрите Win32 SDK Help по функции TrackPopupMenuEx.
← →
Goblinus (2002-07-03 17:36) [2]Большое спасибо!
← →
Raptor (2002-07-03 22:30) [3]А еще можно в FAQ на этом сайте заглянуть. ж-))
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c