gpt4 book ai didi

winapi - 如何禁用移动系统菜单项?

转载 作者:行者123 更新时间:2023-12-04 14:36:04 24 4
gpt4 key购买 nike

在 Microsoft Windows 中,这有效:

 mnu := GetSystemMenu(h, false);
EnableMenuItem(mnu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);

但这不起作用:
 mnu := GetSystemMenu(h, false);
EnableMenuItem(mnu, SC_MOVE, MF_BYCOMMAND or MF_GRAYED);

因此我知道如何禁用窗口的“关闭”系统菜单项,而不是“移动”项。我怎么做?

更新

当然,使用非常好的函数 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);

但这再次适用于 SC_CLOSE,但不适用于 SC_MOVE!

更新 2

即使问题在某种意义上已经得到解决,因为已经找到了一个“工作”的工作代码,可以这么说,听到关于问题原因的假设会很有趣:为什么 SC_CLOSE 工作而不是 SC_MOVE?

最佳答案

这有点神秘,但如果您使用 ModifyMenu 或 DeleteMenu 就可以了:

   HMENU mnu = GetSystemMenu(hWnd, false);
DeleteMenu(mnu, SC_MOVE, MF_BYCOMMAND);

或者:
   HMENU mnu = GetSystemMenu(hWnd, false);
MENUITEMINFO info = { sizeof(MENUITEMINFO) };
TCHAR name[256] = _T("Cannot move");
info.fMask = MIIM_TYPE;
info.dwTypeData = name;
info.cch = sizeof(name) / sizeof(TCHAR);
GetMenuItemInfo(mnu, SC_MOVE, false, &info);
ModifyMenu(mnu, SC_MOVE, MF_BYCOMMAND | MF_GRAYED, 0, info.dwTypeData);

关于winapi - 如何禁用移动系统菜单项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2602375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com