热情软件屋

 

如何使从键盘输入的几个特定字符显示为特定的颜色


编号: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;
    
}
    

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio