Windows api 控制台操作:取消最大化、最小化、关闭菜单 | 您所在的位置:网站首页 › windows 菜单栏 取消隐藏 › Windows api 控制台操作:取消最大化、最小化、关闭菜单 |
主要步骤: 找到窗口句柄删除对应菜单选项相关函数: 获得窗口句柄-GetConsoleWindowGetConsoleWindow是检索与调用进程相关联的控制台窗口句柄的意思 复制或修改而访问窗口菜单-GetSystemMenu窗口菜单指“最大化”、“最小化”、“关闭”等按钮 参数: hWnd:拥有窗口菜单拷贝的窗口的句柄。 bRevert:标志位,指定将执行的操作。 返回值: 如果参数bRevert为FALSE,返回值是窗口菜单的拷贝的句柄 如果参数bRevert为TRUE,返回值是NULL 移除菜单项-RemoveMenu参数: hMenu:将被修改的菜单的句柄。 UPosition:指定将被删除的菜单项,其含义由参数uFlags决定。 uFlags:指定参数uPosition如何解释。此参数必须为下列之一值: 返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。 注:DeleteMenu跟RemoveMenu得区别,前者是彻底的删除,后者只是移除,不会销毁菜单或它的句柄 重新绘制菜单栏-DrawMenuBar说明 为指定的窗口重画菜单。使用api函数改变一个窗口菜单的内容后,需要用到这个函数 返回值 Long,非零-成功,零-失败。会设置GetLastError 示例一:禁用最大化按钮 #include int main() { HWND hwnd = GetConsoleWindow(); // 获得控制台句柄 HMENU hmenu = GetSystemMenu(hwnd, false); // 复制或修改而访问窗口菜单 RemoveMenu(hmenu, SC_MAXIMIZE, MF_BYCOMMAND); // 从指定菜单删除一个菜单项或分离一个子菜单 DrawMenuBar(hwnd); return 0; }运行结果:虽然右上角的最大化按钮还在,但是点击后无效果。而左上角的弹出菜单中也没有最大化的选项。 如果我们使用 GetSystemMenu 来禁用关闭时,关闭按钮在禁用的同时会变成灰色。 #include int main() { HWND hwnd = GetConsoleWindow(); HMENU hmenu = GetSystemMenu(hwnd, false); RemoveMenu(hmenu, SC_CLOSE/* 关闭菜单 */, MF_BYCOMMAND); DrawMenuBar(hwnd); return 0; }注:这里可以使用 alt+F4 关闭当前窗口 示例二:使用 SetWindowLong 禁用最大化按钮 SetWindowLong 函数可以用来改变指定窗口的属性,而有一个属性为GWL_STYLE用于设定窗口风格。 关于SetWindowLong https://baike.baidu.com/item/SetWindowLong #include int main() { HWND hwnd = GetConsoleWindow(); LONG style = GetWindowLong(hwnd, GWL_STYLE); // GWL_STYLE -16 设定一个新的窗口风格。 style &= ~(WS_MAXIMIZEBOX); // 取消最大化按钮显示 SetWindowLong(hwnd, GWL_STYLE, style); // 设置窗口属性 return 0; }运行效果:最大化按钮变为灰色,且点击无效。 WS_SIZEBOX:不能调整大小(最大化依然生效) WS_CAPTION:取消菜单按钮 WS_TILEDWINDOW:取消菜单栏 |
CopyRight 2018-2019 实验室设备网 版权所有 |