¸¶.LandPort

DEVMODE¶ó´Â ¾ÆÁÖ º¹ÀâÇÑ ±¸Á¶Ã¼¿¡ ´ëÇØ ¾Ë¾Æ º¸¾Ò´Âµ¥ ÀÌ ±¸Á¶Ã¼¸¦ ¾Ë¸é Àμ⠹æ½ÄÀ» ÇÁ·Î±×·¥ÀÌ Á÷Á¢ º¯°æÇÒ ¼ö ÀÖ´Ù. À©µµ¿ìÁî¿¡¼­ ¿øÄ¢ÀûÀÎ Àμ⠰úÁ¤Àº ´ÙÀ½°ú °°´Ù. »ç¿ëÀÚ°¡ Àμâ¸í·ÉÀ» ³»¸®¸é ÇÁ·Î±×·¥Àº Àμ⠴ëÈ­»óÀÚ¸¦ º¸¿©ÁØ´Ù. ±×¸®°í ÀÌ ´ëÈ­»óÀÚ¿¡¼­ ¿øÇÏ´Â ÇÁ¸°Å͸¦ ¼±ÅÃÇÏ°í ¿É¼ÇÀ» Á¶Á¤ÇÑ ÈÄ È®ÀÎ ¹öÆ°À» ´©¸¦ °ÍÀÌ´Ù. ÇÁ·Î±×·¥Àº »ç¿ëÀÚÀÇ ¸í·ÉÀÌ ¶³¾îÁ³À» ¶§ »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ ¿É¼Ç´ë·Î Àμ⹰À» ¸¸µé¾î ³»¾ß ÇÑ´Ù. »ç¿ëÀÚ°¡ AÇÁ¸°Å͸¦ ¼±ÅÃÇß´Ù¸é Àμ⹰Àº Ʋ¸²¾øÀÌ AÇÁ¸°ÅÍ·Î º¸³»¾ß Çϸç A4¿ëÁö¸¦ ¼±ÅÃÇß´Ù¸é ÀÌ ¿ëÁö¿¡ ¸Â°Ô Àμ⸦ ÇÒ °ÍÀÌ°í 2Àå ÀμâÇ϶ó°í Çß´Ù¸é 2ÀåÀ» ÀμâÇØ¾ß ÇÑ´Ù.

ÀÌ °úÁ¤Àº ³Ê¹« ³Ê¹« ´ç¿¬Çϸç ÀüÇô ÀÌ»óÇØ º¸ÀÌÁö ¾Ê´Â´Ù. Àμ⠿ɼǿ¡ ´ëÇÑ ¸ðµç ¼±Åñǰú Ã¥ÀÓÀÌ »ç¿ëÀÚ¿¡°Ô ÀÖ´Â °ÍÀÌ´Ù. »ç½Ç ¸ðµç Àμ⠰úÁ¤ÀÌ ÀÌ ¿øÄ¢´ë·Î¸¸ µÈ´Ù¸é DEVMODE µûÀ§´Â ¸ô¶óµµ »ó°ü¾øÀ» °ÍÀ̳ª ½ÇÁ¦·Î´Â ÀÌ·± ÀÚ¿¬½º·¯¿î ¹æ¹ýÀ» »ç¿ëÇÒ ¼ö ¾ø´Â °æ¿ì°¡ ÀÖ´Ù. ¾î¶² °æ¿ì°¡ ±×·±Áö ¿¹¸¦ µé¾î º¸µµ·Ï ÇÏÀÚ.

 

¨ç ¹Ýµå½Ã ƯÁ¤ÇÑ ¿ëÁö¿¡¸¸ Âï¾î¾ß ÇÑ´Ù. Àμ⹰ÀÌ ¿ö³« Ä¿¼­ B5 µûÀ§¿¡´Â µµÀúÈ÷ ÂïÀ» ¼ö°¡ ¾ø´Ù°Å³ª ³¹ÀåÀ¸·Î ÀμⰡ ºÒ°¡´ÉÇÑ °æ¿ìÀε¥ ÀÌ·± °æ¿ì´Â »ç¿ëÀÚÀÇ ¿ëÁö ¼±ÅÃÀ» ¹«½ÃÇÏ°í °­Á¦·Î ¿ëÁö¸¦ ¹Ù²ã ÁÖ¾î¾ß ÇÑ´Ù.

