注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Leo

笑:胸怀,傲:实力,才能笑傲江湖。

 
 
 

日志

 
 

C++学习——文本编程  

2012-04-12 12:42:27|  分类: 大学留笔 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

C++文本编程(wordtxt

一、新建MFC单文档工程。

二、创建编辑框:

1、创建光标插入符

CWnd::CreateSolidCaret 函数来创建。void CreateSolidCaret( int nWidth, int nHeight );原型。在View类中,没有相应WM_Create消息的函数,这个需要自己添加。

int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct) 

{

if (CView::OnCreate(lpCreateStruct) == -1)

return -1;

// TODO: Add your specialized creation code here

CreateSolidCaret(10,10);

ShowCaret();

return 0;

}

插入符的大小要根据设备描述表中字体的大小来改变,就像Word中的一样,所以需要获得设备描述表中文本的信息,调用函数:

CDC::GetTextMetrics 

BOOL GetTextMetrics( LPTEXTMETRIC lpMetrics ) const;

需要一个结构体:

lpMetricsPoints to the TEXTMETRIC structure that receives the metrics.

typedef struct tagTEXTMETRIC {  /* tm */     

int  tmHeight;     

int  tmAscent;     

int  tmDescent;     

int  tmInternalLeading;    

int  tmExternalLeading;     

int  tmAveCharWidth;     

int  tmMaxCharWidth;     

int  tmWeight;     

BYTE tmItalic;     

BYTE tmUnderlined;     

BYTE tmStruckOut;     

BYTE tmFirstChar;     

BYTE tmLastChar;     

BYTE tmDefaultChar;     

BYTE tmBreakChar;    

BYTE tmPitchAndFamily;     

BYTE tmCharSet;     

int  tmOverhang;     

int  tmDigitizedAspectX;     

int  tmDigitizedAspectY;

} TEXTMETRIC;

代码:

CClientDC dc(this);//定义DC,把当前类的指针给它,dc就获得当前类的句柄。

TEXTMETRIC tm;//结构体定义当前设备的信息。

dc.GetTextMetrics(&tm);//获得当前设备描述表的信息,把tm结构体地址给它,函数把当前设备的信息 //存储在结构体中,后面再调用。

CreateSolidCaret(tm.tmAveCharWidth/4,tm.tmHeight);

ShowCaret();

2、创建图形插入符:

CWnd::CreateCaret 

void CreateCaret( CBitmap* pBitmap );

CBitmap bmp;//局部变量,函数结束生命之后会调用析构函数销毁,所以不会看见图像。定义为成员变量

bmp.LoadBitmap(IDB_BITMAP1);

CreateCaret(&bmp);

ShowCaret();

3、在文本中输出文字:

      1void CTextView::OnDraw(CDC* pDC)//窗口发生重绘的时候,程序会调用这个函数来重绘。

{

CTextDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

CString str("LEO文本编程!");//也可以直接用“=”赋值。

pDC->TextOut(50,50,str);

}

C++学习——文本编程 - leo - Leo         C++学习——文本编程 - leo - Leo 

2、LoadString  Loads an existing CString object from a Windows resource.

加载一个已有的资源,来获取字符串。

在资源列表中,有如图的数型——字串表

str.LoadString(AFX_IDS_SCCLOSE);//加载

pDC->TextOut(50,200,str);

三、路径程概念

在一个区域内,你走过的轨迹,就是我们的路径程。

函数:

CDC::BeginPath

BOOL BeginPath( ); 打开路径程,参看MSDN解释。

四、输入字符

1、OnLButtonDown消息相应函数,来设置想要在什么位子输入,移动光标到鼠标点击的位子。用函数:SetCaretPos函数移动光标。

void CTextView::OnLButtonDown(UINT nFlags, CPoint point) 

{

// TODO: Add your message handler code here and/or call default

SetCaretPos(point);

m_strLine.Empty();

m_ptOrigin=point;

CView::OnLButtonDown(nFlags, point);

}

2、用消息相应函数:OnChar,来接收用户输入的内容。用if判断,注意ASSIC码表的表值来判断。

void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 

处理回车:

if(0x0d==nChar)

{

m_strLine.Empty();

m_ptOrigin.y+=tm.tmHeight;

}

处理退格:

if(0x08==nChar)

{

COLORREF clr=dc.SetTextColor(dc.GetBkColor());

dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);

m_strLine=m_strLine.Left(m_strLine.GetLength()-1);

dc.SetTextColor(clr);

}

  设置字体格式颜色:

CClientDC dc(this);//得到设备描述表

CFont font;//定义字体变量

font.CreatePointFont(300,"华文行楷",NULL);//创建样式

CFont *pOldFont=dc.SelectObject(&font);//把字体选入到设备描述表中。返回先前字体的指针,保存下来,然后在最后选择回去。

 

C++学习——文本编程 - leo - Leo

 

  评论这张
 
阅读(464)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017