转)截取窗口的最小化消息

我们首先要知道窗口什么时候最小化。但是窗口消息中并没有最小化这个消息,经过一番查找,发现最小化竟而藏在了WM_SIZE这个消息的wParam参数中了。
我们在这里就利用窗口的WM_SIZE消息来获取窗口最小化的消息。首先我们要了解一下WM_SIZE消息是什么时候产生的。
在MSDN中描述道:“The WM_SIZE message is sent to a window after its size has changed. ”意思是:“在窗口大小改变时,Windows给窗口过程发送一个WM_SIZE消息。”
所以,在窗口最小化时,Windows会给窗口发送WM_SIZE消息,我们可以通过这个消息来截取最小化消息。
那么,到底怎么截取呢?我们来看一下winuser.h头文件的定义:
/*
* WM_SIZE message wParam values
*/
#define SIZE_RESTORED       0
#define SIZE_MINIMIZED      1
#define SIZE_MAXIMIZED      2
#define SIZE_MAXSHOW        3
#define SIZE_MAXHIDE        4

这是WM_SIZE消息的wParam参数取值的宏定义。从上面可以看到一项
#define SIZE_MINIMIZED      1
这就是我们接下来要用到的。如果wParam的值为SIZE_MINIMIZED就代表窗口被最小化了。

明白以上内容后,我们开始动手来实现最小化时改变程序图标。

1.新建SDI文档,把要更改的图标加入到资源,然后通过向导添加一个WM_SIZE消息的处理函数。
2.具体做法是点击菜单栏中的"查看"->"建立类向导..."
3.在Message Maps页中的"Class name"项选择CMainFrame,然后Message中选择WM_SIZE,然后单击"Add Function"按钮.
4.这样就把处理WM_SIZE消息的函数建立起来了,我们不要急着关闭向导,单击按钮"Edit Code"来进行具体的功能实现。
5.进入到代码页面,我们可以看到处理WM_SIZE消息的函数框架,如下:
   void CMainFrame::OnSize(UINT nType, int cx, int cy) 
{
    CFrameWnd::OnSize(nType, cx, cy);

    // TODO: Add your message handler code here
}
6.现在我们来实现,当窗口最小化时弹出提示信息。我们可以在OnSize函数中加入如下代码:
if(nType==SIZE_MINIMIZED)
{
    ::AfxMessageBox("窗口最小化了",MB_OK);
}
7.运行一下,看到效果了吗?

你可能感兴趣的:(转)截取窗口的最小化消息)