¨è Àμ⹰ÀÇ ³»¿ë¿¡ µû¶ó ¿ëÁö ¹æÇâÀ» º¯°æÇØ¾ß ÇÑ´Ù. »ç¿ëÀÚ°¡ Àμ⹰À» Á÷Á¢ º¸°í ¿ëÁö¸¦ °áÁ¤ÇÒ ¼öµµ ÀÖÁö¸¸ ÀÌ·¸°Ô µÇ¸é ¹ø°Å·Î¿ì¹Ç·Î ÇÁ·Î±×·¥ÀÌ ¾Ë¾Æ¼­ ¿ëÁö ¹æÇâÀ» ÀûÀýÇÏ°Ô ¹Ù²ã ÁÖµµ·Ï ÇÏ°í ½Í´Ù. ±×·¡ÇÈ ÇÁ·Î±×·¥ÀÇ °æ¿ì ¡°ÆäÀÌÁö¿¡ ²Ë Â÷°Ô Ãâ·Â¡± µûÀ§ÀÇ ¿É¼ÇÀ» Á¦°øÇÏ´Â ÀÌ ¿É¼Ç´ë·Î¶ó¸é 1024*768ÀÇ ±×·¡ÇÈ ÆÄÀÏÀº °¡·Î·Î Âï¾î ÁÖ¾î¾ß ÇÑ´Ù.

¨é ±ØµµÀÇ Ãʺ¸ÀÚµéÀ» ´ë»óÀ¸·Î ÇÏ´Â °æ¿ì¸¦ µé ¼ö ÀÖ´Ù. ¾Æµ¿¿ë ¼ÒÇÁÆ®¿þ¾î³ª ³ªÀ̵å½Å ¾î¸£½ÅÀÌ »ç¿ëÇÏ´Â ¼ÒÇÁÆ®¿þ¾î´Â Àμ⠴ëÈ­»óÀÚÁ¶Â÷µµ ºÎ´ã½º·´´Ù. »ç¿ëÀÚÀÇ ÇÕ¸®ÀûÀÎ ¼³Á¤ º¯°æÀ» ±â´ëÇÒ ¼ö ¾øÀ¸¹Ç·Î ÇÁ·Î±×·¥Àº ¿À·ÎÁö Àμ⠸í·É¸¸ ¹Þ¾Æ °¡Àå ÃÖÀûÀÇ °á°ú¸¦ ³¾ ¼ö ÀÖµµ·Ï ¸ðµç ¼³Á¤À» ¾Ë¾Æ¼­ ¹Ù²ã ÁÖ¾î¾ß ÇÒ¸¸Å­ ¶È¶ÈÇØ¾ß ÇÑ´Ù.

¨ê ¿©·¯ °¡Áö ÀÌÀ¯·Î ÇÁ¸°ÅÍÀÇ Æ¯Á¤ ±â´ÉÀ» ÅëÁ¦ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. Ä÷¯ Àμ⸦ ¸øÇϵµ·Ï ÇѴٰųª Æ®·çŸÀÔ Àμ⠹æ½ÄÀ» ¹Ù²Û´Ù°Å³ª Àμâ Ç°ÁúÀ» Á¦ÇÑÇÏ´Â µîÀÇ ¿¹¸¦ µé ¼ö Àִµ¥ °ø¿ëÀ¸·Î »ç¿ëÇÏ´Â ÇÁ¸°ÅͶó¸é ÀÌ·± ±â´ÉÀÌ ÇÊ¿äÇÒ ¼öµµ ÀÖ´Ù.

 

