-_-요즘에 프로젝트 하느라고 포스팅을 못했떠니..ㅎ
어쩄든 프로젝트에서 그리는걸 수행해야하는데..-0- 어쩝 이리 깜박거릴까.ㅎ
당연히 정답은 더블버퍼링(근데 이걸 메모리DC라고도 하나보네..)
짜잉나서 OnPaint 함수를 통째로 써버렸다..ㅋㅋ
2008에선 다이얼로그로 프로그램시 기초적으로 코딩이 된 부분이 많아서 어지럽기도 한데
더블버퍼링 써저있는 곳부터 사용하시면 된다.
void CschoolzoneDlg::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
{
CDialog::OnPaint();
}
//더블 버퍼링 //
CClientDC dc(this); //윈도우 DC를 얻는다.
CDC MemDC; //메모리 DC를 만듬.
CBitmap bitmap;
CBitmap *pOldBitmap;
MemDC.CreateCompatibleDC(&dc); // 윈도우DC와 메모리 DC호환.
bitmap.LoadBitmap(IDB_BITMAP1);//비트맵을 읽어 들임.
pOldBitmap = (CBitmap *)MemDC.SelectObject(&bitmap);//비트맵을 DC에 선택
//mapdivision(&MemDC);
dc.BitBlt(0, 0, 620, 620, &MemDC, 0, 0, SRCCOPY);//비트맵을 해당위치에 그려줌.
MemDC.SelectObject(pOldBitmap);//DC복원
}
나도 네이년이랑 구글 돌아다니면서 글어온거라..-0-;; 너무 많이 봐서 출처를 모르겠다. (다 하고 보니 창을 껏네.. 혹시나 누가 되신다면 댓글 달아주세요 삭제해드릴께요)
뭐 더블 버퍼링이 어떤 형식인지는 아실테고 난 좀더 쏘스를 함수화를 시켰다.
지금 이건 BITMAP을 읽고 뿌려주는건데 나머진
(BITMAP의 경우 리소스에서 원하는 비트맵을 추가만 해주면 된다.)
아랫쪽에 주석되어 있는 함수 mapdivision(CDC* memDC) 에 CDC 포인터를 받아서
해당 함수에서 CDC로 그리는걸 추가한다음 DC로 그리게 만들었다.
결국 쏘스만 본따서 원하는 함수만 만들어주고 나 처럼 할려면 함수에 CDC포인터만 받고서 그리면 된다.
포인터로 받기 때문에 리턴도 필요없고, 함수가 끝나면 DC에서 그려주는 원리이다.
흠....-_-알아서 잘 쓰시길..(사실 찾아보면 자료는 많은데 왜 난 사용을 못하지?ㅋㅋ 아직 멀었나 보다.)
'app > C' 카테고리의 다른 글
object-c 정리 그림! (0) | 2010.06.23 |
---|---|
: error C2440: 'static_cast' : 'void (__thiscall CTrayDlg::* )(WPARAM,LPARAM)'에서 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'(으)로 변환할 수 없습니다. (0) | 2010.05.14 |
MFC EDITBOX control (0) | 2010.04.06 |
dll viewer anywherepeviewer (0) | 2010.03.26 |
MFC 다이얼로그 그림(이미지) 띄우기 (0) | 2010.03.23 |