当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>Visual C++教程

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操作系统是通过格式化的消息在应用程序中通信的,每个事件发生后,Windows就将它转化为一条消息,判断这条消息应该由哪个窗口来处理,然后将该消息发往该窗口,并交由该窗口的拥有程序去处理,这就是Windows的消息处理机制。

    程序编写步骤:

    (1)建一个单文档应用程序,名为:键盘输入

    (2)为键盘数据建立存储

    在文档类CMyDoc.h文件的public下写:

    CString str;  //定义字符串对象

    在文档类CMyDoc.cpp的构造函数里写:

    str=“  ”;  //将字符串对象置为空

    当用户键入每个键时,就把它们送到str中

    (3)读取键击

    当用户键入一个键时,Windows将会发送给我们一个WM_CHAR消息,把这个消息连到视图类(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(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()函数里加下列代码:

 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-=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;//右下角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);

    前面介绍了读取键盘的键击的编程过程,实际上,在我们创建单文档(或双文档)应用程序时,到第6步(最后一步)停住,在这个界面的最下方Base class处下拉,找到CEditView置好,再点Finish之后运行,在程序的文档窗口上,直接就能读取来自键盘的键击。

    练习题2  向窗口中添加一个闪亮的插入符,插入符出现在文本末尾,指示下一个字符的位置;

    当用户单击另一个窗口或别处时,会将焦点移向那个窗口,隐藏插入符,当鼠标回到本窗口

    单击时,又获得焦点,显示插入符。

    (1)建立一个单文档应用程序,名为:插入符

    (2)在文档类CMyDoc.h里加(public下面):CString str;

    (3)在文档类CMyDoc.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变量也称boolean标志,有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);

 

共3页 首页 上一页 1 2 3 下一页 尾页 跳转到
相关内容
赞助商链接