¾ÆÁÖ Æ¯¼öÇÑ °æ¿ìÀÇ ¿¹¸¦ µç °Í °°Áö¸¸ »ç½Ç ÀÌ·± °æ¿ì´Â »ý°¢º¸´Ù ºó¹øÇÏ´Ù. ¿©±â¼­´Â °¡Àå ÈçÇÑ °æ¿ìÀÎ ¿ëÁö ¹æÇâÀ» ¹Ù²ãÁÖ´Â ¿¹¸¦ µé¾î º¸µµ·Ï ÇÏ°í Àμ⠸żö¸¦ ÇÁ·Î±×·¥ÀÌ ÅëÁ¦Çϵµ·Ï ÇØ º¸ÀÚ. ÀÌ ¿¹Á¦¸¦ À§ÇÑ ¿©·¯ ÀÌ·ÐÀº ÀÌ¹Ì ¾Õ¿¡¼­ ¸¹ÀÌ °øºÎ¸¦ ÇßÀ¸¹Ç·Î ¿¹Á¦¸¸ º¸¿© Á־ ÀÌÁ¦ ÀÌÇØ°¡ µÉ °ÍÀÌ´Ù. ¿¹Á¦´Â Àμ⠴ëÈ­»óÀÚ¸¦ »ç¿ëÇÏ´Â °æ¿ì¿Í ±âº» ÇÁ¸°Å͸¦ »ç¿ëÇÏ´Â °æ¿ì¿¡ ´ëÇØ µÎ °¡Áö¸¦ ÀÛ¼ºÇÏ¿´´Ù. ´ÙÀ½ ¿¹Á¦´Â Àμ⠴ëÈ­»óÀÚ¸¦ »ç¿ëÇÏ´Â ¹öÀüÀÌ´Ù.

 

void Print(int Orient)

{

   PRINTDLG pd;

   HDC hPrtdc;

   DEVMODE *dm;

   int xpage, ypage;

   int dpiX, dpiY;

   HPEN hPen, OldPen;

   HFONT MyFont, OldFont;

   DOCINFO doc;

   int Result;

   char str[]="ÇÁ¸°ÅÍ Å×½ºÆ®";

 

   memset(&pd,0,sizeof(PRINTDLG));

   pd.lStructSize=sizeof(PRINTDLG);

   pd.Flags=PD_RETURNDC;

   pd.hwndOwner=hWndMain;

   pd.nFromPage=1;

   pd.nToPage=1;

   pd.nMinPage=1;

   pd.nMaxPage=1;

   pd.nCopies=1;

 

   pd.hDevMode=GlobalAlloc(GHND,sizeof(DEVMODE));

   dm=(DEVMODE *)GlobalLock(pd.hDevMode);

   dm->dmSize=sizeof(DEVMODE);

   dm->dmFields=DM_ORIENTATION;

   dm->dmOrientation=Orient;

   GlobalUnlock(pd.hDevMode);

 

   PrintDlg(&pd);

   hPrtdc=pd.hDC;

   if (hPrtdc == NULL)

      return;

 

   // Àμâ ÀÛ¾÷À» ½ÃÀÛÇÑ´Ù.

   doc.cbSize=sizeof(DOCINFO);

   doc.lpszDocName="Test Document";

   doc.lpszOutput=NULL;

   doc.lpszDatatype=NULL;

   doc.fwType=0;

   Result=StartDoc(hPrtdc, &doc);

   if (Result <= 0) goto end;

   Result=StartPage(hPrtdc);

   if (Result <= 0) goto end;

 

   // ÇÁ¸°ÅÍÀÇ Çػ󵵸¦ ±¸ÇÑ´Ù.

   dpiX = GetDeviceCaps(hPrtdc, LOGPIXELSX);

   dpiY = GetDeviceCaps(hPrtdc, LOGPIXELSY);

   xpage = GetDeviceCaps(hPrtdc, HORZRES);

   ypage = GetDeviceCaps(hPrtdc, VERTRES);

 

   // »ç°ÝÇüÀ» ±×¸°´Ù.

   hPen=CreatePen(PS_SOLID,dpiY/10,RGB(0,0,255));

   OldPen=(HPEN)SelectObject(hPrtdc,hPen);

   Rectangle(hPrtdc,200,200,xpage-200,ypage-200);

   DeleteObject(SelectObject(hPrtdc,OldPen));

 

   // 1ÀÎÄ¡=1/72Æ÷ÀÎÆ®. ±×·¯¹Ç·Î nÆ÷ÀÎÆ® Å©±â=n*1/72*dpi°¡ µÈ´Ù.

   MyFont=CreateFont(50*dpiY/72,0,0,0,FW_NORMAL, FALSE, FALSE, FALSE,

      HANGEUL_CHARSET, 3,2,1,VARIABLE_PITCH | FF_ROMAN, "±Ã¼­");

   OldFont=(HFONT)SelectObject(hPrtdc, MyFont);

   SetTextAlign(hPrtdc,TA_CENTER);

   TextOut(hPrtdc,xpage/2,ypage/2,str,strlen(str));

   SelectObject(hPrtdc, OldFont);

   DeleteObject(MyFont);

 

   // Ãâ·ÂÀ» Á¾·áÇÑ´Ù.

   Result=EndPage(hPrtdc);

   if (Result <= 0) goto end;

 

   // Àμâ ÀÛ¾÷À» ³¡³½´Ù.

   Result=EndDoc(hPrtdc);

end:

   if (pd.hDevMode)

      GlobalFree(pd.hDevMode);

   if (pd.hDevNames)

      GlobalFree(pd.hDevNames);

   DeleteDC(hPrtdc);

   SetCursor(LoadCursor(NULL,IDC_ARROW));

   return;

}

 

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

   HDC hdc;

   PAINTSTRUCT ps;

   char Mes[]="¿ÞÂÊ = ¼¼·Î Âï±â, ¿À¸¥ÂÊ = °¡·ÎÂï±â";

 

   switch(iMessage) {

   case WM_LBUTTONDOWN:

      Print(DMORIENT_PORTRAIT);

      return 0;

   case WM_RBUTTONDOWN:

      Print(DMORIENT_LANDSCAPE);

      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));

}

 

