¸¶.¸ð´ÏÅÍ À§Ä¡ Á¶»ç

´ÙÀ½ ¼¼ ÇÔ¼ö´Â ƯÁ¤ ¿ÀºêÁ§Æ®°¡ ¾î¶² ¸ð´ÏÅÍÀ§¿¡ ÀÖ´ÂÁö Á¶»çÇØ ÁØ´Ù. ÇÑ Á¡¿¡ ´ëÇØ, »ç°¢ ¿µ¿ª¿¡ ´ëÇØ, À©µµ¿ì¿¡ ´ëÇØ Á¶»çÇÒ ¼ö ÀÖÀ¸¸ç ÀÌ ¿ÀºêÁ§Æ®°¡ ÀÖ´Â ¸ð´ÏÅÍÀÇ ÇÚµéÀÌ ¸®ÅϵȴÙ.

 

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º¸´Ù Å«Áö¸¦ ¸ÕÀú Á¡°ËÇÑ ÈÄ ¿­°Å¸¦ ½ÃÀÛÇÑ´Ù.