Sky Software Homepage LogicNP Software Knowledge Base And FAQ

 
Contact Product Support    SearchSearch      Subscribe to the RSS feed for this forum

HOWTO: Display a context menu when the ShellNotifyIcon is clicked/right-clicked

 
Subscribe to the RSS feed for this forum  Forum Index -> ShellObjects ActiveX
View previous topic :: View next topic  
Author Message
Support



Joined: 18 Jul 2005
Posts: 731

Posted: Thu Sep 11, 2008 6:16 am    Post subject: HOWTO: Display a context menu when the ShellNotifyIcon is clicked/right-clicked

To display a context menu when the ShellNotifyIcon is right-clicked, call the InvokeContextMenu method in the OnRightButtonUp event. The OnContextMenuPopup event is raised in response to this; menu items should be added to the context menu in this event. If the user selects any menu item, the OnContextMenuItemSelect event is raised. The following code (taken from the ShellNotifyIcon Starter sample) demonstrates this:

[C++]
// Event handler for the ShellNotifyIcon.OnRightButtonUp event
void CStarterDlg::OnOnRightButtonUpShellnotifyicon()
{
m_shellNotifyIcon.InvokeContextMenu();
}

// Event handler for the ShellNotifyIcon.OnContextMenuPopup event (called in response to InvokeContextMenu method)
void CStarterDlg::OnOnContextMenuPopupShellnotifyicon(LPDISPATCH CtxMenu)
{
CShellContextMenu menu;
menu.AttachDispatch( CtxMenu, FALSE );
menu.AddItem( "Normal Menu item" );

CShellMenuItem item;
item = menu.AddItem( "separator" );
item.SetSeparator( TRUE );

item = menu.AddItem( "Checked Menu Item" );
item.SetChecked( TRUE );

item = menu.AddItem( "separator" );
item.SetSeparator( TRUE );

item = menu.AddItem("Maximise From Tray");

item = menu.AddItem( "separator" );
item.SetSeparator( TRUE );

item = menu.AddItem( "Parent menu item" );
item.SetHasSubMenu( TRUE );

CShellContextMenu m;
m=item.GetSubMenu();
m.AddItem( "Sub menu item 1" );
m.AddItem( "Sub menu item 2" );
}

// Event handler for the ShellNotifyIcon.OnContextMenuItemSelect event (called when a menu item is selected)
void CStarterDlg::OnOnContextMenuItemSelectShellnotifyicon(long CmdId, LPCTSTR CmdText)
{
if( StrCmp(CmdText,"Maximise From Tray") == 0)
m_shellNotifyIcon.MaximizeFromTray((long)this->m_hWnd,2) ; // SNISystemDefault =2
}


[VB6]
' Event handler for the ShellNotifyIcon.OnRightButtonUp event
Private Sub shlIcon_OnRightButtonUp()
shlIcon.InvokeContextMenu
End Sub

' Event handler for the ShellNotifyIcon.OnContextMenuPopup event (called in response to InvokeContextMenu method)
Private Sub shlIcon_OnContextMenuPopup(ByVal CtxMenu As ShellObjects.IShellContextMenu)
Dim item As ShellMenuItem

CtxMenu.AddItem "Normal Menu item"
Set item = CtxMenu.AddItem("separator")
item.Separator = True

Set item = CtxMenu.AddItem("Maximise From Tray")
Set item = CtxMenu.AddItem("separator")
item.Separator = True

Set item = CtxMenu.AddItem("Checked Menu Item")
item.Checked = True

Set item = CtxMenu.AddItem("separator")
item.Separator = True

Set item = CtxMenu.AddItem("Parent menu item")
item.HasSubMenu = True
item.SubMenu.AddItem "Sub menu item 1"
item.SubMenu.AddItem "Sub menu item 2"
End Sub

' Event handler for the ShellNotifyIcon.OnContextMenuItemSelect event (called when a menu item is selected)
Private Sub shlIcon_OnContextMenuItemSelect(ByVal CmdId As Long, ByVal CmdText As String)
If CmdText = "Maximise From Tray" Then
shlIcon.MaximizeFromTray Me.hWnd, SNISystemDefault
End If
End Sub
Back to top
Display posts from previous:   
Forum Index -> ShellObjects ActiveX All times are GMT
Page 1 of 1

 
Jump to:  


Powered by phpBB © 2001, 2005 phpBB Group