一、消息映射表
任何一个支持消息映射的类需要有以下部分:
1) 头文件中类定义时声明宏
public: DECLARE_MESSAGE_MAP()
2) .cpp文件中声明消息映射表
BEGIN_MESSAGE_MAP(CMsgApp,CWinApp)
ON_COMMAND(ID_APP_ABOUT,OnAppAbout)
END_MESSAGE_MAP()
3) .cpp中写消息处理函数
void CMsgApp:OnAppAbout(){CAboutDlg aboutDlg}
二、窗口消息:窗口的很多动作(例如创建、销毁),操作系统都会给应用程
序发送各种消息
是有View类可以对截获的WM_PAINT消息用OnDraw()函数,其他窗口没
有OnDraw()函数来对截获的消息做进一步操作,需要程序员自己编写代码
截获和处理WM_PAINT消息。
三、键盘消息
WM_KEYDOWN WM_KEYUP WM_CHAR
1) WM_CHAR消息的处理函数为OnChar,响应函数为:
void CXxxxView::OnChar(UINT nChar,UINT nRepCnt,UINT nFlags)
{
CString str;
strFormat("按下%c键,重复%d次,此键扫描码%d",nChar,nRepCnt,nFlags);
}
2)特殊键 如F1,F2,UP,DOWM,....处理 在消息处理之前处理消息
BOOL CMsgViev::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN)
if(pMsg->wParam==VK_f1) //do sth.
}
四、菜单消息
应用程序(多文档)窗口上的菜单只能显示一个菜单,即不会同时显示主窗口和子窗口的菜单,只有关闭所有子窗口的时候才能显示主窗口菜单,主窗口菜单的功能是用来管理子窗口的,子窗口的菜单是用来操作窗口内容的。
五、定时器消息
WM_TIMER计时器,用户通过成员函数SetTimwe() 设置一个时钟:
SetTimer(1,2000,NULL); //ID号为1,时间间隔2000ms,使系统每隔两秒自动发送WM_TIMER消息,消息处理函数为NULL,表示以默认的OnTimer()为消息处理函数;
OnDestroy()函数中加入一下代码:
KillTimer(1); //清除计时器1 应用程序退出时关闭定时器
注:Beep(1000,500);//扬声器动作 1000hz 500ms