输出汉字的时候出现闪烁的问题 我是用CDC::TEXTOUT输出汉字,在ONCHAR中接受到字符后,在相应的位置InvalidateRect(),在ONDRAW中先画整个背景,再在相应的位置输出ONCHAR中得到的字符,在输出英文和标点的时候很正常,但是输入汉字就回出现闪烁,奇怪的是,我使用 SENDMESSAGE(WM_CHAR,汉字,0)却没有出现闪烁的现象,请高手指教, 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 输入汉字的时候不可能一次一个键输入,每次击键都会引发ONCHAR而导致InvalidateRect,所以会有闪烁!呵呵 输入汉字的时候不是每次都引发ONCHAR的,使用输入法,输入几个汉字就会引发几次ONCHAR,重画背景是为了擦除原来的汉字ONDRAW代码如下:先用IPICTURE接口输出背景,然后输出文字pDC->SetBkMode(TRANSPARENT); int iDoclen=GetDocument()->Curpage->csWords.GetLength(); if(iDoclen>0) { CPoint Wordpos; for(i=0;i<iDoclen;i++) { Wordpos=GetDocument()->Curpage->m_Wordpos.GetAt(i); CString tempstr=GetDocument()->Curpage->csWords.GetAt(i); if(0x0D==tempstr) continue; pDC->TextOut(Wordpos.x+left,Wordpos.y-lTextHeight-m_Bottomblank,tempstr); /*CRect rect; rect.left=Wordpos.x+left;rect.top=Wordpos.y-lTextHeight-m_Bottomblank; rect.right=Wordpos.x+left+16;rect.right=Wordpos.y-m_Bottomblank; pDC->DrawText(tempstr,rect,DT_BOTTOM);*/ } } 应该重画,不然最小后在打开不是就都没有了吗?我觉得闪烁不是效率的问题,因为使用SENDMESSAGE输入汉字也要调用这段代码来显示汉字,没有闪烁 TextOut的时候不需要重画。即在WM_CHAR消息处理的时候不需要InvalidateRect。关于输入的字符可以保存在一个全局变量中,每次添加,不需要计算位置。如果是使用DrawText那么可以使用GetTextExtentPoint32获得字体的高度和宽度,然后计算!具体的参考MSDN。 为什么不需要INVALIDATERECT呢,难道更新整个VIEW,那样闪的更严重了, MFC半透明窗口的问题 OnDraw的问题 位图数据读取问题 ICO格式图片的缩略图显示问题 分别在Debug和release模式编译的程序区别这么大 为什么无法包含gl/glut.h? 用MFC ODBC开发的基于SQL2000的数据库管理程序的安装程序制作问题? 硬盘的C区读不出来,下载了easyRecovery来恢复却不好用,还有啥好方法或好软件,请帮忙提供一下下载网址或软件名供搜索用 有关BCB中DCOM编程中STUB/PROXY的问题 - 请大家讨嫩讨嫩! 關於ActiveX控件在VB下面使用的一個問題 这是什么异常? 搞过数据包分段再重组的达人进(300分)
先用IPICTURE接口输出背景,然后输出文字pDC->SetBkMode(TRANSPARENT);
int iDoclen=GetDocument()->Curpage->csWords.GetLength();
if(iDoclen>0)
{
CPoint Wordpos; for(i=0;i<iDoclen;i++)
{
Wordpos=GetDocument()->Curpage->m_Wordpos.GetAt(i);
CString tempstr=GetDocument()->Curpage->csWords.GetAt(i);
if(0x0D==tempstr) continue;
pDC->TextOut(Wordpos.x+left,Wordpos.y-lTextHeight-m_Bottomblank,tempstr);
/*CRect rect;
rect.left=Wordpos.x+left;rect.top=Wordpos.y-lTextHeight-m_Bottomblank;
rect.right=Wordpos.x+left+16;rect.right=Wordpos.y-m_Bottomblank;
pDC->DrawText(tempstr,rect,DT_BOTTOM);*/
}
}