OnGetMinMaxInfo妙用,实现假全屏

  一般,全屏后,需要最前端显示(HWND_TOPMOST),但这样所有的其他窗口都能点出来,能否以一种方法,既可以全屏(窗口激活时),同时任务栏被覆盖掉。点击其他窗口时,其他窗口也可以正常显示。OnGetMinMaxInfo是一种好的解决方法。

具体实现思路:

  1)利用Windows API提供的一个结构体WINDOWPLACEMENT来存储全屏显示前视图和主框架窗口在屏幕上的位置和显示信息、非客户区窗口的显隐信息,以便全屏幕显示时恢复窗口原状;

  2)通过API函数GetDesktopWindow()得到桌面窗口,由GetWindowRect()得到显示器的尺寸;

  3)通过AdjustWindowRect()来计算当客户区大小为屏幕大小时相应的窗口大小;

  4)通过SetWindowPlacement()来设置视图窗口和主窗口为客户区大小和屏幕大小的窗口;

  5)处理窗口消息WM_GETMINMAXINFO,使窗口能够顺利的最大、最小化。
       但是用这种方法并没有实现真正的全屏,好像VC6的全屏也是这样做的。如果有多屏显卡,这样实现的全屏是可以
从别的屏幕对其进行放大缩小的。

  在Windows中,无论什么时候以何种方式改变窗口的尺寸或大小,是拖拽窗口边缘也好,或是在代码中调用改变窗口尺寸的函数也好,总之不管你用什么方法,Windows都会首先发送WM_GETMINMAXINFO消息。这个消息的意思是说:“嘿,如果你要强迫我的尺寸变大或变小,就附上详细的MINMAXINFO结构信息,否则我用默认值处理。”大多数应用程序都不用显式处理这个 WM_GETMINMAXINFO消息(也就是说让DefWindowProc窗口过程进行缺省处理),而Windows在进行缺省处理时是不会让一个窗口视图比屏幕还大的,所以需要修改 OnGetMinMaxInfo消息处理,将全屏的窗口大小传递个MINMAXINFO结构体。

reference:
https://www.cnblogs.com/ct0421/p/3242411.html
https://www.cnblogs.com/lidabo/p/3703538.html

你可能感兴趣的:(OnGetMinMaxInfo妙用,实现假全屏)