본문 바로가기
  • fishing...
  • eating...
MISCELLANEOUSNESS

Graphics] DirectX WM_SIZE 이벤트 처리

by 회색뿔 2009. 12. 12.


코딩을 하다가 WM_SIZE이벤트를 받아서 Resize를 하는 방법을 찾아 봤다.
막상 책에도 없는 내용이다 보니 어떻게 해야 할가 막막했지만.. 아래 처럼 하니 이상없이 동작하고 있다.

WM_SIZE이벤트를 처리 했기 때문에 WM_SIZING즉 크기 변환 중에는 동작 하지 않는다. 이점은 참고하기 바란다.

물론, Debug 모드에서만 돌려봐서 Release를 했을경우 어떤 문제가 발생하는지는 확인해보지 않았다.

방법을 보면,
1. WM_SIZE 이벤드를 ::OnSize 메서드로 링크한다.
setDisplayResize를 호출한다. 물론, 호출 하지 않고 그 부분을 붙여 넣기 해도 된다.

void CMyView::OnSize(UINT nType, int cx, int cy)
{
	CView::OnSize(nType, cx, cy);

	// TODO: Add your message handler code here
	// Display Mode 변경
	setDisplayResize( cx, cy );
}

여기에서 d3dpp(D3DPRESENT_PARAMETERS)의 속성을 바꾸어 준다.
BackBuffer의 크기를 화면 크기로 바꿔 주는 것이다.
void CMyView::setDisplayResize( int cx, int cy )
{
	if( m_pd3dDevice )
	{
		m_d3dpp.BackBufferWidth = cx;
		m_d3dpp.BackBufferHeight = cy;
	}
}
한번씩 해본 분이라면 알 내용들이다.