文本编程

加入插入符

CWnd::CreateSolidCaret

void CreateSolideCaret(int nWidth,int nHeight);

需调用ShowCaret()成员函数

CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);

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

ShowCaret();

此程序在CWnd::OnCreate函数中使用(OnCreate函数,框架调用该成员函数,当应用程序请求Create或CreateEx成员函数来创建窗口)

---------------------------------------------------------------------------------------------------------------------------------------------------

图形插入符,即使用图形作为插入符


int CtextView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);

bitmap.LoadBitmap(IDB_BITMAP1); //CBitmap bitmap定义到头文件中为全局类对象
CreateCaret(&bitmap);
ShowCaret();
return 0;
}


-----------------------------------------------------------------------------------------------------------------------------------------------------


CView类中有OnDraw(CDC *pDC)函数,在窗口发生重绘,被应用程序框架类调用,文字和图形在窗口中始终看到,在此函数中处理


输出文字 CString类  无基类

pDC->TextOut(50,50,str)    pDC有一个文字输出函数TextOut(nWidth,nHeight,字符对象)


void CtextView::OnDraw(CDC* pDC/*pDC*/)
{
CtextDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;


//CString str("UESTC"); 或者直接这样写,因为CString重载了“=”运算符
CString str;
str = "UESTC";
pDC->TextOut(50, 50, str); //使用pDC成员函数进行字符串输出


str.LoadString(IDS_UESTC); //使用CString类成员函数加载字符表ID
pDC->TextOutW(0, 200, str);

}


CString类中还有LoadString(ID)函数

在资源视图中添加字符ID

然后定义CString str对象

调用str.LoadString(ID)

pDC->TextOut(0,200,str)输出

---------------------------------------------------------------------------------------------------------------------------------------------------------------

路径层

设置路径层使其与其他有不同效果

CDC::BeginPath (BOOL型返回,打开路径层要用EndPath关闭)

CDC::GetTextExtent(传递一个字符串进来)  返回CSize(此为一个结构体,里面存储的是对象.cx和对象.cy)对象

用这个函数获取字符串在屏幕上的宽度和高度

void CtextView::OnDraw(CDC* pDC/*pDC*/)
{
CtextDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;


CString str;
str = "UESTC";
pDC->TextOut(50, 50, str);
CSize sz = pDC->GetTextExtent(str); //定义CSize对象来获取类对象存储的字符串的宽度和高度

str.LoadString(IDS_UESTC);
pDC->TextOutW(0, 200, str);

pDC->BeginPath();
pDC->Rectangle(50, 50, 50 + sz.cx, 50 + sz.cy); //在字符串所在位置画一个矩形
pDC->EndPath();
pDC->SelectClipPath(RGN_DIFF);       //此成员函数用于剪辑区域路径层

}


-------------------------------------------------------------------------------------------------------------------------------------------------

字符输入   增加WM_CHAR消息 ,再增加一个成员变量m_strLine并初始化为空

SetCaretPos(point)插入符跟随鼠标移动

void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);
TEXTMETRIC tm; //定义一个TEXTMETRIC类变量
dc.GetTextMetrics(&tm); //获取当前文字的指标
if (0x0d == nChar)
{ //回车处理
m_strLine.Empty(); //设置时为空
m_ptOrigin.y += tm.tmHeight;
}
else 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);
}
else
{
m_strLine = m_strLine + nChar; //直接输出,每次从原点输出
}
CSize sz = dc.GetTextExtent(m_strLine); //获取输入的字符长度和宽度


CPoint pt;
pt.x = m_ptOrigin.x + sz.cx; //每次输出从原点输出,一次性输出
pt.y = m_ptOrigin.y; //高度不变


SetCaretPos(pt); //插入符跟随鼠标移动
dc.TextOut(m_ptOrigin.x, m_ptOrigin.y, m_strLine); //输出


CView::OnChar(nChar, nRepCnt, nFlags);
}

----------------------------------------------------------------------------------------------------------------------------------------------------------------

void CtextView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
SetCaretPos(point);  //插入符跟随鼠标移动
m_strLine.Empty(); //使成员变量存储的值为空
m_ptOrigin = point; //每次输出从原点输出,每次开始默认在原点位置


CView::OnLButtonDown(nFlags, point);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值