频繁更新(1/100秒)文本框内容闪烁 用定时器每1/100秒改变一次文本框的内容,出现闪烁现象,有什么办法可以解决闪烁? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我试了下没有闪烁 SetTimer(1, 10);不过如果你觉得有闪烁可以把时间再调短点 关于闪烁,我曾经详细回答过,实现懒得再打一遍了,可以搜搜我近几个月的贴子。闪烁和刷新的频率没关系,你一秒刷新1万次,该不闪也不闪,如果你绘制的不对,你一秒一次,也会闪,默认的CStatic,你1/100秒重设文本(SetWindowText)是会闪的,解决方案只有一个:重绘CStatic,然后把erase background消息直接return TRUE。然后在OnPaint中TextOut你GetWindowText出来的文字。这样, 你一秒刷新一万次也不会闪。祝你好运。 闪烁还有其他问题的, 对于edit。。 第一是你的edit有焦点, 即有光标在里面的, 这样, 每次替换光标又从头开始, 这样必然闪烁。 第二就是把你的edit焦点设为父窗体。 第三就是重载edit, 在OnEraseBkgnd(CDC* pDC), return true。 这个你可能觉得老套, 但这里还真是必须的。 我用edit做的output窗口 就不会闪烁, 和vs的效果一样, 除了人家不是一直置底。 没必要,用两 Timer ,一个负责在后面写数据,不显示,可以1/100秒写一次;一个用于显示,1秒刷新一次(精确到秒),然后停止计时时,把最后的数据直接显示到控件中就可以了 重载了EDIT,OnEraseBkgnd(CDC* pDC),return true, 闪烁变得不那么明显,但还是有一点,然后重写OnPaint函数如下,不闪烁了,但为什么使用内存DC输出文本时候,字体设置总是无效??void CMyEdit::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here CFont font; // 字体 VERIFY(font.CreateFont( 78, // nHeight 0, // nWidth 0, // nEscapement 0, // nOrientation FW_BOLD, // nWeight FALSE, // bItalic FALSE, // bUnderline 0, // cStrikeOut ANSI_CHARSET, // nCharSet OUT_DEFAULT_PRECIS, // nOutPrecision CLIP_DEFAULT_PRECIS, // nClipPrecision DEFAULT_QUALITY, // nQuality DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily _T("Arial"))); // lpszFacename CRect rc;//对话框rc ::GetClientRect(this->m_hWnd,&rc); HDC hMemDC = ::CreateCompatibleDC(dc);//建立内存dc HBITMAP hMemBitMap=::CreateCompatibleBitmap( dc, rc.right-rc.left , rc.bottom-rc.top ); ::SelectObject(hMemDC , hMemBitMap); CFont * pOldFont = (CFont *)SelectObject(hMemDC,&font); CString strText; GetWindowText(strText); ::SetTextColor(hMemDC, RGB(0,255,0)); ::SetBkColor(hMemDC, RGB(0,0,0)); ::DrawText(hMemDC,strText, -1, &rc ,DT_CENTER |DT_VCENTER); ::SelectObject(hMemDC, pOldFont); ::BitBlt(dc,rc.left, rc.top, rc.right-rc.left ,rc.bottom-rc.top ,hMemDC, rc.left, rc.top, SRCCOPY); ::DeleteObject(hMemBitMap); ::DeleteDC(hMemDC); // Do not call CEdit::OnPaint() for painting messages} MFC单文档问题 请问OpenGL怎么在程序里设置几倍反锯齿? 救急,怎么样使得最前面的模式对话框的获取焦点. 如何获得SPLASH WINDOWS的句柄??? 急问一个给VC界面控件添加变量的问题,在线等 棘手问题:新增加unsigned char[3]作为类公共成员变量,该类无法实例化!实例化即出错!详细: 请问我想做一个安装程序,有什么资料吗? 求救!关于DLL,debug版本正常,release版本出错 MFC嵌入Web browser,获取网页表格内容与超链接,求助 求助!!! 播放网络电台的问题??????????? 向大家请教关于vc下文件加密的事情
第二就是把你的edit焦点设为父窗体。
第三就是重载edit, 在OnEraseBkgnd(CDC* pDC), return true。 这个你可能觉得老套, 但这里还真是必须的。 我用edit做的output窗口 就不会闪烁, 和vs的效果一样, 除了人家不是一直置底。
void CMyEdit::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CFont font;
// 字体
VERIFY(font.CreateFont(
78, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_BOLD, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T("Arial"))); // lpszFacename CRect rc;//对话框rc
::GetClientRect(this->m_hWnd,&rc);
HDC hMemDC = ::CreateCompatibleDC(dc);//建立内存dc
HBITMAP hMemBitMap=::CreateCompatibleBitmap( dc, rc.right-rc.left , rc.bottom-rc.top );
::SelectObject(hMemDC , hMemBitMap);
CFont * pOldFont = (CFont *)SelectObject(hMemDC,&font);
CString strText;
GetWindowText(strText); ::SetTextColor(hMemDC, RGB(0,255,0));
::SetBkColor(hMemDC, RGB(0,0,0));
::DrawText(hMemDC,strText, -1, &rc ,DT_CENTER |DT_VCENTER);
::SelectObject(hMemDC, pOldFont);
::BitBlt(dc,rc.left, rc.top, rc.right-rc.left ,rc.bottom-rc.top ,hMemDC, rc.left, rc.top, SRCCOPY);
::DeleteObject(hMemBitMap);
::DeleteDC(hMemDC); // Do not call CEdit::OnPaint() for painting messages
}