ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:258.09KB ,
资源ID:3545751      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3545751.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Visual C++程序的建立6.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Visual C++程序的建立6.docx

1、Visual C+程序的建立6章 后 习 题 练习题 1 键盘字符输入,并使输入的文本居中 1、该程序的主要工作: (1)处理Windows消息 (2)使用Visual C+ ClassWizard(类向导) (3)读取来自键盘的键击 (4)设置显示文本的格式 (5)决定窗口的尺寸 (6)决定文本串的屏幕尺寸 2、用到的一个主要函数是字符消息处理框架函数 afx_msg void OnChar(UNIT nChar,UINT nRepCnt,UINT nFlags) 参数:nChar表示键盘码 nRepCnt表示按键的个数 nFlags表示字符消息标志 Windows操作系统是通过格式化的消息

2、在应用程序中通信的,每个事件发生后,Windows就将它转化为一条消息,判断这条消息应该由哪个窗口来处理,然后将该消息发往该窗口,并交由该窗口的拥有程序去处理,这就是Windows的消息处理机制。 程序编写步骤: (1)建一个单文档应用程序,名为:键盘输入 (2)为键盘数据建立存储 在文档类CMyDoc.h文件的public下写: CString str; /定义字符串对象 在文档类CMyDoc.cpp的构造函数里写: str=“ ”; /将字符串对象置为空 当用户键入每个键时,就把它们送到str中 (3)读取键击 当用户键入一个键时,Windows将会发送给我们一个WM_CHAR消息,把这个

3、消息连到视图类(CMyView)中,并在函数OnChar()中加下列代码: CMyView:OnChar(UINT nChar,UINT nRepCnt,UINT nFlags) CMyDoc *pDoc=GetDocument(); /获取文档类首地址指针 ASSERT_VALID(pDoc); /测试指针 pDoc-str+=nChar; /读取键击 Invalidate(); /重绘视图,强制绘图 (4)显示文本Invalidate()函数通过调用OnDraw()函数,强制程序重绘视图,故在View.cpp里加:CMyView:OnDraw(CDC *pDC) -pDC-TextOut(

4、20,20,pDoc-str); /在文档窗口的x=20,y=20处显示敲入的信息 (5)编译运行,键盘输入字符,便在窗口上显示出来。 说 明: 1、pDoc-str+=nChar; 相当于pDoc-str=pDoc-str+nChar; 2、Draw函数是视图显示函数 (5)将文本居中 CWnd派生出CView,再由CView派生出CCenteredView类,该类使文本居中。可使用CWnd的GetWindowRect()函数,得到客户区的尺寸。 CRect类用于容纳矩形的尺寸和大小,我们把CRect对象的指针传递到GetWindowRect() 函数,来获得视图的尺寸。在OnDraw()函

5、数里加下列代码:void CMyView:OnDraw(CDC* pDC) CMyDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/pDC-TextOut(20,20,pDoc-str);/此条语句是前面加的 CRect rect; / CRect类用于容纳矩形的尺寸和大小 GetWindowRect(&rect);/得到客户区的尺寸 int x=rect.Width()/2; /确定中心坐标x,y int y=rect.Height()/2; CSize size=pDC-GetTextExtent(pDoc-str);/查明显示的文本串尺寸 x-=

6、size.cx/2; y-=size.cy/2; pDC-TextOut(x,y,pDoc-str); (6)编译运行,键盘输入字符,便在窗口中间显示出来,如图1所示。 说 明: 使用CDC类(设备环境类)的GetTextExtent()函数来决定文本串将显示在客户区的尺寸。CSize类有2个重要的成员,cx和cy用于保留文本串的尺寸。 x,y表示窗口新的左上角坐标cx,cy表示窗口新的宽度和高度RECT结构:typedef struct tayRECT LONG left; /左上角x坐标 LONG top; /左上角y坐标 LONG right; /右下角x坐标 LONG bottom;/

7、右下角y坐标RECT; /CRect类用于容纳矩形的尺寸和大小SIZE结构:/窗口大小typedef struct tagSIZE int cx; /当一个函数返回时的x范围 int cy; /当一个函数返回时的y范围SIZE; 注 意:如果要显示带颜色的字,你做如下工作:/定义颜色变量在View.h的public里写:COLORREF m_pColor;在View.cpp的构造函数里写:m_pColor=RGB(255,0,0); /红色在刚加进去的pDC-TextOut(x,y,pDoc-str);语句的前面加:/显示红色的字体pDC-SetTextColor(m_pColor); 前面介

