如何使从键盘输入的几个特定字符显示为特定的颜色
编号:QA004531
建立日期: 2002年1月29日 最后修改日期:2002年1月29日
所属类别:
一个初学者:
我是一个VC++初学者,在同学的介绍下来到了你们的网站,觉得你们网站对我们很有帮助,这的确是一个很好的能供我们学习参考的好场所。
我用的操作系统是Window 98,使用的编程语言是VC++6.0,在编程中遇到这样一个问题:
在利用MFC生成的基类为CRichEditView类的SDI应用程序(也就是一个多信息编辑器)中,如何使从键盘输入的几个特定字符,如:A、B、C、D显示为特定的颜色,比如蓝色。
我尝试用以下消息处理函数,但光标显示位置总不正确。
void CProgEditView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
unsigned char cKeyWord[KEYWORDNUM]={"GMFSTXYZ"};
CSize oSizeText;
CPoint oCursorPos;
CClientDC pClientDC(this);
for(int i=0;i<KEYWORDNUM;i++)
{
if(nChar==cKeyWord[i])
{
oCursorPos=GetCaretPos();
HideCaret();
pClientDC.SetTextColor(RGB(0,0,255));
pClientDC.TextOut(oCursorPos.x,oCursorPos.y,nChar);
oSizeText=pClientDC.GetTextExtent((LPCTSTR)&nChar,1);
oCursorPos.x+=oSizeText.cx;
SetCaretPos(oCursorPos);
ShowCaret();
return;
}
}
CRichEditView::OnChar(nChar, nRepCnt, nFlags);
}
回答:
你使用的是TextOut函数,虽然可以输出文字,但这种输出是一次性的,只要窗口移动、切换就会消失,你应该使用CRichEditCtrl的设置文字格式的功能。下面是需要修改的部分(没有考虑中文的情况):
if(nChar == cKeyWord[i])
{
CRichEditCtrl& pCtl = GetRichEditCtrl();
CHARFORMAT cf, cf2;
char s[2];
s[0] = cKeyWord[i];
s[1] = 0;
pCtl.GetSelectionCharFormat(cf);
cf2.cbSize = sizeof(cf2);
cf2.crTextColor = RGB(0, 0, 255);
cf2.dwMask = CFM_COLOR;
cf2.dwEffects = 0;
pCtl.SetSelectionCharFormat(cf2);
pCtl.ReplaceSel(s);
pCtl.SetSelectionCharFormat(cf);
return;
}
此问题由李海回答。
| |
|
|
| |
|
|