Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4471052
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: C/C++

2011-07-08 08:08:06

工程代码: page135.rar  

    在程序中想要创建插入符,利用CWnd类的 CreateSolidCaret 函数来完成。
    void CreateSolidCaret(int nWidth, int nHeight);
    nWidth: 指定插入符的宽度(逻辑单位)。如果参数值=0,那么系统将其设置为系统定义的窗口边界的宽度
    nHeight: 指定插入符的高度(逻辑单位)。如果参数值=0,那么系统将其设置为系统定义的窗口边界的高度
 
     建立 MFC exe 文件  

    插入符需要在窗口上创建,单文档类型的工程有两个窗口,即框架类窗口和视类窗口。 视类窗口始终位于框架类窗口之上,对窗口客户区的鼠标和键盘操作实际上都是在视类窗口上进行的,因此在view视类窗口上创建插入符


     插入符的创建应该在窗口创建之后进行,可以再 VM_CREATE消息的响应函数OnCreate中(在创建窗口的代码之后)添加创建插入符的代码。我们为CTextView类添加VM_CREATE消息的响应函数,然后在此函数中创建应该宽度为20、高度为100的插入符。

添加 OnCreate 响应函数
   

  1. /////////////////////////////////////////////////////////////////////////////
  2. // CTextView message handlers

  3. int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct)
  4. {
  5.     if (CView::OnCreate(lpCreateStruct) == -1)
  6.         return -1;
  7.     
  8.     // TODO: Add your specialized creation code here
  9.     CreateSolidCaret(20,100);
  10.     //显示 光标
  11.     ShowCaret();
  12.     return 0;
  13. }




    对Text程序来说,如何才能够让插入符适合于当前字体的大小??首先我们需要得到设备描述表中当前字体的信息,也就是文本的信息,然后根据字体的信息来调整插入符的大小。

    调用CDC类的GetTextMetrics 成员函数可以得到设备描述表中当前字体的度量信息。

    BOOL GetTextMetrics(LPTEXTMETRIC lpMetics) const;

  1. /////////////////////////////////////////////////////////////////////////////
  2. // CTextView message handlers

  3. int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct)
  4. {
  5.     if (CView::OnCreate(lpCreateStruct) == -1)
  6.         return -1;
  7.     
  8.     // TODO: Add your specialized creation code here
  9.     //创建设备描述表
  10.     CClientDC dc(this);
  11.     //定义文本信息结构体变量
  12.     TEXTMETRIC tm;
  13.     //获得设备描述表中的文本信息
  14.     dc.GetTextMetrics(&tm);
  15.     //根据字体大小,创建合适的插入符
  16.     CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
  17.      //宽度/8 这是一个经验值,可以试试其他数值
  18.     //显示插入符
  19.     ShowCaret();
  20.     return 0;
  21. }


  





阅读(1790) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~