创建文本插入符
首先创建创建一个单文档的MFC AppWizard(exe)工程,取名为Text。在文本中创建插入符,可以利用CWnd类的CreateSolidCaret()函数来完成。
为CTextView添加WM_CREATE
int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
CClientDC dc(this);
CBitmap *cb;
cb->LoadBitmap(IDB_BITMAP1);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
//CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
//ShowCaret();
CreateCaret(cb);
ShowCaret();
return 0;
}
不同的字符在窗口中显示时,其宽度可能是不同的,可以调用GetTextExtent函数来获得某个特定的字符串在窗口的显示时所占据的宽度和高度
在设备描述表中还有一个路径层的概念。在MFC中,创建路径层是利用CDC类提供的BeginPath和EndPath这两个函数来实现的,路径层可以理解成一个
裁剪区域可以理解成一个绘图区域,其大小可以由我们来控制。我们知道对单文档应用程序来说,除了标题栏,菜单啦以外,剩余的就是客户区。通常可以把客户区看做一个很大的裁剪区域,但裁剪区域也可以局限于客户区中一个很小的范围之中。例如,可以限制一个矩形区域作为裁剪区域,把以后的绘图操作仅限在这个矩阵之中。
可以利用SelectClipPath函数来根据当前设置的路径层和设备描述表中已有的裁剪区域按照一种特定的模式进行一个互操作。
BOOL SelectClipPath( int nMode );
void CTextView::OnDraw(CDC* pDC)
{
CTextDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CString str;
str="hello world";
pDC->TextOut(50,50,str);
CSize sz=pDC->GetTextExtent(str);
//CBrush brush(RGB(255,0,0));
//CBrush *pOldBrush=pDC->SelectObject(&brush);
pDC->BeginPath();
pDC->Rectangle(50,50,50+sz.cx,60+sz.cy);
pDC->EndPath();
//pDC->SelectObject(pOldBrush);
pDC->SelectClipPath(RGN_DIFF);
for(int i=0;i<300;i+=10)
{
pDC->MoveTo(0,i);
pDC->LineTo(300,i);
pDC->MoveTo(i,0);
pDC->LineTo(i,300);
}
}