MFC拖动界面到屏幕外刷新的问题
我把mfc程序界面左右拖动到屏幕外,所有控件都刷没了,但是button什么的可点。 上下拖动到屏幕外时,会自动返回,且框体顶部贴着屏幕顶部, 但是拖动时没有到屏幕外的部分,给刷没了。 表现为,上半部分的控件能看见,但下半部分却没了。 最小化后却全刷好了。。。。 { CClientDC dc(this); -》 CPaintDC dc(this); CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP1); CBitmap *pOldBmp; pOldBmp = memDC.SelectObject(&bmp); BITMAP bm; bmp.GetBitmap(&bm); dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &memDC, 0, 0, SRCCOPY); memDC.SelectObject(pOldBmp); bmp.DeleteObject(); // CDialogEx::OnPaint(); }
最后那句CDialogEx::OnPaint();不用注释也可以的。
另外再请教一个问题,还是这里的代码。 我在界面上有static text,然后在OnCtlColor里设置了背景透明。所以,就出现了文字重叠的情况。 之前我是写了一个函数,传进控件的id,进行局部刷新。在没有实现不规则背景框时,是能起作用的。 但改了后,局部刷新没用了,文字一直在重叠。。。求指错
C/C++ code?123456789101112131415161718192021222324252627282930 void CLaunchDlg::RefreshControl(UINT uCtllD) { CRect rc; //GetDlgItem(uCtllD)->GetWindowRect(&rc); //CWnd* cw = GetParent(); //cw->ScreenToClient(&rc); //坐标系转换 //cw->InvalidateRect(&rc, false); GetDlgItem(uCtllD)->GetClientRect(&rc); InvalidateRect(&rc, false); //不擦除背景 UpdateWindow(); //RedrawWindow(rc); //与上面两句功能相同 } HBRUSH CLaunchDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改 DC 的任何特性 if (nCtlColor == CTLCOLOR_STATIC) { pDC->SetBkMode(TRANSPARENT); //设置背景透明,解决了刷新问题,则改回透明 //pDC->SetBkColor(RGB(0,0,0)); //设置背景为黑色,防止设置透明后上次的文本不清除,临时解决方案,不可行 pDC->SetTextColor(RGB(255,255,255)); //字体颜色设置为白色 hbr = (HBRUSH)GetStockO [1] [2] 下一页
|