Windows取消应用程序任务栏预览视图右键的最大化和最小化功能

12 篇文章 0 订阅
4 篇文章 0 订阅

如下图所示:

实际做需求的时候,可能会遇到需要禁用最大化和最小化按钮的场景;

 

Windows提供了接口可以对此处进行修改;

// 注意下述两个标志位:[官方文档](https://docs.microsoft.com/en-us/windows/win32/winmsg/window-styles)
WS_MAXIMIZEBOX
WS_MINIMIZEBOX

/// \brief 修改HWND窗口的属性
/// 参数1: dwRemove 表示需要移除的属性
/// 参数2: dwAdd 标识需要新增的属性
/// 参数3: nFlags 为窗口大小和位置标志(可以不填入)
BOOL ModifyStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0)
{
	ASSERT(::IsWindow(m_hWnd));

	DWORD dwStyle = ::GetWindowLong(m_hWnd, GWL_STYLE);
	DWORD dwNewStyle = (dwStyle & ~dwRemove) | dwAdd;
	if(dwStyle == dwNewStyle)
		return FALSE;

    // 文档链接:[SetWindowLongPtrA](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowlongptra)
	::SetWindowLong(m_hWnd, GWL_STYLE, dwNewStyle);
	if(nFlags != 0)
	{
        // 文档链接:[SetWindowPos](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowpos)
		::SetWindowPos(m_hWnd, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | nFlags);
	}

	return TRUE;
}

// 使用方式
ModifyStyle(WS_MAXIMIZEBOX, 0);    // 屏蔽最大化功能
ModifyStyle(WS_MINIMIZEBOX, 0);    // 屏蔽最小化功能

附注Qt处理此问题的标志位:(Qt自身提供了一个demo可以用于查看这些标志位的不同表现形式:)

Qt::WindowMaximizeButtonHint
Qt::WindowSystemMenuHint

// 设置无边框的方式
setWindowFlags(Qt::FramelessWindowHint);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值