2010-11-12 2 views
4

У приложений Windows есть значок в левом верхнем углу панели заголовка слева от имени приложения? Если вы щелкните по ней, то есть варианты, как Restore, Minimize, Maximize .. и т.д.Вставить опцию меню в меню ApplicationIcon

Во многих программах они имеют дополнительные опции меню есть (сверх того, что по умолчанию, предоставляемый Windows). Как я могу реализовать это в C# Winforms?

ответ

0

Учебники для "Настройка меню системы в Windows Forms Application":

http://www.codeproject.com/KB/dotnet/CustomWinFormSysMenu.aspx

http://www.codeguru.com/csharp/csharp/cs_misc/userinterface/article.php/c9327

Отрывок:

Импорт user32.dll для доступа к функции, необходимые для изменяют системное меню.

[DllImport("user32.dll")] 
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); 
[DllImport("user32.dll")] 
private static extern bool InsertMenu (IntPtr hMenu, 
    Int32 wPosition, Int32 wFlags, Int32 wIDNewItem, 
    string lpNewItem); 

Получить текущее системное меню и добавлять элементы к нему:

IntPtr sysMenuHandle = GetSystemMenu(this.Handle, false); 
//It would be better to find the position at run time of the 'Close' item, but... 

InsertMenu(sysMenuHandle, 5, MF_BYPOSITION | MF_SEPARATOR, 0, string.Empty); 
InsertMenu(sysMenuHandle, 6, MF_BYPOSITION , IDM_CUSTOMITEM1, "Item 1"); 
InsertMenu(sysMenuHandle, 7, MF_BYPOSITION , IDM_CUSTOMITEM2, "Item 2"); 

public const Int32 WM_SYSCOMMAND = 0x112; 
public const Int32 MF_SEPARATOR = 0x800; 
public const Int32 MF_BYPOSITION = 0x400; 
public const Int32 MF_STRING = 0x0; 
public const Int32 IDM_CUSTOMITEM1 = 1000; 
public const Int32 IDM_CUSTOMITEM2 = 1001; 

Захват выбор новых пользовательских элементов для того, чтобы назначить методы им:

protected override void WndProc(ref Message m) 
{ 
    if(m.Msg == WM_SYSCOMMAND) 
    { 
     switch(m.WParam.ToInt32()) 
     { 
      case IDM_CUSTOMITEM1 : 
       MessageBox.Show("Clicked 'Item 1'"); 
       return; 
      case IDM_CUSTOMITEM1 : 
       MessageBox.Show("Clicked 'item 2'"); 
       return; 
      default: 
       break; 
     } 
    } 
    base.WndProc(ref m); 
} 
+0

могли бы вы предоставить фрагмент этих инструкций, а также вашу ссылку? –

+0

Добавлен фрагмент кода из CodeProject.com (изменен). –

Смежные вопросы