말 그대로 프로그래밍 상에서 현재의 해상도를 원하는데로 변경할 수 있습니다.
전역함수로 ChangeDisplaySettings 라는 함수가 있더군요.
암데서나 불러 쓸수 있죠.
이전 해상도를 보관했다가 다시 복귀할 수 있도록 해보겠습니다.
현재의 해상도를 얻어오는 함수는 GetSystemMetrics 입니다. 먼저 현재의 해상도를 저장할 변수를 선언합니다.
class CMainFrame : public CMDIFrameWnd
{
/// 생략
// Attributes
public:
int screenY;
int screenX;
/// 생략
}
초기화는 요렇게..
// 현재 해상도 보관
screenX = GetSystemMetrics(SM_CXSCREEN) ;
screenY = GetSystemMetrics(SM_CYSCREEN) ;
인자로 받은 해상도로 변경하는 함수를 만듭니다.
void CMainFrame::ChangeDisplay(int Width, int Height)
{
DEVMODE mode ;
mode.dmBitsPerPel = 16; // 16비트 칼라로 변경
mode.dmPelsWidth = Width;
mode.dmPelsHeight = Height;
mode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
ChangeDisplaySettings(&mode, CDS_FULLSCREEN );
ShowWindow( SW_SHOWMAXIMIZED );
}
전 16비트 칼라로만 변경하도록 했는데, 저것두 인자로 받아서 처리하면 원하는 칼라로 바꿀수 있겠죠???
그리구 원하는 곳에서 함수를 호출~~~
// 1024 x 768 로 변경
((CMainFrame*)AfxGetMainWnd())->ChangeDisplay(1024, 768) ;
프로그램이 종료할때 이전 해상도로 복귀하도록 해야 겠죠? 이건 DestroyWindow() 에서 처리하면 됩니다.
BOOL CMainFrame::DestroyWindow()
{
if( screenX != GetSystemMetrics(SM_CXSCREEN) || screenY != GetSystemMetrics(SM_CYSCREEN) )
ChangeDisplay(screenX, screenY) ;
return CFrameWnd::DestroyWindow();
}
이전 해상도를 저장해뒀으니까 그걸로 다시 복귀한거죠.
암튼, 위에서처럼 작업하면 원하는 해상도로 변경시켜서 작업할 수 있죠.
참, 도움말을 뒤져보니깐 윈도우 메시지중에 WM_DISPLAYCHANGE 라는게 있더군요.
근데 이 메시지는 클래스위저드에 들어있질 않네요.
99999999WM_DISPLAYCHANGE 메세지는 직접 호출할 수는 없을 겁니다.
다만 OS가 화면 해상도가 변경되었을 때 모든 Window에게로
보내주는 Message일 겁니다.
해상도 복원시에 변수로 해상도를 가지고 있다가 복원할 필요 없이 그냥
ChangeDisplaySettings(NULL, 0);
이라고만 하면 화면 복원 됩니다. 이 함수는 해상도 변경만 하지 디스플레이 등록정보 자체를 바꾸진 않기 때문에 위 방식대로 함수를 호출하면 디스플레이 등록정보에 있는 해상도로 그대로 바꿔주기 때문에 더 안정적입니다.
원하는 해상도를 모니터가 받아줄수 있는지 테스트 하시고 바꿔야죠. 그 부분이 빠졌군요.
EnumDisplaySettings를 이용하시면 됩니다.
갑자기 누군가 물어 봐서 찾아 본건데;; 이런것도 필요 하겠구나 싶더라.
DX 함수
HRESULT GetDeviceCaps( D3DCAPS9 * pCaps );
'[ Programing ] > MFC' 카테고리의 다른 글
컨트롤 투명한 배경및 글자 색깔 바꾸기(static Tex 등등 여러가지 가능) (0) | 2013.05.22 |
---|---|
(에디트 박스, 리스트 컨트롤)Edit Box, List Control 자동 스크롤 (0) | 2013.05.22 |
MFC에서 문자열에서 숫자로 변환 (0) | 2013.05.22 |
파일열기 공통대화상자 실행 후에도 현재 디렉토리 유지시키기 (0) | 2013.05.21 |
파일에서 그림 불러서 이미지 리스트 만들기 (0) | 2013.05.21 |