Print ÇÔ¼ö´Â ¿ëÁö¿¡ °¡µæÂ÷°Ô »ç°¢ÇüÀ» ±×¸®°í ¿ëÁö Áß¾Ó¿¡ 50Æ÷ÀÎÆ® Å©±â·Î ¹®ÀÚ¿­À» Ãâ·ÂÇÑ´Ù. À̶§ ¿ëÁöÀÇ ¹æÇâÀº Á¦¾îÆÇ¿¡¼­ ¼³Á¤ÇÑ °ÍÀ» ¹«½ÃÇÏ°í ÀÌ ÇÔ¼öÀÇ Àμö·Î Àü´ÞµÈ Orient ¹æÇâÀ» µû¸£µµ·Ï µÇ¾î Àִµ¥ WndProc¿¡¼­´Â ÁÂ¿ì ¸¶¿ì½º ¹öÆ°¿¡ ´ëÇØ °¢°¢ DMORIENT_PORTRAIT ¹æÇâ°ú DMORIENT_LANDSCAPE ¹æÇâÀ¸·Î ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.

PrintDlg ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡ hDevMode¿¡ ¿øÇÏ´Â ÃʱⰪÀ» ´ëÀÔÇØ ÁÖ¸é ´ëÈ­»óÀÚ´Â ÀÌ ÃʱⰪ´ë·Î ¼³Á¤µÈ´Ù. hDevMode°¡ ¸Þ¸ð¸®¿¡ ´ëÇÑ ÇÚµéÀ̹ǷΠGlobalAllocÀ¸·Î ¸Þ¸ð¸®¸¦ ÇÒ´çÇ쵂 ¸¸¾à ÇÁ¸°ÅÍÀÇ °íÀ¯ Á¤º¸¿¡ ´ëÇÑ ÃʱⰪµµ º¯°æÇÏ°í ½Í´Ù¸é DEVMODE±¸Á¶Ã¼ÀÇ Å©±âº¸´Ù ´õ Å« ¸Þ¸ð¸®¸¦ ÇÒ´çÇÒ ¼öµµ ÀÖ´Ù. GlobalLockÀ¸·Î ¸Þ¸ð¸®ÀÇ Æ÷ÀÎÅ͸¦ ¹ÞÀº ÈÄ ¿øÇÏ´Â ÃʱⰪÀ» ¼³Á¤ÇÑ´Ù. ¿¹Á¦¿¡¼­´Â ¿ëÁöÀÇ ¹æÇ⸸ º¯°æÇÏ¿´À¸¸ç dmFields¿¡ DM_ORIENTATION Ç÷¡±×¸¸ ÁÖ¾ú´Âµ¥ ´Ù¸¥ ¼³Á¤°ªµµ ¾ó¸¶µçÁö º¯°æÇÒ ¼ö ÀÖ´Ù. hDevMode ¸Þ¸ð¸® Çڵ鿡 ÃʱⰪÀ» ¼³Á¤ÇÑ ÈÄ PrintDlg ÇÔ¼ö¸¦ È£ÃâÇϸé ÃʱⰪÀÌ Àû¿ëµÈ ´ëÈ­»óÀÚ°¡ ¿­¸± °ÍÀÌ´Ù. ´ÙÀ½Àº °¢°¢ ¸¶¿ì½º ¿ÞÂÊ, ¿À¸¥ÂÊ ¹öÆ°À» ´­·¶À» ¶§ ¿­¸®´Â Àμ⠴ëÈ­»óÀÚÀÇ ¸ð¾çÀÌ´Ù.

 

