Visual C++第03章 MFC基本应用程序的建立(9)
NULL,则WM_TIMER消息放在消息队列中,由窗口对象处理。如果安装成功,则返回非零。
2)、KillTimer()函数:清除定时器函数CMnd::KillTimer()的函数原型为: BOOL KillTimer(int nIDEvent);
其中的参数 nIDEvent 是安装定时器时所指定的定时器的ID。 例4:自定义消息处理实例(附加)
用户可以自定义消息,在应用程序中主动发出,这种消息一般用于应用程序 的某一部分内部处理。例如:当用户单击光标上移键时,程序发送用户自定义消 息,在对应的消息响应函数中,弹出消息对话框,显示消息发送成功。 基本知识
建一个单文档应用程序:名为:自定义消息处理 1)定义用户消息的ID(标识符)
在视图类的头文件中用如下语句定义用户消息的标识符:WM_USERMSG const WM_USERMSG = WM_USER + 100;
其中:WM_USER是由Windows定义的,它是第一个有效的用户消息。因为程序的其它部分也会使用用户消息,故将新的用户消息WM_USERMSG设置为 WM_USER + 100 2)用户消息的发送
Windows提供发送消息的函数::PostMessage()函数,函数PostMessage()的功
能是将消息插入消息队列并返回,由处理线程处理,而队列中的消息通过GetMessage()或PeekMessage()函数获取。PostMessage()函数的原型为: BOOL PostMessage
( HWND hWnd, //接收消息的窗口句柄 UINT Msg, //消息的ID
WPARAM wParam,//消息的WPARAM参数 WPARAM IParam, //消息的LPARAM参数 );
编程操作步骤:
(1)定义用户消息和消息响应函数
1)定义用户消息:在View.h中的CMyView类声明的上面写即: #endif // _MSC_VER > 1000
const WM_USERMSG = WM_USER + 100; class CMyView : public CView {
protected: // create from serialization only CMyView();
2)声明并定义用户消息响应函数:在View.h中添加void OnMyFunction()函数 ClassView?右键对准CMyView单击?Add Member Function?写:void和 OnMyFunction()将消息响应函数加到View.cpp中。并定义(加代码)。 void CMyView::OnMyFunction() {
MessageBox(\恭喜你,消息发送成功\}
(2)添加消息映射
BEGIN_MESSAGE_MAP(CMyView, CView) //{{AFX_MSG_MAP(CMyView) ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_MOUSEMOVE() ON_WM_KEYDOWN() //}}AFX_MSG_MAP ON_MESSAGE(WM_USERMSG,OnMyFunction) // Standard printing commands (3)编写程序代码
1)添加WM_KEYDOWN消息响应函数并加代码
用户按下光标上移键时,将产生WM_KEYDOWN消息。故加此消息响应函数 View?ClassWizard?Class name:CMyView?Object IDs:CMyView?Messages: WM_KEYDOWN?Add Function?Edit Code到View.cpp的OnKeyDown()函数中 接之加代码:
void CMyView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: Add your message handler code here and/or call default HWND hWnd = GetSafeHwnd(); //接收消息的窗口句柄
if(nChar==VK_UP) { ::PostMessage(hWnd,WM_USERMSG,0,0);// 将消息插入消息队列并返回 return; // HWND hWnd, //接收消息的窗口句柄 // UINT Msg, //消息的ID
//WPARAM wParam,//消息的WPARAM参数 //WPARAM IParam, //消息的LPARAM参数 } CView::OnKeyDown(nChar, nRepCnt, nFlags); }
说明:1、函数OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags)中,第一个参数nChar为所按的键的字符代码值,第二个参数nRepCnt为重复击键的次数,第三个参数nFlags表示扫描码和键转换前后的状态。2、在函数OnKeyDown() 中的VK_UP是光标上移键的虚拟键。虚拟键以VK_为前缀,对虚拟键处理时需要它们的参数。下面是一些常用的虚拟键的信息。 虚拟键名称 对应的虚拟键 VK_UP 光标上移 VK_DOWN 光标下移 VK_LEFT 光标左移 VK_RIGHT 光标右移 VK_HOME Home键 VK_END End
VK_PRIOR PageUp页向上 VK_NEXT PageDown页向下 VK_RETURN 回车 例5:类的删除 删除你已建的类:(书162页)
(1)将Visual C++6.0打开的所有文档窗口关闭。
(2)将项目工作区窗口切换到FileView页面,展开Source Files和Header Files
结点,分别选定要删除类的对应的 .h和 .cpp文件,按下Delete键,删除 这两个文件。
(3)选择“File”->”Close Workspace”选单命令,关闭项目。
(4)从实际的文件夹中删除对应的 .h和 .cpp文件及 .clw文件。 需注意的是:当下一次打开MFC ClassWizard对话框时,就会弹出 Select Source Files对话框,这时只要单击右下的[Add All]按钮即可。
例6:字体滚动程序(本章附加举例)
除了键盘和鼠标外,还有一种常用的输入设备就是计时器,它周期性地 按一定的时间间隔向应用程序发送WM_TIMER消息,它能实现“实时更新” 以及“后台运行”等功能。
应用程序是通过CWnd类的SetTimer函数来设置并启动计时器的,函数 如下:(前面已经介绍过)
UINT SetTimer(UINT nIDEvent,UINT nElapse,void(CALLBACK EXPOR
*lpfnTimer)(HWND,UINT,UINT,DWORD));
参数:nIDEvent用来指定该计时器的标识值(不能为0) nElapse 表示计时器的时间间隔(单位:ms)
lpfnTimer 回调函数指针,由应用程序定义,用来处理计时器
WM_TIMER消息,一般该参数为NULL,此时WM_TIMER消息被放入到应用程序消息队列中供CWnd对象使用。 一、建一个SDI应用程序 二、1、在View.h里加: private:
int x; //x坐标向前步进用
//(如果要有颜色加:在public里)
COLORREF m_pColor1; //第一种颜色 COLORREF m_pColor2; //第二种颜色 COLORREF m_pColor3; //第三种颜色
2、在View.cpp的构造函数里加: x=0;
//(如果要有颜色加:)
m_pColor1=RGB(255,0,0); // 红 m_pColor2=RGB(0,255,0); // 绿 m_pColor3=RGB(0,0,255); // 蓝
3、在View.cpp里往上找到OnDraw函数并加如下代码: View::OnDraw(CDC *pDC) { ---
pDC->SetTextColor(m_pColor1); //红
pDC->TextOut(x,80,”中国改革开放的28年颂歌!”); pDC->SetTextColor(m_pColor2); //绿
pDC->TextOut(x,100,”我们一定要统一祖国的神圣领土台湾!”); pDC->SetTextColor(m_pColor3); // 蓝
pDC->TextOut(x,120,”攀登计算机科学高峰,培养现代化创新人才!”); x=x+20; // 步长
RECT re; //矩形结构体对象,也就是窗口矩形。见最后面的说明。 GetClientRect(&re);//获得矩形窗口的大小 if(x>re.right-re.left) x=0; } 4、(1)添加一个菜单项名为“启动”,ID标识为 ID_TEST (2)将此消息(ID_TEST)连接到视图View中并加代码:
void View::OnText() {
SetTimer(1,200,NULL);
// 1处不能为0,为定时器的ID值,2 …… 此处隐藏:3049字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [高等教育]公司协助某村精准扶贫工作总结.doc
- [高等教育]高二生物知识点总结(全)
- [高等教育]苏教版数学三年级下册《解决问题的策略
- [高等教育]仪器分析课程学习心得
- [高等教育]2017年五邑大学数学与计算科学学院333
- [高等教育]人教版七年级下册语文第四单元测试题(
- [高等教育]2018年秋七年级英语上册Unit7Howmuchar
- [高等教育]2017年八年级下数学教学工作小结
- [高等教育]湖南省怀化市2019届高三统一模拟考试(
- [高等教育]四年级下册科学_基础训练及答案教材
- [高等教育]城郊煤矿西风井管路伸缩器更换施工安全
- [高等教育]昆八中20182019学年度上学期期末考试
- [高等教育]项目部各类人员任命书
- [高等教育]上市公司经营水务产业的模式
- [高等教育]人教版高二化学第一学期第三章水溶液中
- [高等教育]【中考物理第一轮复习资料】四.压强与
- [高等教育]金坑水电站报废改建工程机电设备更新改
- [高等教育]高中生物教学工作计划简易版
- [高等教育]2017年西华大学攀枝花学院(联合办学)44
- [高等教育]最新整理超短爆笑英文小笑话大全
- 优秀教师继续教育学习心得体会
- 阳历到阴历的转换
- 留守儿童教育案例分析
- 华师17春秋学期《玩教具制作与环境布置
- 测速传感器新型安装装置的现场应用
- 人教版小学数学三年级下册第四单元
- 创业个人意向书
- 山东省潍坊市2012年高考仿真试题(三)
- [恒心][好卷速递]四川省成都外国语学校
- 多少人错把好转反应当成了病情加重处理
- 中外广播电视史复习资料整理
- 江苏省扬州市江都区宜陵镇中学2014-201
- 工程造价专业毕业实习报告
- 广西师范学院心理与教育统计
- aympkrq基于 - asp的博客网站设计与开
- 建筑业外出经营相关流程操作(营改增后
- 人治 德治 法治
- [精华篇]常识判断专项训练题库
- 中国共产党为什么要实行民主集中
- 小学数学第三册第一单元试卷(A、B、C