在VS2005中如何创建右键菜单

2025-12-18 05:29:48
推荐回答(3个)
回答1:

1.使用ContextMenu
ContextMenu 类表示当用户在控件或窗体的特定区域上单击鼠标右键时会显示的快捷菜单。快捷菜单通常用于组合来自窗体的一个 MainMenu 的不同菜单项,便于用户在给定应用程序上下文中使用。例如,可以使用分配给 TextBox 控件的快捷菜单提供菜单项,以便更改文本字体,在控件中查找文本或实现复制和粘贴文本的剪贴版功能。还可以在快捷菜单中显示不位于 MainMenu 中的新的 MenuItem 对象,这些对象提供与特定情况有关而不适合在 MainMenu 中显示的命令。

当用户在控件或窗体本身上单击鼠标右键时,通常会显示快捷菜单。可视控件和 Form 有 ContextMenu 属性,该属性可将 ContextMenu 类绑定到显示快捷菜单的控件。多个控件可使用一个 ContextMenu。可使用 SourceControl 属性确定上次显示快捷菜单的控件,以执行特定于该控件的任务或修改该控件所显示的快捷菜单。

您可能希望知道何时显示快捷菜单,以便在向用户显示菜单之前设置选中标记、禁用项和执行其他菜单任务。可处理 Popup 事件来确定显示快捷菜单的时间。
下面的代码示例为 ContextMenu 的 Popup 事件创建事件处理程序。事件处理程序中的代码决定以下两个控件中哪一个是显示快捷菜单的控件:名为 pictureBox1 的 PictureBox 和名为 textBox1 的 TextBox。根据哪个控件导致 ContextMenu 显示其快捷菜单,控件向 ContextMenu 添加相应的 MenuItem 对象。此示例要求窗体内定义了一个名为 contextMenu1 的 ContextMenu 类的实例。此示例还要求向窗体添加 TextBox 和 PictureBox,而且这些控件的 ContextMenu 属性均设置为 contextMenu1。

Visual Basic
Private Sub MyPopupEventHandler(sender As System.Object, e As System.EventArgs)
' Define the MenuItem objects to display for the TextBox.
Dim menuItem1 As New MenuItem("&Copy")
Dim menuItem2 As New MenuItem("&Find and Replace")
' Define the MenuItem object to display for the PictureBox.
Dim menuItem3 As New MenuItem("C&hange Picture")

' Clear all previously added MenuItems.
contextMenu1.MenuItems.Clear()

If contextMenu1.SourceControl Is textBox1 Then
' Add MenuItems to display for the TextBox.
contextMenu1.MenuItems.Add(menuItem1)
contextMenu1.MenuItems.Add(menuItem2)
ElseIf contextMenu1.SourceControl Is pictureBox1 Then
' Add the MenuItem to display for the PictureBox.
contextMenu1.MenuItems.Add(menuItem3)
End If
End Sub 'MyPopupEventHandler '

C#代码
private void MyPopupEventHandler(System.Object sender, System.EventArgs e)
{
// Define the MenuItem objects to display for the TextBox.
MenuItem menuItem1 = new MenuItem("&Copy");
MenuItem menuItem2 = new MenuItem("&Find and Replace");
// Define the MenuItem object to display for the PictureBox.
MenuItem menuItem3 = new MenuItem("C&hange Picture");

// Clear all previously added MenuItems.
contextMenu1.MenuItems.Clear();

if(contextMenu1.SourceControl == textBox1)
{
// Add MenuItems to display for the TextBox.
contextMenu1.MenuItems.Add(menuItem1);
contextMenu1.MenuItems.Add(menuItem2);
}
else if(contextMenu1.SourceControl == pictureBox1)
{
// Add the MenuItem to display for the PictureBox.
contextMenu1.MenuItems.Add(menuItem3);
}
}

回答2:

CString str=_T("aaa");
MessageBox(str);

首先插入一个菜单资源,并添加命令响应

添加右键响应消息,响应函数里添加代码

CMenu menu;
menu.LoadMenu(菜单资源ID)
menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON |
TPM_RIGHTBUTTON, point.x, point.y, this);

回答3:

TCHAR str=_T("aaa");
MessageBox(str);