Àμ⠴ëÈ­»óÀÚÀÇ ¿ëÁö ¹æÇâÀÌ ÇÁ·Î±×·¥ÀÌ ¼³Á¤ÇÑ´ë·Î ÃʱâÈ­µÇ¾î ÀÖ´Ù. ¹°·Ð ÀÌ ÃʱⰪÀº ¾îµð±îÁö³ª ÃʱⰪÀÏ »ÓÀ̹ǷΠ»ç¿ëÀÚ°¡ ¹«½ÃÇÏ°í »õ·Î¿î °ªÀ¸·Î º¯°æÇÒ ¼ö´Â ÀÖÁö¸¸ ÀûÀýÇÑ ¿ëÁö ¹æÇâÀ» ÇÁ·Î±×·¥ÀÌ ÀÚµ¿À¸·Î ¸ÂÃç ÁÜÀ¸·Î½á »ç¿ëÀÚ°¡ ÇÒ ÀÏÀ» ´ë½Å ÇØ Áشٴ Àǹ̰¡ ÀÖ´Ù. Áï PrintDlg ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡ DEVMODE¸¦ º¯°æÇÏ´Â °ÍÀº »ç¿ëÀÚ¿¡°Ô ¿É¼ÇÀ» ±ÇÀåÇÏ´Â °ÍÀÏ »ÓÀÌÁö °­Á¦ÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. ¸¸¾à Àμ⠴ëÈ­»óÀÚ¿¡¼­ »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ ¿É¼ÇÀ» ¹«½ÃÇÏ°í ´Ù½Ã Çѹø °­Á¦·Î ¿É¼ÇÀ» ¹Ù²Ù°íÀÚ ÇÑ´Ù¸é ´ëÈ­»óÀÚ°¡ ´ÝÈù ÈÄ¿¡ DEVMODE¸¦ ¶Ç º¯°æÇÏ¸é µÈ´Ù.

 

PrintDlg(&pd);

hPrtdc=pd.hDC;

if (hPrtdc == NULL)

   return;

 

// ´ëÈ­»óÀÚ¸¦ ´ÝÀº ÈÄ¿¡ °­Á¦·Î ¿ëÁö ¹æÇâÀ» º¯°æÇÑ´Ù.

dm=(DEVMODE *)GlobalLock(pd.hDevMode);

dm->dmFields=DM_ORIENTATION;

dm->dmOrientation=Orient;

ResetDC(hPrtdc,dm);

GlobalUnlock(pd.hDevMode);

 

DEVMODE ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅ͸¦ ¾òÀº ÈÄ ´Ù½Ã ÀÌ ±¸Á¶Ã¼ÀÇ ³»¿ëÀ» º¯°æÇÏ¿´´Ù. ±×¸®°í ÀÌ º¯°æ»çÇ×À» ÀåÄ¡¿¡ Àû¿ëÇϱâ À§ÇØ ResetDC ÇÔ¼ö¸¦ ºÒ·¯ ÁØ´Ù. ResetDC ÇÔ¼ö´Â ÀÌ¹Ì »ý¼ºµÈ DCÀÇ ¼³Á¤ Á¤º¸¸¦ Àç¼³Á¤Çϴµ¥ ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇϸé ÀμâÁß¿¡µµ ¿ëÁöÀÇ Á¾·ù³ª ¹æÇâÀ» º¯°æÇÒ ¼ö ÀÖÀ¸³ª ´Ü ÀåÄ¡ÀÇ À̸§À̳ª Æ÷Æ® µûÀ§¸¦ º¯°æÇÏ´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù.

