消息映射与消息处理

本文详细解析了Windows程序的框架结构,重点讲解了消息驱动机制及其在MFC框架中的应用,并通过三个实验展示了如何利用非命令消息进行特定操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1.  事件:命令消息

     消息:非命令消息

 

2.类视图为什么分  doc 和  view? 

        因为:  Doc文档:保存数据;view视图:显示。举个例子:同一组数据,可以分成饼图或者柱状图等显示。

 

3. API:应用程序编程接口

    SDK:软件开发包,通常包括API函数库、帮助文档、使用手册、辅助工具等资源,sdk实际上就是开发所需资源的一个集合。

 

4.Windows程序框架分析

          入口_tWinMain,windows应用程序的特点是消息驱动,当系统或者用户要求应用程序完成某一个任务时候,所依靠的就是消息,系统会把用户的要求或者系统的要求放到一个消息结构中,然后发送给应用程序,再去处理。

          应用程序完成任务的过程:在应用程序初始化完成之后,调用一个显示窗口的API函数,所以系统知道了程序要显示窗口了,此时(注意,这里就是产生消息的动机),就会在消息队列中产生一个WM_PAINT消息,这样,应用程序的消息循环就可以捕捉到这个消息并且将它发送给窗口函数(注意,这个函数就是系统调用的),然后窗口函数就处理这个消息,完成它的任务。

 

5. MFC程序框架分析

          入口点AfxWinMain,消息映射:1.SDK的消息实现机制  2.MFC的消息实现机制

 

6.3个实验:

   (1)当鼠标左键单击次数是7的倍数时,弹出消息框,显示当前单击了多少次

     

//添加WM_LBUTTONDOWN
void CLmouseView::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
    
	static int times=0;
	CString str;
    ++times;
	if(times%7==0)
	{
	   str.Format(_T("第%d次按下鼠标左键"),times);
	   MessageBox(str);
	}
    
	CView::OnLButtonDown(nFlags, point);
}


 


(2)按下键盘某个键,弹出消息框,显示按下键的ASCII码值

//添加非命令消息WM_Char
void CkeyASCIIView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
    CString str;

	str.Format(_T("按下的键是:%c,  ASCII码是:%d"),nChar,nChar);
	MessageBox(str);
	CView::OnChar(nChar, nRepCnt, nFlags);
}

 


(3)鼠标移动时,在标题栏显示当前光标位置

//添加非命令消息WM_MOUSEMOVE
void CmoveView::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
    CString str;
	str.Format(_T("(%d, %d)"), point.x, point.y);
	AfxGetMainWnd()->SetWindowText(str);

	CView::OnMouseMove(nFlags, point);
}


 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值