API함수를 이용한 해상도 조절하기
[ 임의대로 해상도를 조절해 봅시다. ]
윈도우상의 해상도를 조절하기 위해서는 등록정보에서 바꿔줘야 합니다. 하지만, 이것을 자신이 만든 어플리케이션내에서 바꿔보는건 어떨까요 ? 어디에 필요한지는 지금 막 생각나지는 않지만, 다 알면 피가되고 살이 되겠져 ?
1. 먼저 현재 모니터와 비디오카드가 지원해 줄 수 있는 해상도 정보를 받아옵니다.
이때, 해상도에 따른 구조체 DEVMODE를 이용하며, 각 해상도에 따른 해상도 ID(정수값)를 얻어옵니다.
2. 각 해상도 정보로부터 구조체에 해당하는 정보를 가져옵니다. 이렇게 함으로써, 현재 자신의 컴퓨터에서 변경 가능한 해상도의 정보를 가져올 수가 있습니다.
DEVMODE *pDevMode=&devMode;
int n=0;
while(EnumDisplaySettings(NULL, n, &devMode))
{
sStr.Format("%d x %d (%d bit) ", devMode.dmPelsWidth,
devMode.dmPelsHeight,
devMode.dmBitsPerPel
);
n++;};
if(n<1) {
AfxMessageBox("해상도의 변경이 불가능합니다.");
}
3. 변경 가능한 해상도로 변경해 봅니다.
DEVMODE *pDevMode=&devMode;
int n;
EnumDisplaySettings(NULL,원하는해상도ID, pDevMode);
pDevMode->dmSize=sizeof(DEVMODE);
pDevMode->dmFields=DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
n=ChangeDisplaySettings(pDevMode, 0);
if(n==DISP_CHANGE_RESTART)
AfxMessageBox("윈도우를 재부팅해야합니다.");
코드만 보면, 이해가 가실껍니다. 좀더 설명을 드리면, 먼저 EnumDisplaySetting에서 2번에서 정한 n의 값중에 원하는 ID값을 설정합니다. 그리고, 순서대로 코딩을 하시면, 해상도 변경을 가능하게 할 수 있습니다.
여기서, ChangeDisplaySetting의 리턴값중 DISP_CHANGE_RESTART가 오게 될 경우에는 컴퓨터 자체를 재 부팅해야하는 경우에 해당됩니다.
'C & C++ > C & C++' 카테고리의 다른 글
다른 프로그램 제어하기(2) (0) | 2011.11.17 |
---|---|
다른 프로그램 제어하기 (1) (0) | 2011.11.17 |
로그인인증 (ODBC) 구현해보자 (0) | 2011.11.03 |
메모장을 API를 이용하여 주물럭 거려보자 (0) | 2011.11.02 |
파일 존재유무 파악 (0) | 2011.11.02 |
댓글