截取窗口的最小化消息



1.  WindowProc 函数:

LRESULT C***Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)

{

    // TODO: Add your specialized code here and/or call the base class

     if(message == WM_SYSCOMMAND && wParam == SC_MINIMIZE)  

    {

        //在这里自己添加响应的代码,下面以弹出个消息框为例

        AfxMessagebox("你点击了最小化按钮");

    }

    return CDialog::WindowProc(message, wParam, lParam);

}

 

2.  onSysCommand函数:

    先确保你的程序有最小化按钮(废话^_^),然后按下ctrl+w,在mfc classwizard对话框切换到class info标签,在message  filter组合框中选择“windows”,再把标签切换到message   maps标签,在object   ids中选择c***dlg(***为你的工程名),接着在右侧的messages中找到WM_SysCommand这一项,双击它,mfc  classwizard就会帮你自动在下面member functions中加上它的响应函数:onSysCommand  ON_WM_SysCommand,接着再双击这个onSysCommand  ON_WM_SysCommand,真正进入这个消息的响应函数中,再自己添加代码实现你的功能:

void C***Dlg::OnSysCommand(UINT nID, LPARAM lParam)

{

    if((nID & 0xFFF0) == IDM_ABOUTBOX)

    {

        CAboutDlg dlgAbout;

        dlgAbout.DoModal();

    }

    else if(nID == SC_MINIMIZE)

    {

        //在这里自己添加响应的代码,下面以弹出个消息框为例      

        AfxMessagebox("你点击了最小化按钮");

        CDialog::OnSysCommand(nID, lParam);

    }

    else

    {

        CDialog::OnSysCommand(nID, lParam);

    }

}

 

3. onSize函数:

    在MSDN中描述道:“The WM_SIZE message is sent to a window after its size has changed. ”意思是:“在窗口大小改变后,Windows给窗口过程发送一个WM_SIZE消息。”所以,在窗口最小化后,Windows会给窗口发送WM_SIZE消息,我们可以通过这个消息来截取最小化消息。

 

WM_SIZE

fwSizeType   =   wParam;           //   resizing   flag  

nWidth   =    LOWORD(lParam);      //   width   of   client   area  

nHeight   =   HIWORD(lParam);      //   height   of   client   area  

 

wParam – 窗口变形种类

我们来看一下winuser.h头文件的定义:

#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就代表窗口被最小化了。

 

nWidth - lParam低字节,窗口区域新的宽度

 

nHeight – lParam高字节,窗口区域新的高度 

 

明白以上内容后,我们开始动手截取最小化消息。

1. 按下ctrl+w,通过向导添加一个WM_SIZE消息的处理函数。

2. 在Message Maps页中的"Class name"项选择C***Dlg,然后Message中选择     WM_SIZE,然后单击"Add Function"按钮.

3. 这样就把处理WM_SIZE消息的函数建立起来了,我们不要急着关闭向导,单击按钮"Edit Code"来进行具体的功能实现。

4. 进入到代码页面,编辑处理WM_SIZE消息的函数框架,如下:

void C***Dlg::OnSize(UINT nType, int cx, int cy)

{

    C***Dlg::OnSize(nType, cx, cy);

    // TODO: Add your message handler code here

    if(nType == SIZE_MINIMIZED)

    {

        //在这里自己添加响应的代码,下面以弹出个消息框为例

        AfxMessagebox("你点击了最小化按钮");

    }

}

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