我用如下代码在windows的任务栏中添加了图标
m_popMenu.LoadMenu( IDR_POPUPMENU ); m_nid.cbSize = sizeof( m_nid );
m_nid.hIcon = ::LoadIcon( AfxGetInstanceHandle(), MAKEINTRESOURCE( IDR_ELFEYE_OFF ) );
m_nid.hWnd = GetSafeHwnd();
m_nid.uCallbackMessage = TASKBAR_ICON_NOTIFY;
m_nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
m_nid.uID = IDR_MAINFRAME;
strcpy( m_nid.szTip, "ElfEye精灵眼" ); Shell_NotifyIcon( NIM_ADD, &m_nid );并且用如下代码响应用户对任务栏的图标右击事件:
if( IDR_MAINFRAME == uID && WM_RBUTTONUP == lEvent )
{
CPoint mousePt;
GetCursorPos( &mousePt ); CMenu* pSubMenu = m_popMenu.GetSubMenu( 0 );
pSubMenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON,
mousePt.x, mousePt.y, this );
} return TRUE;但是如何在右击任务栏图标, 显示了菜单之后, 响应用户对菜单外区域的鼠标点击事件?
因为一般来说, 用户点击了非菜单区域, 应该自动关闭该菜单.
m_popMenu.LoadMenu( IDR_POPUPMENU ); m_nid.cbSize = sizeof( m_nid );
m_nid.hIcon = ::LoadIcon( AfxGetInstanceHandle(), MAKEINTRESOURCE( IDR_ELFEYE_OFF ) );
m_nid.hWnd = GetSafeHwnd();
m_nid.uCallbackMessage = TASKBAR_ICON_NOTIFY;
m_nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
m_nid.uID = IDR_MAINFRAME;
strcpy( m_nid.szTip, "ElfEye精灵眼" ); Shell_NotifyIcon( NIM_ADD, &m_nid );并且用如下代码响应用户对任务栏的图标右击事件:
if( IDR_MAINFRAME == uID && WM_RBUTTONUP == lEvent )
{
CPoint mousePt;
GetCursorPos( &mousePt ); CMenu* pSubMenu = m_popMenu.GetSubMenu( 0 );
pSubMenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON,
mousePt.x, mousePt.y, this );
} return TRUE;但是如何在右击任务栏图标, 显示了菜单之后, 响应用户对菜单外区域的鼠标点击事件?
因为一般来说, 用户点击了非菜单区域, 应该自动关闭该菜单.
if( IDR_MAINFRAME == uID && WM_RBUTTONUP == lEvent )
{
CPoint mousePt;
GetCursorPos( &mousePt ); CMenu* pSubMenu = m_popMenu.GetSubMenu( 0 );
SetForegroundWindow();
pSubMenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON,
mousePt.x, mousePt.y, this );
} return TRUE;