Duilib创建窗口双击标题栏禁止窗口最大化

使用Duilib创建窗口并禁止窗口最大化

第一步:

1 XXXFrame.Create(NULL, _T("XXXFrame"), UI_WNDSTYLE_EX_FRAME, WS_EX_WINDOWEDGE |WS_EX_ACCEPTFILES);

第二步:

 

注意:若create时窗口风格没有指定UI_WNDSTYLE_EX_FRAME,而是指定了UI_WNDSTYLE_FRAME,就算写了第二步,双击还是无法禁止

---------------------------------------------------------------------------------------------------------------------------------------

补充:

不知道大家发现没有发现上图中的错误,要屏蔽WM_NCLBUTTONDBLCLK这个消息,但没有return 0,虽然我更改窗口风格从UI_WNDSTYLE_FRAME到UI_WNDSTYLE_EX_FRAME但,又出现一个新问题,就是窗口创建出来后,双击窗口任务栏图标,只能最大化窗口,不能还原最小化。

所以最佳的禁止最大化的办法是这样的:

1.窗口风格还指定UI_WNDSTYLE_FRAME,这样连续双击任务栏图标,窗口可以最大化和最小化切换。

2.在消息循环中假如下面代码:

 

转载:http://blog.csdn.net/wangshubo1989/article/details/49475077

转载:http://blog.csdn.net/x356982611/article/details/51594720

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现拖动窗口到屏幕边缘自动最大化,可以在窗口的消息处理函数中捕捉 WM_WINDOWPOSCHANGING 消息,然后判断窗口是否位于屏幕边缘,如果是,则将窗口状态设置为最大化。以下是具体的实现步骤: 1. 在窗口类的消息处理函数中添加对 WM_WINDOWPOSCHANGING 消息的处理。 ```cpp LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_WINDOWPOSCHANGING: OnWindowPosChanging((WINDOWPOS*)lParam); break; // 其他消息处理 } } ``` 2. 实现 OnWindowPosChanging 函数,判断窗口位置是否位于屏幕边缘,并设置窗口状态。 ```cpp void OnWindowPosChanging(WINDOWPOS* pWndPos) { if (pWndPos->flags & SWP_NOMOVE) return; // 获取屏幕工作区矩形(不包括任务栏) RECT rcWorkArea; SystemParametersInfo(SPI_GETWORKAREA, 0, &rcWorkArea, 0); // 判断窗口是否位于屏幕边缘 if (pWndPos->x <= rcWorkArea.left) { pWndPos->x = rcWorkArea.left; pWndPos->cx = rcWorkArea.right - rcWorkArea.left; } else if (pWndPos->x + pWndPos->cx >= rcWorkArea.right) { pWndPos->x = rcWorkArea.right - pWndPos->cx; } if (pWndPos->y <= rcWorkArea.top) { pWndPos->y = rcWorkArea.top; pWndPos->cy = rcWorkArea.bottom - rcWorkArea.top; } else if (pWndPos->y + pWndPos->cy >= rcWorkArea.bottom) { pWndPos->y = rcWorkArea.bottom - pWndPos->cy; } } ``` 在 OnWindowPosChanging 函数中,首先判断了窗口是否被移动,如果没有移动则直接返回。接着使用 SystemParametersInfo 函数获取屏幕的工作区矩形,然后判断窗口是否位于屏幕边缘,如果是,则将窗口状态设置为最大化或调整窗口大小使其占据整个屏幕工作区。 注意:使用 SystemParametersInfo 函数需要包含 windows.h 头文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值