VC中如何让子对话框响应最大化、最小化、关闭等系统消息
来源:互联网 发布:适用于mac的办公软件 编辑:程序博客网 时间:2024/05/29 04:45
我们知道实现捕获最大化、最小化、关闭、大小变化等系统消息主要有如下两种方法:
1、重写PreTranslateMessage函数
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
BOOL CSuperSpeedDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if ( pMsg->message == WM_SYSCOMMAND )
{
if ( ( pMsg->wParam & 0xFFF0) == SC_MINIMIZE )
{
AfxMessageBox(_T("捕获到窗口最小化消息"));
}
else if ( ( pMsg->wParam & 0xFFF0) == SC_MAXIMIZE )
{
AfxMessageBox(_T("捕获到窗口最大化消息"));
}else if ( ( pMsg->wParam & 0xFFF0) == SC_CLOSE )
{
AfxMessageBox(_T("捕获到窗口关闭消息"));
}
}
return CDialog::PreTranslateMessage(pMsg);
}
{
// TODO: Add your specialized code here and/or call the base class
if ( pMsg->message == WM_SYSCOMMAND )
{
if ( ( pMsg->wParam & 0xFFF0) == SC_MINIMIZE )
{
AfxMessageBox(_T("捕获到窗口最小化消息"));
}
else if ( ( pMsg->wParam & 0xFFF0) == SC_MAXIMIZE )
{
AfxMessageBox(_T("捕获到窗口最大化消息"));
}else if ( ( pMsg->wParam & 0xFFF0) == SC_CLOSE )
{
AfxMessageBox(_T("捕获到窗口关闭消息"));
}
}
return CDialog::PreTranslateMessage(pMsg);
}
注:此方法无法捕获对话框程序程序中的系统按钮消息
2、响应WM_SIZE消息(OnSize函数)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void CSuperSpeedDlg::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
switch( nType)
{
case SIZE_RESTORED:
AfxMessageBox( L"捕获到窗口还原消息" );
break;
case SIZE_MINIMIZED:
AfxMessageBox( L"捕获到窗口最小化消息" );
break;
case SIZE_MAXIMIZED:
AfxMessageBox( L"捕获到窗口最大化消息" );
break;
}
}
{
CDialogEx::OnSize(nType, cx, cy);
switch( nType)
{
case SIZE_RESTORED:
AfxMessageBox( L"捕获到窗口还原消息" );
break;
case SIZE_MINIMIZED:
AfxMessageBox( L"捕获到窗口最小化消息" );
break;
case SIZE_MAXIMIZED:
AfxMessageBox( L"捕获到窗口最大化消息" );
break;
}
}
注:此方法不但可以捕获对话框程序程序中的系统按钮消息,同时还可以获取客户区高度与宽度。
附加说明:
你也可以用IsZoomed函数来判断窗口是否最大化了。
3、如何让子对话框响应这些系统消息
如上所述:
对于最大化、最小化等系统消息的捕获,通常可以由WM_SIZE来完成,但如果一个对话框是一个子对话框时,通常它的父对话框会拥有这些消息,而子对话框并不会,所以上面的SIZE_RESTORED、SIZE_MINIMIZED、SIZE_MAXIMIZED等消息是子对话框是接收不到的。
那么子对话框怎样来处理这些系统消息呢?我是这样想的:我们可以通过父对话框的OnSize函数来捕获这些消息,之后我们可以给相应的子对话框发送我们自定义的消息,在这些自定义的消息中处理我们进行操作,。这样操作就是变相的让子对话框来响应这些接收不到的消息!
下面是一个让子对话框 变相响应系统消息的例子:
2
3
4
5
6
7
8
9
10
11
void CSuperSpeedDlg::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
if (nType == SIZE_MAXIMIZED && m_MFCTab.GetActiveTab() == 2)
{
//AfxMessageBox( L"捕获到窗口最大化消息" );
HWND hwnd = m_MyPlatformDlg.GetSafeHwnd();
::PostMessage(hwnd, WM_KEYDOWN, VK_F5, 1); // F5刷新
}
}
{
CDialogEx::OnSize(nType, cx, cy);
if (nType == SIZE_MAXIMIZED && m_MFCTab.GetActiveTab() == 2)
{
//AfxMessageBox( L"捕获到窗口最大化消息" );
HWND hwnd = m_MyPlatformDlg.GetSafeHwnd();
::PostMessage(hwnd, WM_KEYDOWN, VK_F5, 1); // F5刷新
}
}
- VC中如何让子对话框响应最大化、最小化、关闭等系统消息
- 如何重载最小化、最大化窗口消息响应
- vc响应最大化最小化按钮的事件或消息
- vc响应最大化最小化按钮的事件或消息
- vc响应最大化最小化按钮的事件或消息 .
- vc响应最大化最小化按钮的事件或消息 .
- vc响应最大化、最小化按钮
- WPF中让窗体不显示最大化,最小化,关闭按钮
- 【VC++】如何最大化对话框
- 在VC++中如何让MSFlexGrid响应滚轮消息
- 窗口最大化、最小化及关闭的消息
- API 拦截窗口关闭&最大化&最小化消息
- 如何让对话框响应WM_KEYDOWN消息
- vc 最大化、最小化、恢复和关闭命令。。。
- VC如何让对话框一显示就最大化
- VC如何让对话框一显示就最大化
- 如何让TAB控件的子对话框随着TAB的父对话框的最大化而最大化
- 完美解决VC++ 自绘标题栏阻止系统进行重绘(出现最大化,最小化,关闭)
- 常用语句
- asp程序错误详细说明例表
- service httpd start
- 一条sql添加分区过滤条件后cost反而上升
- 关于java.io.File类
- VC中如何让子对话框响应最大化、最小化、关闭等系统消息
- 使用printascii与printhex输出log到串口
- 数据库操作
- 静态包含与动态包含的区别
- UVA301- Transportation
- Aizu 1315 Gift from the Goddess of Programming 解题报告
- Android开发权威指南(第2版)新书发布(免费下载随书光盘内容,包括Android源代码)
- 2009-03-30 16:41 Http和Socket连接区别
- 简述Linux进程间通信的几种方式