计算机图形学实验指导书(8)
其中,space表示在文本字符之间使用的额外空间的像素数。
(3)设置文本的对齐方式
SetTextAlign()函数用于设置显示文本的对齐方式,函数说明如下:
pDC->SetTextAlign(alignment);
其中,alignment参数取值:TA_LEFT、TA_CENTER和TA_RIGHT,分别表示左对齐、居中方法和右对齐。Alignment参数取值:TA_TOP、TA_BOTTOM和TA_BASELINE分别表示文本在垂直方向的对齐方式,上对齐、下对齐和字符的基线对齐。
3.3 鼠标编程
在图形操作系统中,鼠标是最重要的输入设备之一。Windows系统为用户提供了统一的鼠标编程接口,而不必过多了解其底层的知识。Windows是基于消息传递、事件驱动的操作系统,当用户移动鼠标、按下或释放鼠标键时都会产生鼠标消息。应用程序可以接收10种鼠标消息,表3.3列出了这些鼠标消息和它们的描述。 表3.3鼠标消息和描述
消 息 描 述
WM_LBUTTONDBLCLK 鼠标左键被双击
WM_LBUTTONDOWN 鼠标左键被按下
WM_LBUTTONUP 鼠标左键被释放
WM_MBUTTONDBLCLK 鼠标中键被双击
WM_MBUTTONDOWN 鼠标中键被按下
WM_MBUTTONUP 鼠标中键被释放
WM_MOUSEMOVE 鼠标移动穿过对象区域
WM_RBUTTONDBLCLK 鼠标右键被双击
WM_RBUTTONDOWN 鼠标右键被按下
WM_RBUTTONUP 鼠标右键被释放
3.3.1 鼠标消息处理
MFC把鼠标消息处理函数封装在CView类中,它们分别是:
OnMouseMove(UINT nFlags, CPoint point); OnLButtonDblclk(UINT nFlags, CPoint point); OnLButtonDown(UINT nFlags, CPoint point); OnLButtonUp(UINT nFlags, CPoint point); ……
分别对应表3.3中10个鼠标消息。在鼠标处理函数中,point参数代表鼠标热点处的坐标位置,point.x为横坐标,point.y为纵坐标。默认坐标原点(0,0)位于窗口的左上角。由于应用程序要求自动捕获鼠标事件,因此应当采用Windows事件处理函数,而不是成员函数,具体使用方法参见3.3.3节示例程序。
nFlags参数中包含了鼠标按钮和键盘组合使用标志,用来描述鼠标按钮和键盘上的Shift键和Ctrl键的组合状态。nFlag参数取值范围:
-- 17
(1) MK_LBUTTON:鼠标左键被按下; (2) MK_RBUTTON:鼠标右键被按下; (3) MK_MBUTTON:鼠标中键被按下; (4) MK_SHIFT:键盘上的Shift键被按下; (5) MK_CONTROL:键盘上的Ctrl键被按下;
如果想知道某个键是否被按下,可用对应的位屏蔽值与nFlags参数作按位逻辑“与”运算,所的结果若为非零值,则表示该按钮被按下,例如:
if (nFlags & LBUTTON)
AfxMessageBox(“LButton is pressed down!”) Else
AfxMessageBox(“LButton is pressed Up!”); 如何区分两次单击和一次双击,这取决于两次按下按钮之间的时间间隔,只有当时间间隔小于一定值时才被认为是一次双击。Windows默认的时间为500ms。可以用SetDoubleClickTime()函数来重新设置时间间隔值。
若要使窗口函数能接收到鼠标双击产生的消息,在注册窗口类时,必须指明该窗口具有CS_DBLCLKS风格,否则,即使进行了双击操作,该窗口也只能收到两条“WM_LBUTTONDOWN”和“WM_LBUTTONUP”消息,例如:
wndclass.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;
3.3.2 捕捉鼠标
在交互式图形程序设计中,经常要使用鼠标的位置拾取、拖动或拖放,这些动作必须进行鼠标的捕捉。
鼠标捕捉只需要调用CWnd::SetCapture()函数。用户完成鼠标捕捉工作后一般是响应一个鼠标按下信息,要释放鼠标捕捉则是调用CWnd::ReleaseCapture()函数。释放被捕捉鼠标的最好时间是在响应鼠标弹起的时候(WM_LBUTTON)。
3.3.3 鼠标编程综合示例
示例1:在窗口中以文本的形式给出鼠标的状态,即当鼠标移动时,给出鼠标的位置;当鼠标按下鼠标左、右键时显示出鼠标按键状态。例如,当鼠标左键按下时,显示“LBUTTON DOWN!”。
第一步:建立一个myMouse工程文件; 第二步:添加鼠标事件处理函数
鼠标右击视图类(如CmyMouseView),选择“add windows message handler…”,弹出事件处理函数列表窗口,如图3-11所示
-- 18
图3-11 Windows事件处理函数列表窗口 从左边事件消息列表中选择“WM_LBUTTONDOWN”,然后单击“Add and Edit”按钮,即加入鼠标左键按下事件函数,并要求编辑事件处理程序。 第三步:输入事件处理程序
void CMymouseView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default //获得pDC
CDC* pDC=GetDC();
pDC->TextOut(20,40,”LBUTTONDOWM!”); // 输出显示信息 CView::OnLButtonDown(nFlags, point); }
其中,阴影部分是用户输入的程序,其它内容都是自动生成的内容。
第四步:重复第二步和第三步,分别添加WM_LBUTTONUP,WM_MOUSEMOVE,WM_RBUTTONDOWN,WM_RBUTTONUP,WM_LBUTTONDBCLK, WM_RBUTTONDBCLK鼠标事件,并输入以下程序:
void CMouseView::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default
CDC *pDC=GetDC();
pDC->TextOut(20,40,\ CView::OnLButtonUp(nFlags, point); }
void CMouseView::OnRButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CDC *pDC=GetDC();
pDC->TextOut(20,60,\
-- 19
CView::OnRButtonDown(nFlags, point); }
void CMouseView::OnRButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CDC *pDC=GetDC();
pDC->TextOut(20,40,\ CView::OnRButtonUp(nFlags, point); }
void CMouseView::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CDC *pDC=GetDC(); char tbuf[80]; sprintf(tbuf,\ // 输出鼠标当前位置
pDC->TextOut(20,20,tbuf); CView::OnMouseMove(nFlags, point); }
void CMouseView::OnLButtonDblClk(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CDC *pDC=GetDC();
pDC->TextOut(20,80,\ CView::OnLButtonDblClk(nFlags, point); }
void CMouseView::OnRButtonDblClk(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CDC *pDC=GetDC();
pDC->TextOut(20,80,\ CView::OnRButtonDblClk(nFlags, point); }
第五步:编译程序,并验证执行结果。
示例2:采用鼠标橡皮筋技术画圆
鼠标橡皮筋技术画圆 …… 此处隐藏:2864字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [基础教育]2016-2022年中国钢芯铝绞线市场现状调
- [基础教育]语文部编版初一语文下册练习题 句式变
- [基础教育]南京继续教育参考答案--深入学习贯彻习
- [基础教育]国旗下讲话稿——珍惜时间好读书
- [基础教育]北师大版六年级数学下册圆锥的体积教学
- [基础教育]人教版-音乐-四年级下册-四年级下册音
- [基础教育]乔布斯2019年斯坦福大学毕业典礼致辞.d
- [基础教育]2015年加油站安全知识竞赛试题及答案
- [基础教育]2020年教师年度考核个人工作总结
- [基础教育]2019年中考历史试题-2019年大庆市初中
- [基础教育]初三仁爱英语第一轮总复习教案
- [基础教育]SG-A094电气配管安装工程隐蔽验收记录
- [基础教育]冀教版小学数学三年级下册第六单元教材
- [基础教育]青岛版(五制)小学科学二年级下册16《制
- [基础教育]2018-2019年初中科学初一中考真卷测试
- [基础教育]幼儿园大班期末简短评语精选
- [基础教育]2018云南临沧公务员考试申论技巧:这样
- [基础教育]学校食堂经营管理方案
- [基础教育]新中国砥砺奋进的七十年原文
- [基础教育]真空泵的选型及常用计算公式
- 高职田径课程教学现状与对策
- 全髋关节置换术在老年股骨颈骨折患者中
- 青人社厅函〔2016〕576号(附件)工资
- cp101-07砂子检验作业指导书 - secret
- 微观经济学 第八章 博弈论 习题
- 2014高考真题(词语运用)汇编及答案
- 2018年人教版七年级语文下册《第三单元
- 苏教版数学四年级上册第一单元试题 - M
- 四川大学新闻与传播考研2000-2010年真
- 浙江万里学院英语专业四年制本科教学计
- 最新2018马年事业祝福语-范文word版(2
- 最全模具行业术语英文翻译
- 皮亚杰的发展心理学理论
- 64篇高考情景式默写 练习题及答案
- 仿写(学生稿)
- 《SQL Server数据库技术》试卷A
- 第七章作业答案
- 江苏省赣榆县海头高级中学高中语文必修
- 浙江省2001年10月自考正常人体解剖学答
- 2012英语重点短语




