截取窗口的最小化消息



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("你点击了最小化按钮");

    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值