´ÙÀ½ ¼¼ ÇÔ¼ö´Â ƯÁ¤ ¿ÀºêÁ§Æ®°¡ ¾î¶² ¸ð´ÏÅÍÀ§¿¡ ÀÖ´ÂÁö Á¶»çÇØ ÁØ´Ù. ÇÑ Á¡¿¡ ´ëÇØ, »ç°¢ ¿µ¿ª¿¡ ´ëÇØ, À©µµ¿ì¿¡ ´ëÇØ Á¶»çÇÒ ¼ö ÀÖÀ¸¸ç ÀÌ ¿ÀºêÁ§Æ®°¡ ÀÖ´Â ¸ð´ÏÅÍÀÇ ÇÚµéÀÌ ¸®ÅϵȴÙ.
HMONITOR MonitorFromPoint(POINT pt, DWORD dwFlags);
HMONITOR MonitorFromRect(LPCRECT lprc, DWORD dwFlags);
HMONITOR MonitorFromWindow(HWND hwnd, DWORD dwFlags);
dwFlags´Â ¿ÀºêÁ§Æ®°¡ ¾î¶² ¸ð´ÏÅÍ À§¿¡µµ ÀÖÁö ¾ÊÀ» ¶§, ¿¹¸¦ µé¾î ¼öÆòÀ¸·Î ¹èÄ¡µÈ »óÅ¿¡¼ ¸ð´ÏÅÍÀÇ À§ÂÊ ÁÂÇ¥³ª ´ë°¢¼±À¸·Î ¹èÄ¡µÈ »óÅ¿¡¼ ¿À¸¥ÂÊ ÁÂÇ¥¿¡ ÀÖÀ» ¶§ ¾î¶² °ªÀ» ¸®ÅÏÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. ´ÙÀ½ ¼Â Áß Çϳª¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù.
Ç÷¡±× |
¼³¸í |
MONITOR_DEFAULTTONEAREST |
°¡Àå °¡±î¿î ¸ð´ÏÅÍ |
MONITOR_DEFAULTTONULL |
NULL |
MONITOR_DEFAULTTOPRIMARY |
ÁÖ ¸ð´ÏÅÍ |
Á¡ÀÇ °æ¿ì´Â ¾î´À ¸ð´ÏÅÍÀ§¿¡ ÀÖ´ÂÁö ¶Ç´Â ¸ð´ÏÅÍ ¹ÛÀÎÁö¸¦ ¸íÈ®ÇÏ°Ô ÆÇ´ÜÇÒ ¼ö ÀÖÁö¸¸ »ç°¢¿µ¿ªÀ̳ª À©µµ¿ìÀÇ °æ¿ì´Â µÎ ¸ð´ÏÅÍÀÇ °æ°è¿¡ °ÉÄ¥ ¼öµµ Àִµ¥ ÀÌ·± °æ¿ì´Â ¸¹ÀÌ ¼ÓÇØÀÖ´Â ÂÊ ¸ð´ÏÅͰ¡ ¼±ÅõȴÙ. ´ÙÀ½ ¿¹Á¦´Â À©µµ¿ì°¡ ÀÖ´Â ¸ð´ÏÅÍ¿¡ ´ëÇÑ Á¤º¸¸¦ º¸¿© ÁØ´Ù.
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
TCHAR Mes[256];
HMONITOR hMonitor;
MONITORINFOEX mi;
switch(iMessage) {
case WM_MOVE:
InvalidateRect(hWnd,NULL,TRUE);
UpdateWindow(hWnd);
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
hMonitor=MonitorFromWindow(hWnd,MONITOR_DEFAULTTONEAREST);
mi.cbSize=sizeof(MONITORINFOEX);
GetMonitorInfo(hMonitor,&mi);
wsprintf(Mes,"ÀÌ À©µµ¿ì°¡ ÀÖ´Â ¸ð´ÏÅÍ:%x%s, °¡»ó ÁÂÇ¥=(%d,%d)-(%d,%d)",
hMonitor,(mi.dwFlags & MONITORINFOF_PRIMARY)==0 ? "":"(ÁÖ ¸ð´ÏÅÍ)",
mi.rcMonitor.left,mi.rcMonitor.top,mi.rcMonitor.right,mi.rcMonitor.bottom);
TextOut(hdc,10,10,Mes,lstrlen(Mes));
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
¸ð´ÏÅÍÀÇ ÇÚµéÀ» ±¸ÇÑ ÈÄ ÀÌ ¸ð´ÏÅͰ¡ ÁÖ ¸ð´ÏÅÍÀÎÁö, °¡»ó ȸé»óÀÇ ÁÂÇ¥´Â ¾îµðÂëÀÎÁö¸¦ Á¶»çÇØ ÀÛ¾÷¿µ¿ªÀ¸·Î Ãâ·ÂÇß´Ù. »ç¿ëÀÚ´Â À©µµ¿ì¸¦ ¿øÇÏ´Â ¸ð´ÏÅÍ·Î ÀÚÀ¯·Ó°Ô À̵¿½Ãų ¼ö ÀÖ°í À©µµ¿ìÀÇ ÀÔÀå¿¡¼ ÀÚ½ÅÀÌ ¾î¶² ¸ð´ÏÅÍÀ§¿¡ ÀÖ´ÂÁö´Â ±×´ÙÁö Áß¿äÇÑ »çÇ×ÀÌ ¾Æ´Ï´Ù. ¿Ö³ÄÇϸé À©µµ¿ì´Â ¸ð´ÏÅͶó´Â ¹°¸®ÀûÀÎ ÀåÄ¡º¸´Ù´Â µ¥½ºÅ©Å¾À̶ó´Â ³í¸®ÀûÀÎ ¿µ¿ª¿¡ ÀÚ½ÅÀÌ ¼ÓÇØÀÖ´Ù°í »ý°¢Çϱ⠶§¹®ÀÌ´Ù. ±×·¡¼ »ç½Ç ÀÚ½ÅÀÌ À§Ä¡ÇØ ÀÖ´Â ¸ð´ÏÅ͸¦ Á¶»çÇØ¾ß ÇÒ °æ¿ì´Â ±×¸® ÈçÇÏÁö ¾Ê´Ù.
´ÙÀ½ ¿¹Á¦´Â ´ÙÁß ¸ð´ÏÅÍ ½Ã½ºÅÛÀÏ °æ¿ì À©µµ¿ì¸¦ ¹èÄ¡ÇÒ ¸ð´ÏÅ͸¦ ¼±ÅÃÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁØ´Ù. ±×·¡ÇÈ ÆíÁý ÇÁ·Î±×·¥ÀÇ Á¤º¸ ÆÈ·¹Æ®, µð¹ö±ëÁßÀÇ ¿ÍÄ¡ Á¤º¸, ÁÖ½Ä ÇÁ·Î±×·¥ÀÇ ÁÖ½Ä ½ÃȲ°°ÀÌ »ç¿ëÀÚÀÇ Á¶ÀÛÀº ÇÊ¿ä¾ø°í Á¤º¸¸¦ º¸¿©Áֱ⸸ ÇÏ´Â À©µµ¿ì¶ó¸é ÁÖ ¸ð´ÏÅͺ¸´Ù º¸Á¶ ¸ð´ÏÅÍ¿¡ ¿¸®´Â °ÍÀÌ ´õ ÁÁÀ» °ÍÀÌ´Ù. Âü°í Á¤º¸¸¦ º¸Á¶ ¸ð´ÏÅÍ¿¡ º¸¿©ÁÜÀ¸·Î½á ÁÖ ¸ð´ÏÅÍÀÇ °ø°£À» ´õ ¸¹ÀÌ ¾µ ¼ö ÀÖµµ·Ï ÇØ Áشٴ Á¡¿¡¼ ½Ç¿ëÀûÀÌ´Ù.
´ÙÀ½ ¿¹Á¦´Â ¸ÞÀÎ À©µµ¿ì Çϳª¿Í ½Ã°£À» º¸¿© ÁÖ´Â Â÷Àϵå À©µµ¿ì¸¦ ¸¸µå´Âµ¥ Â÷Àϵå´Â º¸Á¶ ¸ð´ÏÅÍ¿¡ ¿¸®µµ·Ï ÇÑ´Ù. ¹°·Ð ´ÙÁß ¸ð´ÏÅÍ ½Ã½ºÅÛÀÏ ¶§¸¸ ÀÌ·¸°Ô À©µµ¿ì¸¦ ¹èÄ¡ÇÏ°í ¸ð´ÏÅͰ¡ Çϳª»ÓÀ̶ó¸é µÎ À©µµ¿ì ¸ðµÎ ÁÖ ¸ð´ÏÅÍ¿¡ ¿·Á¾ß ÇÑ´Ù.
#define WINVER 0x0500
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
LRESULT CALLBACK ChildProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass=TEXT("UseDual");
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=hInstance;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=(WNDPROC)WndProc;
WndClass.lpszClassName=lpszClass;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
WndClass.hbrBackground=(HBRUSH)(COLOR_BTNFACE+1);
WndClass.lpfnWndProc=(WNDPROC)ChildProc;
WndClass.lpszClassName="ChildWnd";
RegisterClass(&WndClass);
hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
hWndMain=hWnd;
while(GetMessage(&Message,0,0,0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
TCHAR Mes[]="¸ÞÀÎ À©µµ¿ì, ÁÖ ¸ð´ÏÅÍ¿¡ ³ªÅ¸³³´Ï´Ù.";
switch(iMessage) {
case WM_CREATE:
CreateWindow("ChildWnd","ChildWnd",WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,(HMENU)NULL,g_hInst,NULL);
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
TextOut(hdc,10,10,Mes,lstrlen(Mes));
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor,HDC hdcMonitor,LPRECT lprcMonitor,LPARAM dwData)
{
MONITORINFOEX mi;
mi.cbSize=sizeof(MONITORINFOEX);
GetMonitorInfo(hMonitor,&mi);
if ((mi.dwFlags & MONITORINFOF_PRIMARY)==0) {
(*(LPRECT)dwData)=*lprcMonitor;
return FALSE;
} else {
return TRUE;
}
}
LRESULT CALLBACK ChildProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
TCHAR Mes[]="º¸Á¶ À©µµ¿ì, Ãß°¡ ¸ð´ÏÅÍ¿¡ ³ªÅ¸³³´Ï´Ù.";
TCHAR szTime[32];
SYSTEMTIME st;
RECT rt;
switch(iMessage) {
case WM_CREATE:
if (GetSystemMetrics(SM_CMONITORS) > 1) {
EnumDisplayMonitors(NULL,NULL,MonitorEnumProc,(LPARAM)&rt);
MoveWindow(hWnd,rt.left,rt.top,500,300,FALSE);
}
ShowWindow(hWnd,SW_SHOW);
SetTimer(hWnd,1,1000,NULL);
return 0;
case WM_TIMER:
InvalidateRect(hWnd,NULL,TRUE);
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
SetBkMode(hdc,TRANSPARENT);
TextOut(hdc,10,10,Mes,lstrlen(Mes));
GetLocalTime(&st);
wsprintf(szTime,"ÇöÀç ½Ã°£ = %d:%d:%d",st.wHour,st.wMinute,st.wSecond);
TextOut(hdc,10,30,szTime,lstrlen(szTime));
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
KillTimer(hWnd,1);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
WinMain¿¡¼ Â÷Àϵ带 À§ÇÑ À©µµ¿ì Ŭ·¡½º¸¦ Ãß°¡·Î µî·ÏÇ쵂 ¹è°æ»ö»óÀ» ȸ»öÀ¸·Î ¼³Á¤ÇÏ¿© ¸ÞÀÎ À©µµ¿ì¿Í ±¸ºÐÀÌ µÇµµ·Ï Çß´Ù. ¸ÞÀÎ À©µµ¿ìÀÇ WM_CREATE¿¡¼ Â÷Àϵ带 »ý¼ºÇÏµÇ Æ¯º°È÷ ¸ð´ÏÅ͸¦ ÁöÁ¤Çϰųª ÇÏÁö´Â ¾Ê¾Ò´Ù. ¿©±â±îÁö´Â ÀϹÝÀûÀÎ Â÷ÀÏµå »ý¼º °úÁ¤°ú °°À¸¸ç Â÷ÀÏµå ½º½º·Î°¡ º¸Á¶ ¸ð´ÏÅ͸¦ ã¾Æ°¡µµ·Ï ÇÏ¿´´Ù.
Â÷Àϵå´Â WM_CREATE¿¡¼ ¸ð´ÏÅ͸¦ ¿°ÅÇ쵂 »ç¿ëÀÚ Á¤ÀÇ µ¥ÀÌÅÍ·Î RECTÇü Æ÷ÀÎÅÍ º¯¼ö rt¸¦ ³Ñ°Ü ÁÖ¾ú´Ù. ¿°Å ÇÔ¼ö¿¡¼´Â ÁÖ ¸ð´ÏÅͰ¡ ¾Æ´Ñ º¸Á¶ ¸ð´ÏÅͰ¡ ¹ß°ßµÇ¸é ÀÌ ¸ð´ÏÅÍÀÇ ¿µ¿ªÀ» »ç¿ëÀÚ Á¤ÀÇ µ¥ÀÌÅÍ¿¡ º¹»çÇØ ÁÖ°í FALSE¸¦ ¸®ÅÏÇÏ¿© ¿°Å¸¦ ÁßÁöÇÑ´Ù. ¿°Å°¡ ³¡³ ÈÄ Â÷Àϵå´Â MoveWindow ÇÔ¼ö·Î º¸Á¶ ¸ð´ÏÅÍÀÇ Á»ó´Ü¿¡ Æø 500, ³ôÀÌ 300ÀÇ Å©±â·Î À̵¿ÇÏ¿´´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.
ÀÌ·± ¸ð´ÏÅÍ ¹èÄ¡´Â ¾îµð±îÁö³ª ÇÁ·Î±×·¥À» ½ÃÀÛÇÒ ¶§ÀÇ Ãʱ⠹èÄ¡ÀÏ »ÓÀ̸ç ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÈ ÈÄ »ç¿ëÀÚ´Â º¸Á¶ ¸ð´ÏÅÍ¿¡ ÀÖ´Â Â÷Àϵ带 ÁÖ ¸ð´ÏÅÍ·Î °¡Á®¿À°Å³ª ¸ÞÀÎ À©µµ¿ì¸¦ º¸Á¶ ¸ð´ÏÅÍ·Î º¸³¾ ¼öµµ ÀÖ´Ù. ¾îµð±îÁö³ª ¼ºñ½º Â÷¿ø¿¡¼ À©µµ¿ìÀÇ Ãʱ⠹èÄ¡¸¦ »ç¿ëÀÚ°¡ ¾²±â ÆíÇϵµ·Ï ¸ÂÃß¾î ÁÖ¾úÀ» »ÓÀÌ´Ù. À©µµ¿ì°¡ ÀÚ½ÅÀÌ ½ÇÇàµÉ ¸ð´ÏÅ͸¦ ¼±ÅÃÇÏ´Â °£´ÜÇÑ ¿¹¸¦ º¸¿´´Âµ¥ Á» ´õ Äڵ带 Ãß°¡Çϸé ÈξÀ ´õ Áö´ÉÀûÀ¸·Î µ¿ÀÛÇϵµ·Ï ¸¸µé ¼öµµ ÀÖ´Ù.
¸¸¾à º¸Á¶ ¸ð´ÏÅͰ¡ ¿À¸¥ÂÊÀÌ ¾Æ´Ñ ¿ÞÂÊ¿¡ ÀÖ´Ù¸é Â÷Àϵ带 Á»ó´Ü¿¡ ¿Áö ¾Ê°í ¿ì»ó´Ü¿¡ ¿ ¼öµµ ÀÖÀ¸¸ç º¸Á¶ ¸ð´ÏÅͰ¡ ¿©·¯ °³ÀÏ °æ¿ì ±× Áß ÇÑ ¸ð´ÏÅ͸¦ ¼±ÅÃÇÒ ¼öµµ ÀÖ´Ù. À̶§´Â º¸Á¶ ¸ð´ÏÅÍÀÇ °¡»ó ÁÂÇ¥¸¦ ºñ±³ÇØ º¸°í ÁÖ ¸ð´ÏÅÍ¿Í °¡Àå °¡±î¿î ¸ð´ÏÅ͸¦ ¼±ÅÃÇÏ´Â °ÍÀÌ ÇÕ¸®ÀûÀÏ °ÍÀÌ´Ù. Á¤º¸Ã¢ÀÌ ¸¹À» °æ¿ì ¾î¶² Â÷Àϵ带 ¾î¶² ¸ð´ÏÅÍ¿¡ ¿ °ÍÀÎÁö »ç¿ëÀÚ°¡ ¹Ì¸® ÁöÁ¤ÇÒ ¼ö ÀÖµµ·Ï ¿É¼ÇÀ» Á¦°øÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù.
¹°·Ð ÀÌ·± ¸ðµç ¼ºñ½ºµéÀº ´ÙÁß ¸ð´ÏÅÍ È¯°æÀÏ ¶§¿¡¸¸ µ¿ÀÛÇØ¾ß ÇÑ´Ù. ¸ð´ÏÅͰ¡ Çϳª»ÓÀÌ¸é ¸ð´ÏÅ͸¦ ¼±ÅÃÇÒ ¿©Áö°¡ ¾øÀ¸¹Ç·Î ¸ðµç À©µµ¿ì´Â ÁÖ ¸ð´ÏÅÍ¿¡ ¿¸± ¼ö¹Û¿¡ ¾ø´Ù. ±×·¡¼ Â÷ÀϵåÀÇ WM_CREATE¿¡¼ ½Ã½ºÅÛ¿¡ ÀåÂøµÈ ¸ð´ÏÅͰ¡ 1º¸´Ù Å«Áö¸¦ ¸ÕÀú Á¡°ËÇÑ ÈÄ ¿°Å¸¦ ½ÃÀÛÇÑ´Ù.