´ÙÀ½Àº Àμ⠴ëÈ­»óÀÚ¸¦ º¸¿©ÁÖÁö ¾Ê°í ±âº» ÇÁ¸°ÅÍ¿¡ ´ëÇØ ¿ëÁö ¹æÇâ°ú Àμ⠸żö¸¦ ÇѲ¨¹ø¿¡ º¯°æÇϵµ·Ï ÃʱⰪÀ» ¼³Á¤ÇØ º¸ÀÚ. Àμ⹰ÀÇ ¼º°Ý¿¡ µû¶ó ÇÁ·Î±×·¥ÀÌ ÀÚµ¿À¸·Î ÃʱⰪÀ» °áÁ¤ÇÏ°íÀÚ ÇÒ ¶§ ÀÌ ¹æ¹ýÀ» »ç¿ëÇϴµ¥ Á¦¾îÆÇ¿¡¼­ ¼³Á¤ÇÑ ¿ëÁö ¹æÇâÀ» ¹«½ÃÇÏ°í ÃʱⰪÀ» º¯°æÇÒ ¼ö ÀÖ´Ù. ¼Ò½º´Â ´ÙÀ½°ú °°´Ù.

 

void Print(int Orient, int nCopy)

{

   HDC hPrtdc;

   int xpage, ypage;

   int dpiX, dpiY;

   HPEN hPen, OldPen;

   HFONT MyFont, OldFont;

   DOCINFO doc;

   int Result;

   char str[]="ÇÁ¸°ÅÍ Å×½ºÆ®";

 

   char szPrinter[128];

   DWORD dwPrinter=128;

   HANDLE hPrinter;

   DEVMODE *dmo;

 

   SetCursor(LoadCursor(NULL,IDC_WAIT));

 

   // ±âº» ÇÁ¸°ÅÍÀÇ ¼³Á¤À» Á¶»çÇÑ´Ù. ¹æÇâ Çʵ常 Àç¼³Á¤ÇÑ´Ù.

   if (MyGetDefaultPrinter(szPrinter) == FALSE)

      return;

   OpenPrinter(szPrinter,&hPrinter,NULL);

   Result=DocumentProperties(hWndMain, hPrinter, szPrinter, NULL, NULL, 0);

   dmo=(DEVMODE *)malloc(Result);

   DocumentProperties(hWndMain, hPrinter, szPrinter, dmo, NULL, DM_OUT_BUFFER);

   dmo->dmFields=DM_ORIENTATION | DM_COPIES;

   dmo->dmOrientation = Orient;

   dmo->dmCopies = nCopy;

   DocumentProperties(hWndMain, hPrinter, szPrinter, dmo, dmo, DM_OUT_BUFFER | DM_IN_BUFFER);

 

   hPrtdc=CreateDC(NULL,szPrinter,NULL,dmo);

 

   if (hPrtdc==NULL)

      goto end;

 

   // Àμâ ÀÛ¾÷À» ½ÃÀÛÇÑ´Ù.

   doc.cbSize=sizeof(DOCINFO);

   doc.lpszDocName="Test Document";

   doc.lpszOutput=NULL;

   doc.lpszDatatype=NULL;

   doc.fwType=0;

   Result=StartDoc(hPrtdc, &doc);

   if (Result <= 0) goto end;

   Result=StartPage(hPrtdc);

   if (Result <= 0) goto end;

 

   // ÇÁ¸°ÅÍÀÇ Çػ󵵸¦ ±¸ÇÑ´Ù.

   dpiX = GetDeviceCaps(hPrtdc, LOGPIXELSX);

   dpiY = GetDeviceCaps(hPrtdc, LOGPIXELSY);

   xpage = GetDeviceCaps(hPrtdc, HORZRES);

   ypage = GetDeviceCaps(hPrtdc, VERTRES);

 

   // »ç°ÝÇüÀ» ±×¸°´Ù.

   hPen=CreatePen(PS_SOLID,dpiY/10,RGB(0,0,255));

   OldPen=(HPEN)SelectObject(hPrtdc,hPen);

   Rectangle(hPrtdc,200,200,xpage-200,ypage-200);

   DeleteObject(SelectObject(hPrtdc,OldPen));

 

   // 1ÀÎÄ¡=1/72Æ÷ÀÎÆ®. ±×·¯¹Ç·Î nÆ÷ÀÎÆ® Å©±â=n*1/72*dpi°¡ µÈ´Ù.

   MyFont=CreateFont(50*dpiY/72,0,0,0,FW_NORMAL, FALSE, FALSE, FALSE,

      HANGEUL_CHARSET, 3,2,1,VARIABLE_PITCH | FF_ROMAN, "±Ã¼­");

   OldFont=(HFONT)SelectObject(hPrtdc, MyFont);

   SetTextAlign(hPrtdc,TA_CENTER);

   TextOut(hPrtdc,xpage/2,ypage/2,str,strlen(str));

   SelectObject(hPrtdc, OldFont);

   DeleteObject(MyFont);

 

   // Ãâ·ÂÀ» Á¾·áÇÑ´Ù.

   Result=EndPage(hPrtdc);

   if (Result <= 0) goto end;

 

   // Àμâ ÀÛ¾÷À» ³¡³½´Ù.

   Result=EndDoc(hPrtdc);

end:

   free(dmo);

   ClosePrinter(hPrinter);

   DeleteDC(hPrtdc);

   SetCursor(LoadCursor(NULL,IDC_ARROW));

   return;

}

 

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

   HDC hdc;

   PAINTSTRUCT ps;

   char Mes[]="¿ÞÂÊ = ¼¼·Î Âï±â, ¿À¸¥ÂÊ = °¡·ÎÂï±â";

 

   switch(iMessage) {

   case WM_LBUTTONDOWN:

      Print(DMORIENT_PORTRAIT,1);

      return 0;

   case WM_RBUTTONDOWN:

      Print(DMORIENT_LANDSCAPE,2);

      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));

}

 

