对话框程序,为什么我一选中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中