- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验五 消息和命令.doc
实验五 消息和命令
一 实验目的
熟悉利用 VC 集成化环境建立对 Windows 下的消息和命令响应的方法
掌握窗口间消息的传递方法
掌握用户自定义消息及响应方法
了解利用 SendMessage 或 PostMessage 进行窗口间数据传递方法
二 实验要求
1、利用 MFC 中 CWnd 类的时间函数,完成具有“定时”功能的任务,如画一个不停变换直径的园。当鼠标左键单击时,圆心由鼠标位置开始由小到大变换,利用鼠标右键单击停止画园等。
提示: CWnd 中的时间函数:
SetTimer : Installs a system timer that sends a WM_TIMER message when triggered.
KillTimer: Kills a system timer.
Example // This example shows how to use CWnd::SetTimer, CWnd::KillTimer, and how to handle WM_TIMER messages. A timer is set up to send a WM_TIMER message to the main frame window every 2 seconds in OnStartTimer(). OnStopTimer will stop the timer by calling CWnd::KillTimer. OnTimer was set up through class wizard to handle WM_TIMER messages for the cview window. In this example the PC speaker will beep every 2 seconds.
void CMyView::OnStartTimer()
{ m_nTimer = SetTimer(1, 2000, 0); }
void CMyView::OnStopTimer()
{KillTimer(m_nTimer); }
void CMyView::OnTimer(UINT nIDEvent)
{ MessageBeep(0xFFFFFFFF); // Beep // Call base class handler.
CMyView::OnTimer(nIDEvent);
}
CWnd 中的获取窗口范围的函数:CWnd::GetClientRect( LPRECT lpRect ) const;通过该函数,可以获得当前窗口的范围。
例如:Rect rect ;
GetClientRect( rect ) ; 变量 rect 就是当前窗口的范围
需要在当前窗口画一些图形,可以采用下列函数:
CClientDC dc(this) ;/// 在 view 类中,获得的是设备描述类
dc.Ellipse( x1,y1,x2,y2); // 即会在窗口上画一个椭圆。把四个点设置成组成一个正方形,则画出的是圆。
2、 创建一个单文档的窗口,鼠标左键单击后,发出一个用户自定义消息,在对此消息响应函数响应后弹出一个对话框。
提示:使用 SendMessage() 或 PostMessage()函数来发送用户自定义消息。SendMessage将消息直接发送给窗口,并调用该窗口的窗口过程进行处理。在窗口过程对消息处理完毕后,该函数才返回(SendMessage发送的消息为不进队消息)。PostMessage函数将消息放入与创建窗口的线程相关联的消息队列后立即返回。
利用宏定义# define UM_MESSAGE WM_USER + 1来声明用户自定义消息。模仿Windows消息的映射机制来实现自定义消息的映射,使用ON_MESSAGE宏为这条自定义消息添加消息映射。注意在AFX_MSG注释宏的外面添加自定义消息的响应函数声明和消息映射。
3 将窗口分成二个矩形,当光标移至不同的区域内时显示出不同的形状的光标。
提示:用CSplitterWnd类来切分窗口,调用成员函数CreateStatic来完成静态的切分,调用成员函数CreateView创建切分窗口窗格。让两个视类分别响应WM_CREATE消息,在窗口创建之后,调用SetClassLong函数来设置光标。
三 实验过程
实验1步骤:
建立一个单文档应用程序,工程命名为“Time”。分别为CTimeView类添加鼠标左键按下和鼠标右键按下的消息:OnLButtonDown和OnRButtonDown。然后添加WM_TIMER消息的响应函数OnTimer。最后为CTimeView类添加一个私有成员变量:m_point,类型
文档评论(0)