我想将旧的About菜单项添加到我的应用程序中.我想将它添加到应用程序的"系统菜单"(当我们点击左上角的应用程序图标时弹出的那个).那么,我怎么能在.NET中做到这一点?
在Microsoft Windows中,这适用于:
mnu := GetSystemMenu(h, false);
EnableMenuItem(mnu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
mnu := GetSystemMenu(h, false);
EnableMenuItem(mnu, SC_MOVE, MF_BYCOMMAND or MF_GRAYED);
Run Code Online (Sandbox Code Playgroud)
因此我知道如何禁用窗口的"关闭"系统菜单项,而不是"移动"项.我怎么做?
更新
当然,使用非常好的函数EnableMenuItem的一种替代方法是使用SetMenuItemInfo:
FillChar(info, sizeOf(info), 0);
with info do
begin
cbSize := sizeOf(info);
fMask := MIIM_STATE;
fState := MFS_GRAYED;
end;
SetMenuItemInfo(mnu, SC_MOVE, false, info);
Run Code Online (Sandbox Code Playgroud)
但这对SC_CLOSE再次起作用,但SC_MOVE完全没有!
更新2
即使问题已经解决,因为工作代码已经找到"完成工作",可以这么说,听到关于问题原因的假设会很有趣:为什么SC_CLOSE工作但不是SC_MOVE?
我有一个监控工具,其中一些(但不是所有)用户希望它始终显示在顶部.
我想将此选项添加到左上角的系统菜单中.我该怎么办?
我有一个无边框窗口并创建了chrome,但我需要禁用'Alt + Space'快捷方式.有什么想法吗?
我们在Delphi 2009中遇到了分层窗口和系统菜单的问题.也就是说,我们的分层窗口(没有边框)没有系统菜单.当我说系统菜单时,我指的是单击应用程序图标时右键单击它的标题栏或(在Windows 7中添加了shift键)右键单击任务栏中的应用程序时获得的菜单:
当您尝试访问系统菜单时,例如通过右键单击此类分层窗口的任务栏图标,而是升级分层窗口.为什么是这样?是否有某种风格设置,或某种事件要处理?
这是一个匆忙制作的演示,展示了这个问题.不过,它可以用任何带有bsNone bordertyle的形式进行复制.
我试图在我的应用程序的系统菜单中添加一个"关于"按钮,但我找到的代码是抛出错误 -
无法在DLL"user32"中找到名为"AppendMenu"的入口点.
我想知道是否有人可以请看看代码,并建议我需要做些什么来解决它?谢谢.
Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As IntPtr, ByVal bRevert As Boolean) As IntPtr
Private Declare Function AppendMenu Lib "user32" (ByVal hMenu As IntPtr, ByVal uFlags As Int32, ByVal uIDNewItem As IntPtr, ByVal lpNewItem As String) As Boolean
Private Const MF_STRING As Integer = &H0
Private Const MF_SEPARATOR As Integer = &H800
Private Sub AddSysMenuItems()
'Get the System Menus Handle.
Dim hSysMenu As IntPtr = GetSystemMenu(Me.Handle, False)
'Add a standard Separator Item.
AppendMenu(hSysMenu, MF_SEPARATOR, …
Run Code Online (Sandbox Code Playgroud)