用GDI在窗口画图的时候,当窗口收到画图消息,总是先画背景再画贴图,
所以画出来的东西只要你拖动窗口改变它的尺寸他就要闪烁,可是像什
么视频播放器之类的东西,放视频的时候,你改变他的窗口大小,他却从来
不闪,那么这个视频播放器画图是用什么东西画的,难道是直接操作硬件
驱动?
双缓冲我会,比你这代码简单,5行代码就搞定,我是说那个主窗口每次绘制的时候都要先画背景,然后再画我贴的图中间就会闪一下,不过我已经解决了
就是挡住WM_ERASEBKGND这个消息;
case WM_ERASEBKGND:
return 0;这样就不会画背景了
弄个双缓冲就可以了,百度百度
void CTestDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
//-------------------------------------------------------------------------
rsDrawPileBox();
//-------------------------------------------------------------------------
CDialogEx::OnPaint();
}
}
void CTestDlg::rsDrawPileBox()
{ //双缓冲
CPaintDC dc(this);
CRect rectClient;
GetClientRect(&rectClient);
CDC dcMem;
CBitmap bmpMem;
dcMem.CreateCompatibleDC(&dc);
bmpMem.CreateCompatibleBitmap(&dc, rectClient.Width(), rectClient.Height());
dcMem.SelectObject(&bmpMem);
//---------------------------------------------------------
//你的的绘图放这里,使用dcMem
//dcMem.Rectangle( int(x), int(y), int(x+dx), int(y+dy) );
//--------------------------------------------
dc.BitBlt(0, 0, rectClient.Width(), rectClient.Height(), &dcMem, 0, 0, SRCCOPY);
bmpMem.DeleteObject();
dcMem.DeleteDC();
}