ÀÌ ¿¹Á¦ÀÇ Print ÇÔ¼ö´Â ¿ëÁöÀÇ ¹æÇâ°ú Àμ⠸żö¸¦ Àü´Þ¹Þ¾Æ ±âº» ÇÁ¸°ÅÍ¿¡ Ãâ·ÂÇÑ´Ù. Àμ⸦ Çϱâ Àü¿¡ ±âº» ÇÁ¸°Å͸¦ ±¸ÇÏ°í ÀÌ ÇÁ¸°ÅÍÀÇ ¼³Á¤À» º¯°æÇϱâ À§ÇØ DocumentProperties ÇÔ¼ö¸¦ ¼¼¹øÀ̳ª È£ÃâÇÑ´Ù. ù¹ø° È£ÃâÀº DEVMODE ±¸Á¶Ã¼ÀÇ Å©±â¸¦ Á¶»çÇϱâ À§Çؼ­À̸ç ÀÌ È£Ãâ¿¡¼­ Á¶»çµÈ Å©±â¸¸Å­ dmo¿¡ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ¿´´Ù. µÎ¹ø° È£ÃâÀº ÇöÀç ¼³Á¤µÈ DEVMODE¸¦ Á¶»çÇϱâ À§Çؼ­Àε¥ ¹«Á¶°Ç ÃʱⰪÀ» º¯°æÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ¼³Á¤µÈ ÃʱⰪÀ» Á¶»çÇÑ ÈÄ ¿øÇÏ´Â ºÎºÐ¸¸ º¯°æÇØ¾ß ÇÑ´Ù. °ªÀ» Á¶»çÇϱâ À§ÇØ dmo¸¦ Ãâ·Â¹öÆÛ·Î Á¦°øÇßÀ¸¸ç Ç÷¡±×´Â DM_OUT_BUFFER·Î ÁÖ¾ú´Ù.

