CListCtrl 데이터 변경 및 데이터 삽입 반 짝 임 방지 방법

(1)CListCtrl 데이터 가 깜빡 거리 지 않도록 변경:
법 1:LVS 직접 설정EX_DOUBLEBUFFER 확장 속성 입 니 다.
법 2:더 블 버퍼 를 사용 합 니 다.
클래스 CMyListCtrl 을 사용자 정의 하여 CListCtrl 을 계승 하고 OnPaint 와 OnEraseBkgd 를 다시 쓰 는 방법
void CMyListCtrl::OnPaint()
{
	//              
	CPaintDC dc(this); // device context for painting  
	CRect rect;
	CRect headerRect;
	CDC MenDC;      //  DC     
	CBitmap MemMap;

	GetClientRect(&rect);
	//GetDlgItem(0)->GetWindowRect(&headerRect);
	this->GetHeaderCtrl()->GetWindowRect(&headerRect);
	MenDC.CreateCompatibleDC(&dc);
	MemMap.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height());
	MenDC.SelectObject(&MemMap);
	MenDC.FillSolidRect(&rect, RGB(255, 255, 255));

	//     OnPaint(),       DC       
	DefWindowProc(WM_PAINT, (WPARAM)MenDC.m_hDC, (LPARAM)0);

	//         
	dc.BitBlt(0,
		headerRect.Height(),
		rect.Width(),
		rect.Height(),
		&MenDC,
		0,
		headerRect.Height(),
		SRCCOPY);
	MenDC.DeleteDC();
	MemMap.DeleteObject();
}


BOOL CMyListCtrl::OnEraseBkgnd(CDC* pDC)
{
	// TODO:               /      
	return FALSE;
}

(2)CListCtrl 데이터 삽입 으로 깜빡 임 방지:
(1)의 기초 위 에 아래 코드 를 덧붙이다
CString str;
	str.Format(L"%d", nItem);

//	plist->LockWindowUpdate();
	//	plist->SetRedraw(FALSE);
	plist->InsertItem(nItem, str);
	plist->SetItemText(nItem, 0, str);
	plist->SetItemText(nItem, 1, L"    ");
//	plist->UnlockWindowUpdate();
//	plist->SetRedraw(TRUE);
	plist->Invalidate(); //   ,    ,     
	plist->SetScrollPos(SB_VERT, nItem, TRUE); //      ,          
	plist->EnsureVisible(nItem, FALSE);

좋은 웹페이지 즐겨찾기