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