Visual C++程序的建立6Word下载.docx
- 文档编号:16451071
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:10
- 大小:258.09KB
Visual C++程序的建立6Word下载.docx
《Visual C++程序的建立6Word下载.docx》由会员分享,可在线阅读,更多相关《Visual C++程序的建立6Word下载.docx(10页珍藏版)》请在冰豆网上搜索。
:
OnChar(UINTnChar,UINTnRepCnt,UINTnFlags)
{ CMyDoc*pDoc=GetDocument();
//获取文档类首地址指针
ASSERT_VALID(pDoc);
//测试指针
pDoc->
str+=nChar;
//读取键击
Invalidate();
//重绘视图,强制绘图
}
(4)显示文本
Invalidate()函数通过调用OnDraw()函数,强制程序重绘视图,故在View.cpp里加:
CMyView:
:
OnDraw(CDC*pDC)
{——-
pDC->
TextOut(20,20,pDoc->
str);
//在文档窗口的x=20,y=20处显示敲入的信息
}
(5)编译运行,键盘输入字符,便在窗口上显示出来。
说 明:
1、pDoc->
相当于pDoc->
str=pDoc->
str+nChar;
2、Draw函数是视图显示函数
(5)将文本居中
CWnd派生出CView,再由CView派生出CCenteredView类,该类使文本居中。
可使用CWnd的GetWindowRect()函数,得到客户区的尺寸。
CRect类用于容纳矩形的尺寸和大小,我们把CRect对象的指针传递到GetWindowRect()
函数,来获得视图的尺寸。
在OnDraw()函数里加下列代码:
voidCMyView:
OnDraw(CDC*pDC)
{ CMyDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
//pDC->
//此条语句是前面加的
CRect rect;
//CRect类用于容纳矩形的尺寸和大小
GetWindowRect(&
rect);
//得到客户区的尺寸
intx=rect.Width()/2;
//确定中心坐标x,y
inty=rect.Height()/2;
CSizesize=pDC->
GetTextExtent(pDoc->
//查明显示的文本串尺寸
x-=size.cx/2;
y-=size.cy/2;
pDC->
TextOut(x,y,pDoc->
}
(6)编译运行,键盘输入字符,便在窗口中间显示出来,如图1所示。
使用CDC类(设备环境类)的GetTextExtent()函数来决定文本串将显示在客户区的尺寸。
CSize类有2个重要的成员,cx和cy用于保留文本串的尺寸。
x,y表示窗口新的左上角坐标cx,cy表示窗口新的宽度和高度RECT结构:
typedefstructtayRECT
{ LONG left;
//左上角x坐标
LONG top;
//左上角y坐标
LONG right;
//右下角x坐标
LONG bottom;
//右下角y坐标
}RECT;
//CRect类用于容纳矩形的尺寸和大小
SIZE结构:
//窗口大小
typedefstructtagSIZE
{ intcx;
//当一个函数返回时的x范围
intcy;
//当一个函数返回时的y范围
}SIZE;
注 意:
如果要显示带颜色的字,你做如下工作:
//定义颜色变量
在View.h的public里写:
COLORREFm_pColor;
在View.cpp的构造函数里写:
m_pColor=RGB(255,0,0);
//红色
在刚加进去的pDC->
语句的前面加:
//显示红色的字体
pDC->
SetTextColor(m_pColor);
前面介绍了读取键盘的键击的编程过程,实际上,在我们创建单文档(或双文档)应用程序时,到第6步(最后一步)停住,在这个界面的最下方Baseclass处下拉,找到CEditView置好,再点Finish之后运行,在程序的文档窗口上,直接就能读取来自键盘的键击。
练习题2 向窗口中添加一个闪亮的插入符,插入符出现在文本末尾,指示下一个字符的位置;
当用户单击另一个窗口或别处时,会将焦点移向那个窗口,隐藏插入符,当鼠标回到本窗口
单击时,又获得焦点,显示插入符。
(1)建立一个单文档应用程序,名为:
插入符
(2)在文档类CMyDoc.h里加(public下面):
CStringstr;
(3)在文档类CMyDoc.cpp里的构造函数里加:
str=“”;
//置空
(4)向视图类CMyView里加映射消息OnChar()即:
WM_CHAR读取键击,并加代码:
OnChar(UINTnChar,UINTnRepCnt,UINTnFlags)
{ CMyDoc*pDoc=GetDocument();
//获得文档类指针
ASSERT_VALID(pDoc);
//测试文档指针
pDoc->
str+=nChar;
Invalidate();
}
(5)在视图类CMyView.h里加:
(可在protected下面加)
//布尔类型对象,以了解是否已创建了该插入符,boolean变量也称boolean标志,有2个值:
真和假。
boolean car;
(6)在视图类CMyView.cpp的构造函数中将car设为假:
car=false;
(7)在视图类CMyvoidCMyView:
OnDraw(CDC*pDC)加代码:
{ …………….
if(!
car)
{
TEXTMETRICtext;
//TEXTMETRIC是一个结构体,为获得插入符//的大小。
pDC->
GetTextMetrics(&
text);
//创建插入符,插入符宽度是字符宽度的1/8。
CreateSolidCaret(text.tmAveCharWidth/8,text.tmHeight);
(8)设置插入符的位置
在视图类CMyView.h的protected下写:
CPoint carep;
//点坐标对象
在视图类CMyView.cpp的OnDraw()中原有代码下添加:
carep.x=carep.y=4;
//将插入符的位置设为4
SetCaretPos(carep);
//设置插入符位置
ShowCaret();
//在屏幕上显示插入符
car=true;
//将布尔标志设为真
pDC->
TextOut(0,4,pDoc->
这时插入符便出现在屏幕上一闪一闪的,你还可以往里敲东西,但插入符不动。
(9)将插入符放在显示文本串的末尾,就必须决定文本串的末尾位置,通过GetTextExtent()来提供一个名为size的CSize对象来实现。
接着在函数OnDraw()中刚加入的代码pDCTextOut(0,4,pDocstr);
的下面写:
str);
//文本大小
//下面是在文本串末尾显示插入符,我们首先使用HideCaret()隐藏它,如果不隐藏,可能会在屏幕
//上的老位置留下插入符的映像。
接着在CSizesize=pDC->
下面写:
HideCaret();
carep.x=size.cx;
//将CPoint的x数据成员设置在屏幕上文本串的末尾。
SetCaretPos(carep);
//将插入符移向它的新位置
ShowCaret();
//重新显示它
(10)运行!
见插入符跟在文本串的后面。
(11)当用户单击另一个窗口或别处时,会将焦点移向那个窗口,应该隐藏这里的插入符,当失去或获得焦点时,隐藏或显示插入符。
1)失去焦点得到:
WM_KILLFOCUS消息
2)获得焦点得到:
WM_SETFOCUS 消息
将这2个消息分别加到CMyview视图类中去,并加代码:
OnkillFocus(Cwnd*pNewWnd)//失去焦点
{ HideCaret();
//隐藏焦点
}
CMyView:
OnSetFocus(CWnd*pOldWnd)//获得焦点
{ShowCaret();
//显示焦点
这时运行,见窗口中有插入符,但把鼠标移到窗口外面单击,插入符就没了,而再把鼠标移回窗口单击,插入符又出现了。
(12)使用鼠标
在用户区任何位置单击鼠标,就在该位置显示一插入符,并在这个新位置处绘制文本。
注:
再单击另一个位置时,将先前的文本清除掉,
1)加鼠标左键按下的映射消息WM_LBUTTONDOWN(鼠标按下,则第一个任务是存储它的位置,我们将在变量x和y中存储该位置,即(x,y),从point对象的x和y成员中获得),并加下列代码:
View:
OnLButtonDown(UINTnFlags,CPointpoint)
{x=point.x;
y=point.y;
CMyDoc*pDoc=GetDocument();
//鼠标到了新的位置,将原来的去掉,置空。
str.Empty();
//强制程序重绘视图
2)在视图类CMyView.h的保护或公共类型下加:
intx,y;
COLORREFm_pColor;
//定义颜色变量
在视图类的执行文件CMyView.cpp的构造函数中加:
m_pColor=RGB(255,0,0);
3)在视图类的执行文件CMyView.cpp的OnDraw函数中加下列代码:
{ —-
//以下是将插入符移向文本串的末尾并重新显示它
carep.x=x+size.cx;
carep.y=y;
SetCaretPos(carep);
pDC->
(13)编译运行,结果见图2、图3所示。
如果不想显示2行字符,可将OnDraw函数中前步写入的pDC->
TextOut(0,4,pDoc->
注释掉。
练习题3
制作一个每次单击窗口都出现不同鼠标光标图形(6个不同鼠标图形),而当鼠标移出窗口范围时,又变回了原来的图形,使新加入的鼠标光标移不出窗口范围的应用程序。
1、创建一个单文档的应用程序,名为:
鼠标范围
2、分别向视图类CMyView添加鼠标左键按下、抬起和鼠标移动的消息映射。
如图3所示。
3、向资源编辑器中添加6个光标资源。
Insert->
Resource->
选中Cursor->
单击Import->
在C盘上搜寻到6个.cur图形(光标资源),粘贴到某个文件夹中,同时添加到ImportResource对话框的“文件名(N)”处->
再点击Import就将这6个光标资源添加到了本项目的资源编辑器中了。
4、在视图类的头文件CMyView.h的public下加成员变量及函数:
HCURSORm_hCursor;
//用于存放光标句柄
intm_hClick;
voidLoadCur(UINTCurName);
//用于获得要显示鼠标句柄
voidGetCur(intID_NO);
//用于得到将要显示鼠标的ID
5、在视图类的执行文件CMyView.cpp中完成自定义的函数功能(全用手写)。
LoadCur(UINTCurName)
{m_hCursor=AfxGetApp()->
LoadCursor(CurName);
voidCMyView:
GetCur(intID_NO)
{ if(m_hClick>
6)
m_hClick=1;
switch(m_hClick)
{case1:
LoadCur(IDC_CURSOR1);
break;
case2:
LoadCur(IDC_CURSOR2);
case3:
LoadCur(IDC_CURSOR3);
case4:
LoadCur(IDC_CURSOR4);
case5:
LoadCur(IDC_CURSOR5);
case6:
LoadCur(IDC_CURSOR6);
6、完成鼠标放下、鼠标移动、鼠标抬起消息映射函数的实现功能
OnLButtonDown(UINTnFlags,CPointpoint)//鼠标按下
{++m_hClick;
GetCur(m_hClick);
SetCursor(m_hCursor);
RECTrect;
GetClientRect(&
ClientToScreen(&
ClipCursor(&
OnLButtonUp(UINTnFlags,CPointpoint)//鼠标抬起
{ ClipCursor(NULL);
OnMouseMove(UINTnFlags,CPointpoint)//鼠标移动
{ SetCursor(m_hCursor);
CView:
OnMouseMove(nFlags,point);
7、在视图类的执行文件CMyView.cpp的构造函数中,加代码:
CMyView:
CMyView()
{m_hClick=0;
//初始化m_hClick变量
8、编译运行,用鼠标一次一次的单击窗口,将一次一次的出现以上加入的6个不同的光标图形,而将其移到窗口外边时,它又变回了原来的图形,新加入的光标移不出窗口。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Visual C+程序的建立6 C+ 程序 建立
![提示](https://static.bdocx.com/images/bang_tan.gif)