首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

对话框程序,为什么小弟我一选中EDIT里面的文本后对话框就不停的闪烁

2012-03-26 
对话框程序,为什么我一选中EDIT里面的文本后对话框就不停的闪烁?RT,闪烁的时候鼠标无法点击操作与绘制有关

对话框程序,为什么我一选中EDIT里面的文本后对话框就不停的闪烁?
RT,闪烁的时候鼠标无法点击操作
与绘制有关的代码如下(分别是绘制图片背景以及设置static控件透明的代码)
BOOL CTranslate::OnEraseBkgnd(CDC* pDC)
{

CRect rect;  
GetClientRect(&rect);  
CDC dcMem;  
dcMem.CreateCompatibleDC(pDC);  
CBitmap bmpBackground;  
bmpBackground.LoadBitmap(IDB_BKG);  
BITMAP bitMap;  
bmpBackground.GetBitmap(&bitMap);  
CBitmap* pbmpOld=dcMem.SelectObject(&bmpBackground);  
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,  
bitMap.bmHeight,SRCCOPY);
return TRUE;
}

HBRUSH CTranslate::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

switch(pWnd->GetDlgCtrlID()) 

case IDC_STATICHTTP: 
case IDC_GROUPHTTP:
case IDC_GROUPTRAN:
pDC->SetBkMode(TRANSPARENT); 
pDC->SetTextColor(RGB(0,0,0)); 
return (HBRUSH)GetStockObject(HOLLOW_BRUSH); 
default: 
break; 

return hbr;
}


[解决办法]
bmpBackground应该定义为成员变量,在初始化的时候Load一次就够了;StretchBlt之后要再次调用SelectObject,选中pbmpOld;CDialog::OnCtlColor应该放到函数的最后。

不过问题似乎与上面代码无关,看看你响应了哪些消息,还有Edit控件做了哪些处理?
[解决办法]
应是OnEraseBkgnd执行实现过长,应该把
CRect rect;
GetClientRect(&rect);
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap bmpBackground;
bmpBackground.LoadBitmap(IDB_BKG);
BITMAP bitMap;
bmpBackground.GetBitmap(&bitMap);
CBitmap* pbmpOld=dcMem.SelectObject(&bmpBackground);
这些代码改一下,然后放到OnInitDialog中

热点排行