1. 如何创建光标显示在view类中
1.1 创建OnCreate函数,在view类上右键>>属性,然后在选择WM消息中的OnCreate
1.2, 在Oncreate中添加如下代码(详细见代码及注释,取消代码中的注释以打开功能即可)
int CxxxxView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 在此添加您专用的创建代码
/*一般字体的插入符 的创建
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);//获取字信息
CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);//创建插入符,除8是调试值,使得宽度符合视觉要求,读者可以更改看效果。
ShowCaret();//显示插入符
*/
/*创建图形插入符
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
bitmap.LoadBitmapW(IDB_BITMAP1);//位图的创建:在资源视图/Bitmap下,右键创建即可。
CreateCaret(&bitmap);
ShowCaret();
*/
return 0;
}
2. 向View窗口输出文字,当移动窗口的时候需要重新显示文字,所以要用到OnDraw消息处理函数。每次窗体的改变都会调OnDraw,添加如下代码
void CxxxxView::OnDraw(CDC* pDC)
{
CSunXinjiaocheng05Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
//CString str("DengYou");//直接用字符串去构造也可以
CString str;
str = "xxxxxyyyyy";//因为其重载了=号.
pDC->TextOutW(50,50,str);
str.LoadStringW(IDS_DDDYYY);//使用资源视图>>String Table 里面的字符串,读者自己可以去创建
pDC->TextOutW(200,200,str);
}
3.路径层和剪切区域,实现某部分文字不被其他(线条,颜色等)覆盖,让某部分文字显示不一样。查看如下代码注释。
void CxxxxView::OnDraw(CDC* pDC)
{
CSunXinjiaocheng05Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
//CString str("DengYou");//直接用字符串去构造也可以
CString str;
str = "xxxxxyyyyy";//因为其重载了=号.
pDC->TextOutW(50,50,str);
str.LoadStringW(IDS_DDDYYY);//使用资源视图>>String Table 里面的字符串,读者自己可以去创建
pDC->TextOutW(200,200,str);
//路劲层 类似选定区域
CSize cz = pDC->GetTextExtent(str);//获取字符的宽度和高度
pDC->BeginPath();//注释掉这个对成句,则可以看到矩形框
pDC->Rectangle(0,50,50+cz.cx,50+cz.cy);
pDC->EndPath();
//pDC->SelectClipPath(RGN_DIFF);//文字部分无网格线条
pDC->SelectClipPath(RGN_AND);//只有文字上有网格线条
for (int i = 0; i < 300; i += 10)//画网格 造中间留10个像素的网格,发现文字都在网格里
{
pDC->MoveTo(0,i);
pDC->LineTo(300,i);
pDC->MoveTo(i,0);
pDC->LineTo(i,300);
}
}
4.字符输入的功能,键盘输入字符显示到窗口上,删除,换行,字体,光标移动 模拟KALAOK字幕变色,创建定时器 等 。
4.1 首先要捕获键盘按下的消息WM_CHAR消息。增加一个WM_CHAR消息,选择后会自动生成OnChar处理函数