8、绍了读取键盘的键击的编程过程,实际上,在我们创建单文档(或双文档)应用程序时,到第6步(最后一步)停住,在这个界面的最下方Base class处下拉,找到CEditView置好,再点Finish之后运行,在程序的文档窗口上,直接就能读取来自键盘的键击。 练习题2 向窗口中添加一个闪亮的插入符,插入符出现在文本末尾,指示下一个字符的位置; 当用户单击另一个窗口或别处时,会将焦点移向那个窗口,隐藏插入符,当鼠标回到本窗口 单击时,又获得焦点,显示插入符。 (1)建立一个单文档应用程序,名为:插入符 (2)在文档类CMyDoc.h里加(public下面):CString str; (3)在文档类CM

9、yDoc.cpp里的构造函数里加:str=“ ”; /置空 (4)向视图类CMyView里加映射消息OnChar()即:WM_CHAR读取键击,并加代码:void CMyView:OnChar(UINT nChar,UINT nRepCnt,UINT nFlags) CMyDoc *pDoc=GetDocument();/获得文档类指针 ASSERT_VALID(pDoc); /测试文档指针pDoc-str+=nChar;Invalidate(); (5)在视图类CMyView.h里加:(可在protected下面加) /布尔类型对象,以了解是否已创建了该插入符,boolean变量也称bool

10、ean标志,有2个值:真和假。 boolean car; (6)在视图类CMyView.cpp的构造函数中将car设为假:car=false; (7)在视图类CMyvoid CMyView:OnDraw(CDC *pDC) 加代码: .if(!car)TEXTMETRIC text; / TEXTMETRIC是一个结构体,为获得插入符/的大小。 pDC-GetTextMetrics(&text); /创建插入符,插入符宽度是字符宽度的1/8。 CreateSolidCaret(text.tmAveCharWidth/8,text.tmHeight);(8)设置插入符的位置 在视图类CMyVie

11、w.h的protected下写: CPoint carep; /点坐标对象 在视图类CMyView.cpp的OnDraw()中原有代码下添加:carep.x=carep.y=4; / 将插入符的位置设为4SetCaretPos(carep); /设置插入符位置ShowCaret(); /在屏幕上显示插入符car=true; /将布尔标志设为真 pDC-TextOut(0,4,pDoc-str); 这时插入符便出现在屏幕上一闪一闪的,你还可以往里敲东西,但插入符不动。 (9)将插入符放在显示文本串的末尾,就必须决定文本串的末尾位置,通过GetTextExtent() 来提供一个名为size的CS

12、ize对象来实现。 接着在函数OnDraw()中刚加入的代码pDCTextOut(0,4,pDocstr);的下面写: CSize size=pDC-GetTextExtent(pDoc-str); /文本大小 /下面是在文本串末尾显示插入符,我们首先使用HideCaret()隐藏它,如果不隐藏,可能会在屏幕 /上的老位置留下插入符的映像。接着在CSize size=pDC-GetTextExtent(pDoc-str); 下面写: HideCaret(); carep.x=size.cx; /将CPoint的x数据成员设置在屏幕上文本串的末尾。 SetCaretPos(carep);/将插入

13、符移向它的新位置 ShowCaret();/重新显示它 (10)运行!见插入符跟在文本串的后面。 (11)当用户单击另一个窗口或别处时,会将焦点移向那个窗口,应该隐藏这里的插入符,当失去或获得焦点时,隐藏或显示插入符。 1)失去焦点得到:WM_KILLFOCUS消息 2)获得焦点得到:WM_SETFOCUS 消息 将这2个消息分别加到CMyview视图类中去,并加代码:CMyView:OnkillFocus(Cwnd *pNewWnd)/失去焦点 HideCaret(); /隐藏焦点 CMyView:OnSetFocus(CWnd *pOldWnd)/获得焦点 ShowCaret(); /显示