ÀÌ·¸°Ô Á¶»çµÈ ÃʱⰪ dmo¸¦ ÀÌÁ¦ ¿øÇϴ´ë·Î ¼öÁ¤ÇÑ´Ù. dmFileds¿¡ DM_ORIENTATION°ú DM_COPIES Ç÷¡±×¸¦ ÁÖ¾î ¿ëÁöÀÇ ¹æÇâ°ú Àμ⠸żö¸¦ º¯°æÇÒ °ÍÀÓÀ» ¾Ë¸®°í °¢ ¸â¹ö¿¡ °ªÀ» ¼³Á¤ÇÏ¿´´Ù. ¿ëÁöÀÇ ¹æÇâÀº Àμö·Î Àü´ÞµÈ Orient°ªÀ» ´ëÀÔÇÏ¿´°í Àμ⠸żö´Â ¹«Á¶°Ç nCopy¸Å·Î º¯°æÇÑ´Ù. dmo¿¡ ¿øÇÏ´Â ÃʱⰪÀ» ¼³Á¤ÇÑ ÈÄ ¸¶Áö¸·À¸·Î DocumentProperties ÇÔ¼ö¸¦ È£ÃâÇÏ¿© dmo¸¦ ÀԷ°ªÀ¸·Î Àü´ÞÇØ ÁÖ¾ú´Ù. ±×·¯¸é dmo¿¡ ¼³Á¤µÈ ¿ëÁö ¹æÇâ°ú Àμ⠸żö°¡ hPrinter ÇÁ¸°ÅÍ¿¡ ¼³Á¤µÈ´Ù.

ÀÌ ¿¹Á¦´Â ÇÁ¸°Å͸¦ ¼±ÅÃÇÏ´Â ´ëÈ­»óÀÚ¸¦ ¶ç¿ìÁö ¾Ê°í ¹«Á¶°Ç ±âº» ÇÁ¸°ÅÍ·Î Ãâ·ÂÀ» º¸³»±â ¶§¹®¿¡ »ç¿ëÀÚ°¡ ÃʱⰪÀ» º¯°æÇÒ ±âȸ°¡ ¾ø´Ù. µû¶ó¼­ ¸¶¿ì½º ¹öÆ°À» ´©¸£¸é Áï½Ã Ãâ·Â¹°ÀÌ ÀμâµÇ´Âµ¥ ¼¼·Î ¹æÇâÀº 1ºÎ, °¡·Î ¹æÇâÀº 2ºÎ¸¦ ÀμâÇϵµ·Ï ÇÏ¿´´Ù. ´ÙÀ½Àº ÁÂ¿ì ¸¶¿ì½º ¹öÆ°À» ´­·¶À» ¶§ÀÇ Àμ⠰á°úÀÌ´Ù.

 

ÇÁ·Î±×·¥ÀÌ Àμ⹰ÀÇ ¸ð¾çÀ» ÆǺ°ÇÏ¿© ÀÚµ¿À¸·Î Âï¾îÁÖ°íÀÚ ÇÒ ¶§ °¡Àå ÀûÀýÇÑ ¹æ¹ýÀ̸ç Ãʺ¸ÀÚ¿ë ÇÁ·Î±×·¥À̳ª ¼­¹ö¿ë ÇÁ·Î±×·¥¿¡¼­ ÀÌ ¹æ¹ýÀ» ¸¹ÀÌ »ç¿ëÇÑ´Ù. DEVMODEÀÇ ¸ðµç ¸â¹ö¿¡ ´ëÇØ ÀÏÀÏÀÌ ½Ç½ÀÀ» ÇØ º¼ ¼ö´Â ¾ø°ÚÁö¸¸ ÀÌ ¹æ¹ý´ë·Î¶ó¸é ¿ëÁöÀÇ Å©±â, È®´ë Ãà¼Ò ºñÀ², Èæ¹é Àμâ, ÇѸ鿡 ¿©·¯ ÆäÀÌÁö Àμ⠵îÀÇ ¿É¼Çµµ ÇÁ·Î±×·¥ÀÌ ÅëÁ¦ÇÒ ¼ö ÀÖ´Ù.