ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ´ÙÁß ¸ð´ÏÅÍ È¯°æÀ» Á÷Á¢ ´Ù·ç°Å³ª ´ÙÁß ¸ð´ÏÅÍ·Î ÀÎÇÑ ¹®Á¦Á¡À» ÇØ°áÇÏ·Á¸é ¸ÕÀú ½Ã½ºÅÛ¿¡ ÀåÂøµÈ ¸ð´ÏÅÍ¿¡ ´ëÇÑ Á¤º¸¸¦ Á¶»çÇØ¾ß ÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö´Â ½Ã½ºÅÛÀÇ ¸ðµç ¸ð´ÏÅÍ ¶Ç´Â ƯÁ¤ DC¿Í °ü·ÃµÈ ¸ð´ÏÅ͸¦ ¿°ÅÇÑ´Ù.
BOOL EnumDisplayMonitors(HDC hdc, LPCRECT lprcClip, MONITORENUMPROC lpfnEnum, LPARAM dwData);
hdc¿Í lprcClip Àμö¿¡ ´ëÇØ¼´Â Àá½Ã ÈÄ µû·Î Á¤¸®ÇØ º¸±â·Î Ç쵂 ÀÌ °ªÀÌ µÑ ´Ù NULLÀÌ¸é ¸ðµç ¸ð´ÏÅͰ¡ ¿°ÅµÈ´Ù. lpfnEnum Àμö´Â ¸ð´ÏÅͰ¡ ¹ß°ßµÉ ¶§¸¶´Ù È£ÃâµÉ Äݹé ÇÔ¼öÀ̸ç dwData´Â ÀÌ ÇÔ¼ö·Î Àü´ÞµÉ »ç¿ëÀÚ Á¤ÀǰªÀÌ´Ù. Äݹé ÇÔ¼ö´Â ´ÙÀ½°ú °°Àº ¿øÇüÀ» °¡Áø´Ù.
BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData);
ù¹øÂ° Àμö hMonitor´Â ¹ß°ßµÈ ¸ð´ÏÅÍÀÇ ÇÚµéÀε¥ ÀÌ ÇÚµé·ÎºÎÅÍ ¸ð´ÏÅÍÀÇ »ó¼¼ÇÑ Á¤º¸¸¦ Á¶»çÇÒ ¼ö ÀÖ´Ù. hdcMonitor´Â ÀÌ ¸ð´ÏÅÍ ¿µ¿ª¿¡ ±×¸®±â¸¦ ÇÒ ¶§ »ç¿ëÇÒ DC ÇÚµéÀ̸ç lprcMonitor´Â ¸ð´ÏÅÍÀÇ ÁÂÇ¥°ªÀε¥ Àá½Ã ÈÄ µû·Î Á¤¸®Çϵµ·Ï ÇÏÀÚ. ¿°Å¸¦ °è¼ÓÇÏ·Á¸é TRUE¸¦ ¸®ÅÏÇÏ°í ¿°Å¸¦ ÁßÁöÇÏ·Á¸é FALSE¸¦ ¸®ÅÏÇÏ¸é µÈ´Ù. ¿øÇÏ´Â ¸ð´ÏÅ͸¦ ã¾ÒÀ» ¶§ FALSE¸¦ ¸®ÅÏÇÏ¸é ¸ð´ÏÅÍ ¿°Å°¡ ³¡³´Ù. ¸ð´ÏÅÍÀÇ ÇÚµé·ÎºÎÅÍ ¸ð´ÏÅÍÀÇ Á¤º¸¸¦ Á¶»çÇÒ ¶§´Â ´ÙÀ½ ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.
BOOL GetMonitorInfo(HMONITOR hMonitor, LPMONITORINFO lpmi);
MONITORINFO(EX) ±¸Á¶Ã¼¸¦ ¼±¾ðÇÑ ÈÄ ÀÌ ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅ͸¦ Àü´ÞÇÏ¸é ¸ð´ÏÅÍ °ü·Ã Á¤º¸¸¦ ±¸Á¶Ã¼¿¡ ä¿öÁØ´Ù. ÀÌ ±¸Á¶Ã¼´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ¾î ÀÖ´Ù.
typedef struct tagMONITORINFOEX {
DWORD cbSize;
RECT rcMonitor;
RECT rcWork;
DWORD dwFlags;
TCHAR szDevice[CCHDEVICENAME];
} MONITORINFOEX, *LPMONITORINFOEX;
°¢ ¸â¹öÀÇ
Àǹ̴ ´ÙÀ½°ú
°°´Ù.
¸â¹ö |
¼³¸í |
cbSize |
ÀÌ ±¸Á¶Ã¼ÀÇ Å©±âÀÌ¸ç ±¸Á¶Ã¼ ¹öÀü È®Àο¡ »ç¿ëµÈ´Ù. GetMonitorInfo ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡ ÀÌ ¸â¹ö¿¡ ±¸Á¶Ã¼ÀÇ Å©±â¸¦ ¹Ýµå½Ã ´ëÀÔÇØ ÁÖ¾î¾ß ÇÑ´Ù. |
rcMonitor |
°¡»ó ȸé»óÀÇ ¸ð´ÏÅÍ ÁÂÇ¥ÀÌ´Ù. ¿ÞÂÊÀ̳ª À§ÂÊ¿¡ ÀÖ´Â ¸ð´ÏÅÍ´Â À½¼ö ÁÂÇ¥¸¦ °¡Áú °ÍÀÌ´Ù. |
rcWork |
°¡»ó ȸé»óÀÇ ¿öÅ© ¿¡¸®¾î ÁÂÇ¥ÀÌ´Ù. rcMonitor ¿µ¿ª¿¡¼ ¾Û¹Ù ¿µ¿ªÀ» Á¦¿ÜÇÑ ¿µ¿ªÀÌ´Ù. |
dwFlags |
ÁÖ ¸ð´ÏÅÍÀÏ °æ¿ì MONITORINFOF_PRIMARY°¡ Àü´ÞµÈ´Ù. |
szDevice |
¸ð´ÏÅÍÀÇ À̸§ÀÌ´Ù. |
´ÙÀ½ ¿¹Á¦´Â ½Ã½ºÅÛ¿¡ ÀåÂøµÈ ¸ðµç ¸ð´ÏÅÍÀÇ Á¤º¸¸¦ Á¶»çÇØ ÁØ´Ù.
#define WINVER 0x0500
#include <windows.h>
....
int y;
BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor,HDC hdcMonitor,LPRECT lprcMonitor,LPARAM dwData)
{
TCHAR sInfo[256];
MONITORINFOEX mi;
mi.cbSize=sizeof(MONITORINFOEX);
GetMonitorInfo(hMonitor,&mi);
wsprintf(sInfo,"¸ð´ÏÅÍ ÇÚµé = %x, ÁÂÇ¥=(%d,%d)-(%d,%d) %s",hMonitor,
lprcMonitor->left,lprcMonitor->top,lprcMonitor->right,lprcMonitor->bottom,
(mi.dwFlags & MONITORINFOF_PRIMARY)==0 ? "":"ÁÖ ¸ð´ÏÅÍ");
TextOut((HDC)dwData,10,y,sInfo,lstrlen(sInfo));
y+=20;
return TRUE;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
TCHAR Mes[256];
int cMon;
RECT rcVirt;
switch(iMessage) {
case WM_LBUTTONDOWN:
case WM_DISPLAYCHANGE:
InvalidateRect(hWnd,NULL,TRUE);
UpdateWindow(hWnd);
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
cMon=GetSystemMetrics(SM_CMONITORS);
if (cMon == 0) {
lstrcpy(Mes,"´ÙÁß ¸ð´ÏÅ͸¦ Áö¿øÇÏÁö ¾Ê´Â ½Ã½ºÅÛÀÔ´Ï´Ù");
TextOut(hdc,10,10,Mes,lstrlen(Mes));
} else {
wsprintf(Mes,"¸ð´ÏÅÍ °³¼ö = %d, »ö»ó Æ÷¸Ë=%s",cMon,
GetSystemMetrics(SM_SAMEDISPLAYFORMAT) ? "¸ðµÎ µ¿ÀÏ":"´Ù¸§");
TextOut(hdc,10,10,Mes,lstrlen(Mes));
rcVirt.left=GetSystemMetrics(SM_XVIRTUALSCREEN);
rcVirt.top=GetSystemMetrics(SM_YVIRTUALSCREEN);
rcVirt.right=rcVirt.left+GetSystemMetrics(SM_CXVIRTUALSCREEN);
rcVirt.bottom=rcVirt.top+GetSystemMetrics(SM_CYVIRTUALSCREEN);
wsprintf(Mes,"°¡»ó ȸé=(%d,%d)-(%d,%d)",rcVirt.left,rcVirt.top,
rcVirt.right,rcVirt.bottom);
TextOut(hdc,10,30,Mes,lstrlen(Mes));
y=50;
EnumDisplayMonitors(NULL,NULL,MonitorEnumProc,(LPARAM)hdc);
}
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
´ÙÁß ¸ð´ÏÅÍ ½Ã½ºÅÛÀº 98ÀÌÈÄ 2000ÀÌÈÄ¿¡¼¸¸ Áö¿øµÈ´Ù. Áï À©µµ¿ìÁî 95¿Í NT´Â ´ÙÁß ¸ð´ÏÅÍ È¯°æÀ» Áö¿øÇÏÁö ¾ÊÀ¸¸ç ºñÁÖ¾ó C++ 6.0ÀÇ ±âº» ÄÄÆÄÀÏ È¯°æÀÌ À©µµ¿ìÁî 95·Î ¸ÂÃß¾îÁ® Àֱ⠶§¹®¿¡ ´ÙÁß ¸ð´ÏÅÍ °ü·Ã ÇÔ¼ö¸¦ È£ÃâÇÏ·Á¸é windows.h¸¦ ÀÎŬ·çµåÇϱâ Àü¿¡ WINVER ¸ÅÅ©·Î¸¦ 0x500 ÀÌ»óÀ¸·Î Á¤ÀÇÇØ ÁÖ¾î¾ß ÇÑ´Ù. µÎ °³ÀÇ ¸ð´ÏÅͰ¡ ÀåÂøµÈ ½Ã½ºÅÛ¿¡¼ ÀÌ ¿¹Á¦¸¦ ½ÇÇàÇÑ °á°ú´Â ´ÙÀ½°ú °°´Ù.
¸ð´ÏÅÍÀÇ °³¼ö´Â SM_CMONITORS ¸ÞÆ®¸¯½º·Î °£´ÜÇÏ°Ô Á¶»çÇÒ ¼ö Àִµ¥ ¸¸¾à ÀÌ °ªÀÌ 0À̶ó¸é ¾Æ¿¹ ´ÙÁß ¸ð´ÏÅ͸¦ Áö¿øÇÏÁö ¾Ê´Â 95/NT ½Ã½ºÅÛÀÌ´Ù. ÀÌ °ªÀÌ 1À̶ó¸é ÁÖ ¸ð´ÏÅÍ Çϳª¸¸ ÀÖ´Â »óÅÂÀ̰í 2ÀÌ»óÀÌ¸é ´ÙÁß ¸ð´ÏÅÍ È¯°æÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù. 95/NT ȯ°æ¿¡¼´Â ´ÙÁß ¸ð´ÏÅÍ °ü·Ã ÇÔ¼ö¸¦ È£ÃâÇØ¼´Â ¾ÈµÇ¸ç SM_CMONITORS°¡ 0À» ¸®ÅÏÇÑ´Ù°í ÇØ¼ ÀåÂøµÈ ¸ð´ÏÅͰ¡ ¾ø´Ù°í ÆÇ´ÜÇØ¼µµ ¾ÈµÈ´Ù.
¸ð´ÏÅ͵éÀÇ »ö»ó Æ÷¸Ë µ¿Àϼº ¿©ºÎ³ª °¡»ó ȸéÀÇ ¹üÀ§´Â ¸ÞÆ®¸¯½º°ªÀ¸·Î °£´ÜÈ÷ Á¶»çÇÒ ¼ö ÀÖ´Ù. °¢°¢ÀÇ ¸ð´ÏÅÍ¿¡ ´ëÇÑ Á¤º¸¸¦ Á¶»çÇÏ·Á¸é EnumDisplayMonitor ÇÔ¼ö·Î ¸ð´ÏÅÍ ¿°Å¸¦ ÇÑ ÈÄ Äݹé ÇÔ¼ö¿¡¼ Á¶»çµÇ´Â ¸ð´ÏÅÍ Çڵ鿡 ´ëÇØ GetMonitorInfo ÇÔ¼ö¸¦ È£ÃâÇØ º¸¸é µÈ´Ù. ¿¹Á¦ÀÇ ½ÇÇà °á°ú¸¦ º¸¸é ÁÖ ¸ð´ÏÅͰ¡ ¿ÞÂÊ¿¡ ÀÖ°í Ãß°¡ ¸ð´ÏÅͰ¡ ¿À¸¥ÂÊ¿¡ ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù.
ÀÌ·± ½ÄÀ¸·Î ¸ð´ÏÅ͸¦ ¿°ÅÇØ º¸¸é ½Ã½ºÅÛ¿¡ ÀåÂøµÈ ¸ð´ÏÅÍÀÇ ¸ñ·Ï°ú °¢ ¸ð´ÏÅÍÀÇ Æ¯¼ºÀ» Á¶»çÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÀÌ Á¤º¸¸¦ ¹ÙÅÁÀ¸·Î ÀÚ½ÅÀÇ À§Ä¡³ª ÁÂÇ¥ÀÇ À¯È¿¼ºÀ» Á¡°ËÇÏ¸é µÈ´Ù. ´ÙÀ½Àº Àá½Ã ¼³¸íÀ» º¸·ùÇØ µÎ¾ú´ø EnumDisplayMonitors ÇÔ¼öÀÇ µÎ Àμö¿¡ ´ëÇØ Á¤¸®ÇØ º¸ÀÚ. hdc Àμö°¡ Àü´ÞµÇ¸é ÀÌ DC ¿µ¿ªÀÌ °ÉÃÄ ÀÖ´Â ¸ð´ÏÅÍ¿¡ ´ëÇØ¼¸¸ Á¶»çµÇ¸ç Äݹé ÇÔ¼öÀÇ Ã¹¹øÂ° Àμö·Î ÇØ´ç ¸ð´ÏÅÍ¿¡ Ãâ·ÂÇÒ ¼ö ÀÖ´Â DC ÇÚµéÀÌ Àü´ÞµÈ´Ù. ÀÌ DC ÇÚµé·Î ±×¸®±â¸¦ Çϸé ÇØ´ç ¸ð´ÏÅÍÀÇ Æ¯¼º¿¡ ¸Â´Â Ä¿½ºÅÒ ±×¸®±â¸¦ ÇÒ ¼ö ÀÖ´Ù.
EnumDisplayMonitors ÇÔ¼öÀÇ µÎ¹øÂ° Àμö lprcClipÀº Ŭ¸®ÇÎ ¿µ¿ªÀ» ÁöÁ¤Çϴµ¥ ÀÌ ¿µ¿ªÀÌ °ÉÃÄ ÀÖ´Â ¸ð´ÏÅÍ¿¡ ´ëÇØ¼¸¸ Á¶»çµÈ´Ù. ÀÛ¾÷ ¿µ¿ªÀÇ ÀϺθ¸ ±×¸®±â¸¦ ÇÒ ¶§ Ŭ¸®ÇÎ ¿µ¿ªÀ» ÁöÁ¤Çϸé Äݹé ÇÔ¼öÀÇ lprcMonitor Àμö·Î Ŭ¸®ÇÎ ¿µ¿ª°ú °ãÃÄÁö´Â ¸ð´ÏÅÍ ¿µ¿ªÀÌ Àü´ÞµÇ¹Ç·Î ÀÌ ¿µ¿ª¿¡ ´ëÇØ¼¸¸ ±×¸®±â¸¦ ÇÏ¸é µÈ´Ù.
ÀÌ µÎ Àμö°¡ ¸ðµÎ NULLÀ̸é ÀåÂøµÈ ¸ðµç ¸ð´ÏÅÍ¿¡ ´ëÇÑ Á¤º¸°¡ Á¶»çµÇ¸ç ÀÌ µÎ ÀμöÁß Çϳª ¶Ç´Â ÀüºÎ°¡ Àü´ÞµÉ °æ¿ì Á¶»çµÇ´Â Á¤º¸°¡ ´Þ¶óÁø´Ù. ´ÙÀ½ µµÇ¥´Â EnumDisplayMonitors ÇÔ¼öÀÇ µÎ Àμö°ªÀÇ Á¶ÇÕ°ú Á¶»çµÇ´Â Á¤º¸µéÀ» Á¤¸®ÇÑ °ÍÀÌ´Ù.
hdc |
lprcClip |
Á¤º¸ |
NULL |
NULL |
¸ðµç ¸ð´ÏÅÍÀÇ Á¤º¸¸¦ Á¶»çÇϸç Äݹé ÇÔ¼ö·Î´Â NULL DC°¡ Àü´ÞµÈ´Ù. |
NULL |
¾ÈNULL |
Ŭ¸®ÇÎ ¿µ¿ª°ú ±³Â÷µÇ´Â ¸ð´ÏÅÍ ¿µ¿ªÀÌ Á¶»çµÈ´Ù. À̶§ Ŭ¸®ÇÎ ¿µ¿ª°ú Äݹé ÇÔ¼ö°¡ Àü´Þ¹Þ´Â ÁÂÇ¥°ªÀº ¸ðµÎ °¡»ó ȸé ÁÂÇ¥ÀÌ´Ù. |
¾ÈNULL |
NULL |
DC¿Í ±³Â÷µÇ´Â ¸ð´ÏÅÍ ¿µ¿ªÀÌ Á¶»çµÈ´Ù. Äݹé ÇÔ¼ö´Â °¢ ¸ð´ÏÅÍ ¿µ¿ª¿¡ ÇØ´çÇÏ´Â DC°ªÀ» ¹Þ´Â´Ù. |
¾ÈNULL |
¾ÈNULL |
DCÀÇ Å¬¸®ÇÎ ¿µ¿ª°ú ±³Â÷µÇ´Â ¸ð´ÏÅÍ ¿µ¿ªÀÌ Á¶»çµÈ´Ù. À̶§ Ŭ¸®ÇÎ ¿µ¿ª°ú Äݹé ÇÔ¼ö°¡ Àü´Þ¹Þ´Â ÁÂÇ¥°ªÀº ¸ðµÎ À©µµ¿ì ÁÂÇ¥ÀÌ´Ù. Äݹé ÇÔ¼ö´Â °¢ ¸ð´ÏÅÍ ¿µ¿ª¿¡ ÇØ´çÇÏ´Â DC°ªÀ» ¹Þ´Â´Ù. |
MonitorInfo ¿¹Á¦¿¡¼ ÀÌ µÎ Àμö°ªÀ» º¯°æÇØ °¡¸ç Å×½ºÆ®ÇØ º¸¸é ¾î¶² Á¤º¸°¡ Á¶»çµÇ´ÂÁö ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ Á¤º¸µéÀ» »ç¿ëÇÏ´Â ¿¹Á¦´Â ¹Ù·Î ´ÙÀ½ Ç׿¡¼ ÀÛ¼ºÇØ º¼ °ÍÀÌ´Ù.
´ÙÁß ¸ð´ÏÅÍ È¯°æÀº ½Ã½ºÅÛÀ» ºÎÆÃÇÒ ¶§ °áÁ¤µÇ´Â °ÍÀÌ ¾Æ´Ï¶ó »ç¿ëÀÚ¿¡ ÀÇÇØ ¾ðÁ¦µçÁö º¯°æµÉ ¼ö ÀÖ´Ù. À̶§¸¶´Ù ½Ã½ºÅÛÀº ¸ðµç ž ·¹º§ À©µµ¿ì¿¡°Ô WM_DISPLAYCHANGE ¸Þ½ÃÁö¸¦ º¸³» Áִµ¥ ¸ð´ÏÅÍ ±¸¼º¿¡ µû¶ó µ¿ÀÛÀÌ ´Þ¶óÁ®¾ß ÇÑ´Ù¸é ÀÌ ¸Þ½ÃÁö¸¦ ó¸®ÇØ¾ß ÇÑ´Ù. ½Ã½ºÅÛÀº ¸ð´ÏÅÍ ±¸¼ºÀÌ ¹Ù²ð ¶§ ÁÖ ¸ð´ÏÅÍ¿¡ ÀÖÁö ¾ÊÀº À©µµ¿ì¸¦ ÁÖ ¸ð´ÏÅÍ ¾ÈÀ¸·Î À̵¿½ÃÄÑ ÁֹǷΠÀÌ ¸Þ½ÃÁö¸¦ ²À ó¸®ÇØ¾ß ÇÒ ÇÊ¿ä´Â °ÅÀÇ ¾ø´Ù.