360demo--关于WM_GETMINMAXINFO

在duilib的demo中,看到这么一段:

 1 LRESULT OnGetMinMaxInfo(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
 2     {
 3         MONITORINFO oMonitor = {};
 4         oMonitor.cbSize = sizeof(oMonitor);
 5         ::GetMonitorInfo(::MonitorFromWindow(*this, MONITOR_DEFAULTTOPRIMARY), &oMonitor);
 6         CRect rcWork = oMonitor.rcWork;
 7         rcWork.Offset(-rcWork.left, -rcWork.top);
 8 
 9         LPMINMAXINFO lpMMI = (LPMINMAXINFO) lParam;
10         lpMMI->ptMaxPosition.x    = rcWork.left;
11         lpMMI->ptMaxPosition.y    = rcWork.top;
12         lpMMI->ptMaxSize.x        = rcWork.right;
13         lpMMI->ptMaxSize.y        = rcWork.bottom;
14 
15         bHandled = FALSE;
16         return 0;
17     }

当时就对该消息的作用,有点不明白,对于将lparam转换成一个指针,来对参数进行修改这种方法感到很不解(好吧,我接触windows的东西看来太少了,总觉得他们的用法奇奇怪怪)

从名称上大概能看出这个消息是用来获取最大最小化的一些数值。。。

参考了这三个文章后:

A,B,C

对这个结构体有了大致了解,也知道上述代码其实是为了限制主窗口显示在屏幕范围内。

不过对于第7行,为什么要在做一次offset,就有点不解了,希望有筒子能告诉我啊。。。好吧,反正都没多少人看我博客的啦,还是自己黯然神伤吧

原文地址:https://www.cnblogs.com/riversHahaha/p/4573519.html