WM_CHAR的处理函数中刷新屏幕,太频繁,屏幕闪烁,怎么解决呀! WM_CHAR的处理函数中刷新屏幕,太频繁,屏幕闪烁,怎么解决呀!我试了先用内存DC画,再画到屏幕,但是还是闪,怎么办? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我做的是编辑器控件,类似CEdit,从CWnd继承。因为WM_CHAR是输入了字符,要在屏幕上显示输入的字符,而字符的绘制在OnPaint中,所以在WM_CHAR的处理函数中 Invalidate(FALSE);; 我做的是编辑器控件,类似CEdit,从CWnd继承。因为WM_CHAR是输入了字符,要在屏幕上显示输入的字符,而字符的绘制在OnPaint中,所以在WM_CHAR的处理函数中 Invalidate(FALSE);;(上面一次回复引用错了==) InvalidateRect 用这个试试 1、我觉得直接从CEdit继承或许简单些。2、如果非得从CWnd继承,你可以找找类似的开源码,研究一下 一个在view类中编辑的,很简洁的,可以参考参考下,教程的源码void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: Add your message handler code here and/or call default CClientDC dc(this); CFont font; font.CreatePointFont(300,"华文行楷",NULL); CFont *pOldFont=dc.SelectObject(&font); TEXTMETRIC tm; dc.GetTextMetrics(&tm); if(0x0d==nChar) { m_strLine.Empty(); m_ptOrigin.y+=tm.tmHeight; } else if(0x08==nChar) { COLORREF clr=dc.SetTextColor(dc.GetBkColor()); dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine); m_strLine=m_strLine.Left(m_strLine.GetLength()-1); dc.SetTextColor(clr); } else { m_strLine+=nChar; } CSize sz=dc.GetTextExtent(m_strLine); CPoint pt; pt.x=m_ptOrigin.x+sz.cx; pt.y=m_ptOrigin.y; SetCaretPos(pt); dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine); dc.SelectObject(pOldFont); CView::OnChar(nChar, nRepCnt, nFlags);} 你有完整的源码吗?给个链接我去下载吧,我QQ806756448;我试了下代码中的方法,在OnChar中直接绘制文字,结果没有绘制出来!== 不知道为什么,代码跟在OnPaint中绘制一样的。开始我以为是窗口不刷新OnChar中的绘制就不被执行,但貌似不是因为这个 你有完整的源码吗?给个链接我去下载吧,我QQ806756448;我试了下代码中的方法,在OnChar中直接绘制文字,结果没有绘制出来!== 不知道为什么,代码跟在OnPaint中绘制一样的。开始我以为是窗口不刷新OnChar中的绘制就不被执行,但貌似不是因为这个 CArchive类的声明中,friend CArchive& AFXAPI operator<<为什么要用友元? 福州急聘VC熟练高级软件工程师 问个简单的问题 再问关于cab文件的问题 为什么有的时候在对话框的建立类向导中找不到我添加的Edit按纽?我要用class wizard 给按钮添加变量该怎么办?? 想了解INF文件的内容 如何让cedit垂直滚动到最下面一行? 初学者的困惑!请帮忙! 写注册表问题:我的代码这样写,为什么说CRegKey未定义? 有关在SDI中用代码创建CMSComm 的实例的问题 wtl关联窗口的问题 ODBC中2个字段加减
我做的是编辑器控件,类似CEdit,从CWnd继承。因为WM_CHAR是输入了字符,要在屏幕上显示输入的字符,而字符的绘制在OnPaint中,所以在WM_CHAR的处理函数中 Invalidate(FALSE);;
(上面一次回复引用错了==)
2、如果非得从CWnd继承,你可以找找类似的开源码,研究一下
void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
CFont font;
font.CreatePointFont(300,"华文行楷",NULL);
CFont *pOldFont=dc.SelectObject(&font);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
if(0x0d==nChar)
{
m_strLine.Empty();
m_ptOrigin.y+=tm.tmHeight;
}
else if(0x08==nChar)
{
COLORREF clr=dc.SetTextColor(dc.GetBkColor());
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
m_strLine=m_strLine.Left(m_strLine.GetLength()-1);
dc.SetTextColor(clr);
}
else
{
m_strLine+=nChar;
}
CSize sz=dc.GetTextExtent(m_strLine); CPoint pt;
pt.x=m_ptOrigin.x+sz.cx;
pt.y=m_ptOrigin.y; SetCaretPos(pt);
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine); dc.SelectObject(pOldFont); CView::OnChar(nChar, nRepCnt, nFlags);
}
你有完整的源码吗?给个链接我去下载吧,我QQ806756448;我试了下代码中的方法,在OnChar中直接绘制文字,结果没有绘制出来!== 不知道为什么,代码跟在OnPaint中绘制一样的。开始我以为是窗口不刷新OnChar中的绘制就不被执行,但貌似不是因为这个