当前位置: 代码迷 >> QT开发 >> Qt 最大化与还原有关问题
  详细解决方案

Qt 最大化与还原有关问题

热度:62   发布时间:2016-04-25 04:19:15.0
Qt 最大化与还原问题
本帖最后由 cm709885067 于 2011-09-27 17:54:44 编辑 需要拦截子窗口的最大化与还原事件,自定义最大化显示区域,通过继承winEvent可以拦截到,但是当覆盖showMaximized和showNormal函数后,最大化按钮的图标没有改变!如果先设置子窗口标记为最大化,再调用覆盖的最大化函数,子窗口闪烁一下之后可以达到自定义大小的最大化效果,但是再点击最大化按钮,子窗口还原成自定义大小。可windowState还是WindowMaximized,而且最大化按钮图标还是最大化图标,跪求牛人解答
------最佳解决方案--------------------
处理WM_GETMINMAXINFO消息
#include <windows.h>

bool MainWindow::winEvent ( MSG * message, long * result )
{
switch (message->message)
{
case WM_GETMINMAXINFO: {

// GetSysemMetrics(): http://msdn.microsoft.com/en-us/library/ms724385(VS.85).aspx
// ptMinTrackSize - The minimum tracking width/height of a window, in pixels.
// The user cannot drag the window frame to a size smaller than these dimensions.
// ptMaxTrackSize - The default maximum width/height of a window that has a caption
// and sizing borders, in pixels. This metric refers to the entire desktop. The user cannot
// drag the window frame to a size larger than these dimensions.

// WM_GETMINMAXINFO: http://msdn.microsoft.com/en-us/library/ms632626(VS.85).aspx
// MINMAXINFO structure: http://msdn.microsoft.com/en-us/library/ms632605(VS.85).aspx

MINMAXINFO *mmi = (MINMAXINFO*) (message->lParam);

QDesktopWidget desktopWidget;
QRect desktop = desktopWidget.availableGeometry();

mmi->ptMaxSize.x = desktop.width();
mmi->ptMaxSize.y = desktop.height();

mmi->ptMaxPosition.x = desktop.x();
mmi->ptMaxPosition.y = desktop.y();

mmi->ptMinTrackSize.x = this->minWidth; // minimum width for your window
mmi->ptMinTrackSize.y = this->minHeight; // minimum height for your window

mmi->ptMaxTrackSize.x = desktop.width();
mmi->ptMaxTrackSize.y = desktop.height();

result = 0;

return true;
break;
}
return false;
}
------其他解决方案--------------------
2楼的方式并不是我想要的结果,availableGeometry的大小就是整个屏幕除了系统任务栏之外的区域,而我想要最大化的区域可能只是其中的一部分
------其他解决方案--------------------
重点是处理WM_GETMINMAXINFO消息,不是让你把上面的代码全部照搬
------其他解决方案--------------------
谢谢masterz。 MFC没用过的小白。弄了好旧,直到看到这个帖子。
谢谢啦。
  相关解决方案