大哥请帮小弟一下:
我想编一个打字软件,当用户输入错的字符的时候,就会用几它的颜色显示,但我有一个问题!
代码如下:
我自己派生了一个CRichEditCtrl(myRichEdit)
并定义了一个消息响应函数(代码如下):
void myRichEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
static int i;
m_CompareChar=nChar;
m_temp+=m_CompareChar;
//选取当前输入的字符
SetSel(m_StrAt,m_StrAt);
//判断输入是否正确!
if(m_CompareChar==GetParent()->m_str[i]->GetAt(m_StrAt++))
{
SetFontColor();//默认为黑色
/////////////////////定义如下:
void myRichEdit::SetFontColor(COLORREF m_color)
{
CHARFORMAT cf;
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_COLOR | CFM_UNDERLINE |CFM_BOLD;
cf.dwEffects =(unsigned long) ~( CFE_AUTOCOLOR | CFE_UNDERLINE | CFE_BOLD);
cf.crTextColor=m_color;
SetWordCharFormat(cf);
}
//////////////////////////////
}
else
{
SetFontColor(RGB(255,0,0));
}
//换行
if(GetParent()->m_str[i]->GetLength()>=93 )
i++;
CRichEditCtrl::OnChar(nChar, nRepCnt, nFlags);
}一开始我在对话框中定义一个CEdit控件,然后通过SubclassDlgItem()相捆绑,
,当用户输入错误的字符时,结果如人所愿!但我在对话框中动态生成10个myRichEdit时:
for(int i=0;i<10;i++)
{
myedit[i]->SubclassDlgItem(m_IDCr[i],this);
}
/////////////////////
UINT m_IDCr[10]={IDC_EDIT1,IDC_EDIT2,IDC_EDIT3,IDC_EDIT4,IDC_EDIT5
,IDC_EDIT6,IDC_EDIT7,IDC_EDIT8,IDC_EDIT9,IDC_EDIT10};
for(int i=0;i<10;i++)
{
myRedit=new myRichEdit;
myedit[i]=myRedit;
myRedit=NULL;
delete myRedit;
}
/////////////////////
当用户输入错误的字符时,结果就是没有改变字体的颜色,我想其原因就是没有选择字体。
我想编一个打字软件,当用户输入错的字符的时候,就会用几它的颜色显示,但我有一个问题!
代码如下:
我自己派生了一个CRichEditCtrl(myRichEdit)
并定义了一个消息响应函数(代码如下):
void myRichEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
static int i;
m_CompareChar=nChar;
m_temp+=m_CompareChar;
//选取当前输入的字符
SetSel(m_StrAt,m_StrAt);
//判断输入是否正确!
if(m_CompareChar==GetParent()->m_str[i]->GetAt(m_StrAt++))
{
SetFontColor();//默认为黑色
/////////////////////定义如下:
void myRichEdit::SetFontColor(COLORREF m_color)
{
CHARFORMAT cf;
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_COLOR | CFM_UNDERLINE |CFM_BOLD;
cf.dwEffects =(unsigned long) ~( CFE_AUTOCOLOR | CFE_UNDERLINE | CFE_BOLD);
cf.crTextColor=m_color;
SetWordCharFormat(cf);
}
//////////////////////////////
}
else
{
SetFontColor(RGB(255,0,0));
}
//换行
if(GetParent()->m_str[i]->GetLength()>=93 )
i++;
CRichEditCtrl::OnChar(nChar, nRepCnt, nFlags);
}一开始我在对话框中定义一个CEdit控件,然后通过SubclassDlgItem()相捆绑,
,当用户输入错误的字符时,结果如人所愿!但我在对话框中动态生成10个myRichEdit时:
for(int i=0;i<10;i++)
{
myedit[i]->SubclassDlgItem(m_IDCr[i],this);
}
/////////////////////
UINT m_IDCr[10]={IDC_EDIT1,IDC_EDIT2,IDC_EDIT3,IDC_EDIT4,IDC_EDIT5
,IDC_EDIT6,IDC_EDIT7,IDC_EDIT8,IDC_EDIT9,IDC_EDIT10};
for(int i=0;i<10;i++)
{
myRedit=new myRichEdit;
myedit[i]=myRedit;
myRedit=NULL;
delete myRedit;
}
/////////////////////
当用户输入错误的字符时,结果就是没有改变字体的颜色,我想其原因就是没有选择字体。
解决方案 »
- 有关缓冲区的问题
- 问注册表与组策略的问题
- 菜鸟问题
- 使用ado操作access数据库,无法执行cn.excute
- 超级菜鸟一问
- 一个HTTP协议的初级问题,进来有分!!!
- 各位大虾,listctrl无法显示图标?
- 我想结合主域服务器的组、用户等,一句话,就是能用API完成域用户管理器的工作,是不是很复杂呢?另外,我是针对NT4,并不是对于WIN2000(因为WIN2000可以用ADSI),怎么办呢?C++的高手们可以写一段程序给我学习吗?急死人了!!!
- 关于VC++与USB接口的设备通讯的问题
- MFC多文档应用程序中嵌入cef3,启动时一次性启了三个多文档主程序
- 一个link问题
- 请问怎么在非MFC程序中使用MFC中的类比如CRect,CPoint等等。
//##以下摘自MSDN// The pointer to my rich edit control.
extern CRichEditCtrl* pmyRichEditCtrl;
// A pointer to a printer DC.
extern CDC* pMyPrinterDC;FORMATRANGE fr;// Get the page width and height from the printer.
long lPageWidth = ::MulDiv(pMyPrinterDC->GetDeviceCaps(PHYSICALWIDTH),
1440, pMyPrinterDC->GetDeviceCaps(LOGPIXELSX));
long lPageHeight = ::MulDiv(pMyPrinterDC->GetDeviceCaps(PHYSICALHEIGHT),
1440, pMyPrinterDC->GetDeviceCaps(LOGPIXELSY));
CRect rcPage(0, 0, lPageWidth, lPageHeight);// Format the text and render it to the printer.
fr.hdc = pMyPrinterDC->m_hDC;
fr.hdcTarget = pMyPrinterDC->m_hDC;
fr.rc = rcPage;
fr.rcPage = rcPage;
fr.chrg.cpMin = 0;
fr.chrg.cpMax = -1;
pmyRichEditCtrl->FormatRange(&fr, TRUE);// Update the display with the new formatting.
RECT rcClient;
pmyRichEditCtrl->GetClientRect(&rcClient);
pmyRichEditCtrl->DisplayBand(&rcClient);
http://www.codeproject.com/editctrl/crysedit.asp
小弟愚昧:看不明?
我的目的就是:用户每输入一个字母,就会触发OnChar(),并选择当前用户输入的字母,然后判断,如果跟给出的字母不同,就用别的颜色显示.Hankuu():
可不可解释一下之种现象?
我试过了,把程序改为如下:
void myRichEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
//选取当前输入的字符
SetSel(m_StrAt,m_StrAt++);
SetFontColor(RGB(255,0,0));
CRichEditCtrl::OnChar(nChar, nRepCnt, nFlags);
}
还是一样字符没有改变颜色!!
[email protected]
{
myRedit=new myRichEdit;
myedit[i]=myRedit;
myRedit=NULL;
delete myRedit; //你这里都释放了,以后还怎么
SubClassDlgItem啊?
}
{
myRedit=new myRichEdit;
myedit[i]=myRedit;
myRedit=NULL;
delete myRedit;
}
这段代码明显有问题,创建一个新的myRichEdit实例后,但是又把它释放掉了,myedit[i]指向何处???以后怎用SubClassDlgItem捆绑???无法与父窗口进行关联捆绑即使在编辑窗口内输入字体,也不会响应你自定义的消息
(愚见)
把最后两行注释掉看看
snoopyhap:
两位:
但我的程序编释通过,并且可以运行(应响 myRichEdit的OnChar()函数,但不能改变颜色),我在调试的时候,当我输入字符时,
是可以应响 myRichEdit的OnChar()函数那是否可以证明SubClassDlgItem可以绑定呢?