본문 바로가기
C & C++/C & C++

API함수를 이용한 해상도 조절하기

by izen8 2011. 11. 17.
반응형

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가 오게 될 경우에는 컴퓨터 자체를 재 부팅해야하는 경우에 해당됩니다.

반응형

댓글