我做了个activex控件,这个控件里由3个窗口组成,整个control的OnDraw里我什么都没做,只在每个子窗口(从CWindowImpl派生的)的OnPaint里绘画内容,在这些OnPaint函数里我画的方法都是创建另一个dc,在它上面画好后copy回当前dc,
LRESULT
CMyWindow::OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
CPaintDC dc(m_hWnd);
CDC dcMem;
dcMem.CreateCompatibleDC(dc);
CBitmap bitmap;
CBitmapHandle pOldBitmap;
bitmap.CreateCompatibleBitmap(dc, rcClient.Width(), rcClient.Height());
pOldBitmap = dcMem.SelectBitmap(bitmap);
//
// 作图
//
dc.BitBlt(0, 0, rcClient.Width(), rcClient.Height(), dcMem, 0, 0, SRCCOPY);
dcMem.SelectBitmap(pOldBitmap);
bHandled = false;
return 0;
}
不明白为什么闪烁,在公司液晶显示器上好像还没这问题,回家看CRT显示器发现怎么闪的那么厉害,请高手指点,不胜感激
LRESULT
CMyWindow::OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
CPaintDC dc(m_hWnd);
CDC dcMem;
dcMem.CreateCompatibleDC(dc);
CBitmap bitmap;
CBitmapHandle pOldBitmap;
bitmap.CreateCompatibleBitmap(dc, rcClient.Width(), rcClient.Height());
pOldBitmap = dcMem.SelectBitmap(bitmap);
//
// 作图
//
dc.BitBlt(0, 0, rcClient.Width(), rcClient.Height(), dcMem, 0, 0, SRCCOPY);
dcMem.SelectBitmap(pOldBitmap);
bHandled = false;
return 0;
}
不明白为什么闪烁,在公司液晶显示器上好像还没这问题,回家看CRT显示器发现怎么闪的那么厉害,请高手指点,不胜感激
中返回一个空画刷
{
// TODO : Add Code for message handler. Call DefWindowProc if necessary.
return 0;
}怎么返回啊?
{
// TODO : Add Code for message handler. Call DefWindowProc if necessary.
return 1;
}把0改成1背景就不会自动擦除了。你先试试吧,也可能问题没有出在这里呢。
你可以改为从CWnd继承,就ok了!
class CMyWindow: public CWnd
{
};
祝你好运!