关于网友提出的“ VIEW中防闪烁”问题疑问,本网通过在网上对“ VIEW中防闪烁”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: VIEW中防闪烁
描述: 建立了一个LoadBmp的工程
CLoadBmpView::CLoadBmpView()
{
// TODO: add construction code here
m_hBmp = LoadImage(NULL,"111.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
}
CLoadBmpView::~CLoadBmpView()
{
}
BOOL CLoadBmpView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CLoadBmpView drawing
const int X_ORIGINAL = 138;
const int Y_ORIGINAL = 318;
void CLoadBmpView::OnDraw(CDC* pDC)
{
CLoadBmpDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CBitmap bmp;
bmp.Attach(m_hBmp);
CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(&bmp);
BITMAP BitInfo;
bmp.GetBitmap(&BitInfo);
int x = BitInfo.bmWidth;
int y = BitInfo.bmHeight;
pDC->BitBlt(0,0,x,y,&memDC,0,0,SRCCOPY);
bmp.Detach();
memDC.DeleteDC();
// pDoc->SetModifiedFlag();
pDoc->UpdateAllViews(NULL);
CPen pen(PS_SOLID,3,RGB(0,255,0));
CPen *pOldPen = pDC->SelectObject(&pen);
float x2=0;
float y2=0;
pDC->MoveTo(X_ORIGINAL,Y_ORIGINAL);
for(int i=0;i<500;i++)
{
x2=pDoc->f2;
y2=pDoc->f3;
pDC->LineTo(x2,y2);
}
// pDC->LineTo(1234,3434);
}
f2,f3是对应的DOC的参数,如何防闪烁呢?
解决方案1:
确应如此。如果继续闪烁,那么就与你的外部控制有关系了。
解决方案2: 1) memDC可以作为成员变量在外面Create好
2) 画线操作画在memDC上应该好一点些
解决方案3: 你既然用了内存DC,就用到底啊。不会闪烁
解决方案4: 1) memDC可以作为成员变量在外面Create好
2) 画线操作画在memDC上应该好一点些
解决方案5: 防闪烁都是用双缓冲,要用bitblt,而不要用invalidate之类的来刷新。
以上介绍了“ VIEW中防闪烁”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2343928.html