14、焦点 这时运行,见窗口中有插入符,但把鼠标移到窗口外面单击,插入符就没了,而再把鼠标移回窗口单击,插入符又出现了。 (12)使用鼠标 在用户区任何位置单击鼠标,就在该位置显示一插入符,并在这个新位置处绘制文本。 注:再单击另一个位置时,将先前的文本清除掉, 1)加鼠标左键按下的映射消息WM_LBUTTONDOWN(鼠标按下,则第一个任务是存储它的位置,我们将在变量x和y中存储该位置,即(x,y),从point对象的x和y成员中获得),并加下列代码:View:OnLButtonDown(UINT nFlags,CPoint point) x=point.x;y=point.y;CMyDoc *p

15、Doc=GetDocument();ASSERT_VALID(pDoc);/鼠标到了新的位置,将原来的去掉,置空。pDoc-str.Empty();Invalidate(); /强制程序重绘视图 2)在视图类CMyView.h的保护或公共类型下加: int x,y; COLORREF m_pColor; /定义颜色变量 在视图类的执行文件CMyView.cpp的构造函数中加: m_pColor=RGB(255,0,0); /红色 3)在视图类的执行文件CMyView.cpp的OnDraw函数中加下列代码:CMyView:OnDraw(CDC *pDC) - pDC-SetTextColor(m

16、_pColor);/以下是将插入符移向文本串的末尾并重新显示它 carep.x=x+size.cx; carep.y=y; SetCaretPos(carep); pDC-TextOut(x,y,pDoc-str); (13)编译运行,结果见图2、图3所示。 注 意:如果不想显示2行字符,可将OnDraw函数中前步写入的pDC-TextOut(0,4,pDoc-str);注释掉。练习题3 制作一个每次单击窗口都出现不同鼠标光标图形(6个不同鼠标图形),而当鼠标移出窗口范围时,又变回了原来的图形,使新加入的鼠标光标移不出窗口范围的应用程序。 1、创建一个单文档的应用程序,名为:鼠标范围 2、分别

17、向视图类CMyView添加鼠标左键按下、抬起和鼠标移动的消息映射。如图3所示。 3、向资源编辑器中添加6个光标资源。 Insert-Resource-选中Cursor-单击Import-在C盘上搜寻到6个 .cur图形(光标资源),粘贴到某个文件夹中,同时添加到Import Resource对话框的“文件名(N)”处-再点击Import就将这6个光标资源添加到了本项目的资源编辑器中了。 4、在视图类的头文件CMyView.h的public下加成员变量及函数:HCURSOR m_hCursor; /用于存放光标句柄int m_hClick; void LoadCur(UINT CurName);

18、/用于获得要显示鼠标句柄 void GetCur(int ID_NO);/用于得到将要显示鼠标的ID 5、在视图类的执行文件CMyView.cpp中完成自定义的函数功能(全用手写)。void CMyView:LoadCur(UINT CurName) m_hCursor=AfxGetApp()-LoadCursor(CurName);void CMyView:GetCur(int ID_NO) if(m_hClick6) m_hClick=1;switch(m_hClick) case 1:LoadCur(IDC_CURSOR1);break; case 2:LoadCur(IDC_CURSO

19、R2);break; case 3:LoadCur(IDC_CURSOR3);break; case 4:LoadCur(IDC_CURSOR4);break; case 5:LoadCur(IDC_CURSOR5);break; case 6:LoadCur(IDC_CURSOR6);break; 6、完成鼠标放下、鼠标移动、鼠标抬起消息映射函数的实现功能void CMyView:OnLButtonDown(UINT nFlags, CPoint point) /鼠标按下 +m_hClick; GetCur(m_hClick);SetCursor(m_hCursor); RECT rect;

20、 GetClientRect(&rect); ClientToScreen(&rect); ClipCursor(&rect);void CMyView:OnLButtonUp(UINT nFlags, CPoint point) /鼠标抬起 ClipCursor(NULL);void CMyView:OnMouseMove(UINT nFlags, CPoint point) /鼠标移动 SetCursor(m_hCursor);CView:OnMouseMove(nFlags, point);7、在视图类的执行文件CMyView.cpp的构造函数中,加代码:CMyView:CMyView() m_hClick=0; /初始化m_hClick变量 8、编译运行,用鼠标一次一次的单击窗口,将一次一次的出现以上加入的6个不同的光标图形,而将其移到窗口外边时,它又变回了原来的图形,新加入的光标移不出窗口。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1