6-3-´Ù. À©µµ¿ì¿Í ºäÆ÷Æ®

¸ÊÇÎ ¸ðµå¸¦ Á¦´ë·Î ÀÌÇØÇÏ·Á¸é ¸î°¡Áö ¿ë¾î¿¡ ´ëÇØ ÀÌÇØÇØ¾ß ÇÑ´Ù. ¿ì¼± À©µµ¿ì¿Í ºäÆ÷Æ®¿¡ ´ëÇØ ¾Ë¾Æ¾ß ÇÏ¸ç ¿øÁ¡°ú È®Àå¿¡ ´ëÇؼ­µµ ¾Ë¾Æ¾ß ÇÑ´Ù. À©µµ¿ì(Window)´Â ³í¸® ÁÂÇ¥°¡ »ç¿ëµÇ´Â Ç¥¸éÀ» ¸»ÇÏ¸ç ±×·¡ÇÈ Ãâ·Â ÇÔ¼ö´Â À©µµ¿ì¿¡ ±×·¡ÇÈÀ» Ãâ·ÂÇÑ´Ù. ºäÆ÷Æ®(Viewport)´Â ¹°¸® ÁÂÇ¥°¡ »ç¿ëµÇ´Â ¿µ¿ªÀ» ¸»ÇÏ¸ç ½ÇÁ¦·Î »ç¿ëÀÚÀÇ ´«¿¡ º¸ÀÌ´Â ÁÂÇ¥ ¿µ¿ªÀÌ´Ù. TextOut(100,100,...) ÇÔ¼ö´Â À©µµ¿ì ¿µ¿ªÀÇ (100,100)¿¡ ¹®ÀÚ¿­À» Ãâ·ÂÇϸç ÀÌ·¸°Ô Ãâ·ÂµÈ ¹®ÀÚ¿­Àº ºäÆ÷Æ®¸¦ ÅëÇØ ¿ì¸® ´«¿¡ º¸ÀÌ°Ô µÈ´Ù. ¹°·Ð ºäÆ÷Æ®¿¡¼­ÀÇ ÁÂÇ¥´Â ¸ÊÇÎ ¸ðµå¿¡ µû¶ó ´Þ¶óÁø´Ù. ¿äÄÁµ¥ À©µµ¿ì´Â ³í¸® ÁÂÇ¥¸¦ »ç¿ëÇÏ´Â ¿µ¿ªÀÌ¸ç ºäÆ÷Æ®´Â ¹°¸® ÁÂÇ¥¸¦ »ç¿ëÇÏ´Â ¿µ¿ªÀ» ¸»ÇÑ´Ù.

¿øÁ¡(Origin)À̶õ ÁÂÇ¥ÀÇ ±âÁØÀÌ µÇ´Â Á¡, Áï (0,0)ÀÇ ÁÂÇ¥¸¦ ¸»ÇÑ´Ù. µðÆúÆ®·Î ¿øÁ¡Àº ¸ÊÇÎ ¸ðµå¿¡ »ó°ü¾øÀÌ È­¸éÀÇ Á»ó´Ü¿¡ À§Ä¡ÇÏ°í ÀÖ´Ù. ±×·¯³ª ¼öÇÐÁÂÇ¥°è¸¦ Ç¥ÇöÇÏ°íÀÚ ÇÒ °æ¿ì´Â ¿øÁ¡ÀÌ È­¸éÀÇ Á»ó´Ü¿¡ ÀÖ´Â °Íº¸´Ù Áß¾Ó¿¡ ÀÖ´Â °ÍÀÌ ´õ ÀûÇÕÇÏ´Ù. ±×·¡¼­ ÇÊ¿ä¿¡ µû¶ó ¿øÁ¡À» º¯°æ½Ãų ¼ö ÀÖµµ·Ï ´ÙÀ½ µÎ ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù.

BOOL SetViewportOrgEx( HDC hdc, int X, int Y, LPPOINT lpPoint );
BOOL SetWindowOrgEx( HDC hdc, int X, int Y, LPPOINT lpPoint );

°¢°¢ ºäÆ÷Æ®¿Í À©µµ¿ìÀÇ ¿øÁ¡À» Àμö·Î ÁöÁ¤ÇÑ ÁÂÇ¥ (X,Y)·Î À̵¿½ÃŲ´Ù. 4¹ø° Àμö lpPoint´Â º¯°æÇϱâ ÀüÀÇ ¿ø·¡ ¿øÁ¡°ªÀ» µ¹·Á¹Þ±â À§ÇØ »ç¿ëÇϴµ¥ ¿ø·¡ÀÇ ¿øÁ¡°ªÀÌ ÇÊ¿ä¾øÀ» °æ¿ì´Â NULLÀ» »ç¿ëÇÏ¸é µÈ´Ù. µÎ ¿øÁ¡À» µ¿½Ã¿¡ À̵¿½Ãų ÇÊ¿ä´Â ¾øÀ¸¸ç µÑ Áß ÇϳªÀÇ ¿øÁ¡¸¸À» ¿Å°Üµµ ¿øÇÏ´Â °á°ú¸¦ ¾òÀ» ¼ö ÀÖÁö¸¸ º¸Åë ºäÆ÷Æ®ÀÇ ¿øÁ¡À» À̵¿½ÃÅ°´Â °ÍÀÌ ´õ Æí¸®ÇÏ´Ù. ¿Ö³ÄÇϸé À©µµ¿ìÀÇ ¿øÁ¡Àº ³í¸® ´ÜÀ§·Î ÁöÁ¤µÇ¸ç ºäÆ÷Æ®ÀÇ ¿øÁ¡Àº Çȼ¿ ´ÜÀ§·Î Ç¥ÇöµÇ±â ¶§¹®ÀÌ´Ù.

¾Æ¹«·¡µµ ³í¸® ´ÜÀ§º¸´Ù´Â Çȼ¿ ´ÜÀ§°¡ ´õ »ç¿ëÇϱâ´Â ½±´Ù. ¿øÁ¡À» À̵¿½ÃÄÑ ¼öÇÐÁÂÇ¥°è¿Í ¿ÏÀüÈ÷ µ¿ÀÏÇÑ ÁÂÇ¥°è¸¦ °¡Áöµµ·Ï ¸¸µé¾î º¸°í ¿©±â¿¡ ºÎµå·¯¿î »çÀÎ °î¼±À» ±×·Áº¸µµ·Ï ÇÏÀÚ. Sine.cppÀÇ ¼Ò½º´Â ´ÙÀ½°ú °°´Ù.

#include <math.h>
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	double f;
	int y;
	switch(iMessage) {
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hWnd,&ps);
		SetMapMode(hdc,MM_LOENGLISH);
		SetViewportOrgEx(hdc,200,150,NULL);
		MoveToEx(hdc, -2000, 0,NULL);
		LineTo(hdc, 2000, 0);
		MoveToEx(hdc,0,-2000,NULL);
		LineTo(hdc,0,2000);
		for (f=-500;f<1000;f++) {
			y=(int)(sin(f*3.14/180)*100);
			SetPixel(hdc, (int)f, y,RGB(0,0,0));
		}
		EndPaint(hWnd, &ps);
		return 0;
	default:
		return(DefWindowProc(hWnd,iMessage,wParam,lParam));
	}
}

»çÀΰªÀ» ±¸ÇÏ´Â ¼öÇÐ ÇÔ¼ö¸¦ »ç¿ëÇϹǷΠmath.h¸¦ Æ÷ÇÔ½ÃÄ×´Ù. µÎ°³ÀÇ º¯¼ö f¿Í y¸¦ °¡Áö°í f¸¦ -500µµ¿¡¼­ 1000µµ±îÁö º¯È­½ÃÅ°¸ç yÁÂÇ¥¸¦ ±¸ÇÑ ÈÄ ÀÌ ÁÂÇ¥¿¡ Á¡À» Âï¾î »çÀÎ °î¼±À» ¸¸µç´Ù. Ãâ·Â °á°ú´Â ´ÙÀ½°ú °°´Ù.

¸ðµç ÀÏÀº WM_PAINT ¾È¿¡¼­ ÀϾ¹Ç·Î WM_PAINT ¸Þ½ÃÁö¸¦ ºÐ¼®ÇØ º¸¸é µÈ´Ù. ¿ì¼± WM_PAINTÀÇ ¼±µÎ¿¡¼­ ¸ÊÇÎ ¸ðµå¸¦ MM_LOENGLISH·Î º¯°æÇÏ¿´´Ù. ±×·¡¼­ ±×·¡ÇÈ Ãâ·Â ÇÔ¼ö¿¡¼­ ÁöÁ¤ÇÏ´Â ´ÜÀ§´Â ¸ðµÎ 0.01ÀÎÄ¡°¡ µÇ¸ç YÃàÀÌ À§·Î Áõ°¡ÇϹǷΠ¼öÇÐ ÁÂÇ¥°è¿Í °°Àº Áõ°¡¹æÇâÀ» °¡Áö°Ô µÈ´Ù. ¹Ù·Î ¾Æ·¡¿¡¼­ ºäÆ÷Æ®ÀÇ ¿øÁ¡À» (200,150)À¸·Î º¯°æÇÏ¿´´Ù. ±×·¡¼­ ¿ì¸®°¡ º¸´Â È­¸éÀº (200,150)ÀÌ ¿øÁ¡ÀÌ µÇ´Â ¼öÇÐÁÂÇ¥°è¿Í µ¿ÀÏÇÑ °ø°£ÀÌ µÈ´Ù. ¸ÊÇÎ ¸ðµå¸¦ º¯°æÇÑ ÈÄ ¼±À» µÎ °³ ±×¾î ¼öÇÐ ÁÂÇ¥°èÀÇ ÃàÀ» Ç¥½ÃÇϵµ·Ï ÇÏ¿´´Ù. ÁÂÇ¥°ª¿¡ À½¼ö°¡ »ç¿ëµÇ´Â °ÍÀÌ ÀÌ»óÇÏ°Ô º¸ÀÏÁöµµ ¸ð¸£°ÚÁö¸¸ ¸ÊÇÎ ¸ðµå¿Í ¿øÁ¡ÀÌ º¯°æµÇ¸é °ø°£ ÀÚü°¡ ½Ç¼ö °ø°£À̱⠶§¹®¿¡ À½¼öµµ ´ç¿¬È÷ »ç¿ëµÉ ¼ö ÀÖ´Ù.

ÃàÀ» ±×¸° ÈÄ »çÀÎ ÇÔ¼öÀÇ ÀԷ°ªÀÎ f¸¦ -500¿¡¼­ 1000±îÁö ·çÇÁ¸¦ µ¹¸ç °¢ °ªÀÇ »çÀΰªÀ» ±¸ÇØ Á¡À» Âï´Â´Ù. sin ÇÔ¼ö°¡ ¹Þ¾ÆµéÀÌ´Â °ªÀÌ ¶óµð¾È °ªÀ̹ǷΠÀÌ °ªÀ» °¢µµ·Î ¹Ù²Ù±â À§ÇØ 3.14¸¦ °öÇÏ°í 180À¸·Î ³ª´©¾ú´Ù. °£´ÜÇÑ ¼öÇÐ °ø½ÄÀ̹ǷΠȤ½Ã ÀÌ ½ÄÀÌ ÀÌÇØ°¡ µÇÁö ¾ÊÀ¸¸é Ã¥²ÉÀÌ¿¡ ²È¾ÆµÐ Á¤¼®À̳ª ÇعýµîÀÇ ¼öÇÐ Âü°í¼­¸¦ º¸±â ¹Ù¶õ´Ù.

¾Æ¹¸µç ¿ì¸®´Â ÀÌ ¿¹Á¦¸¦ ÅëÇØ ¼öÇÐ ÁÂÇ¥°è¸¦ ¸¸µé¾ú°í »çÀÎ °î¼±À» ±×·È´Ù. ±×·³ ÀÌÁ¦ ÀÌ ¿¹Á¦¸¦ Á¶±Ý¾¿ ¼öÁ¤ÇØ °¡¸é¼­ °á°ú°¡ ¾î¶»°Ô ´Þ¶óÁö´ÂÁö º¸ÀÚ. ¸ÕÀú ¸ÊÇÎ ¸ðµå¸¦ MM_HIENGLISH·Î º¯°æÇØ º¸ÀÚ. ±×·¯¸é ´ÜÀ§°¡ 0.001ÀÎÄ¡·Î ´õ ÀÛ¾ÆÁö¸ç µû¶ó¼­ ±×·ÁÁö´Â ±×¸²Àº ÈξÀ ´õ ÀÛ°Ô ±×·ÁÁø´Ù.

MM_TEXT³ª MM_LOMETRIC µîÀÇ ¸ÊÇÎ ¸ðµå·Îµµ ¹Ù²Ù¾î º¸¸é °¢ ¸ÊÇθðµåº°·Î ±×¸²ÀÇ Å©±â°¡ ´Þ¶óÁø´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. À̹ø¿¡´Â ¿øÁ¡À» º¯°æÇØ º¸¾Æ¶ó. SetViewportOrg ÇÔ¼öÀÇ Àμö¸¦ º¯°æÇÏ¸é ¿øÁ¡ÀÌ º¯°æÇÑ °÷À¸·Î °¡ ÀÖ°Ô µÉ °ÍÀÌ´Ù. À̶§ ¿øÁ¡ÀÌ º¯°æµÇ¾ú´Ù°í Çؼ­ ÃàÀÇ ÁÂÇ¥°¡ ´Þ¶óÁö°Å³ª Á¡ÀÇ ÁÂÇ¥°¡ ´Þ¶óÁ®¾ßÇÒ ÇÊ¿ä´Â ÀüÇô¾ø´Ù. ¿Ö³ÄÇÏ¸é ¸ðµç ±×·¡ÇÈ ÇÔ¼öµéÀº º¯°æµÈ ¿øÁ¡ÀÇ ¿µÇâÀ» ¹Þ±â ¶§¹®ÀÌ´Ù. sin ÇÔ¼ö¸¦ cos³­ tan ÇÔ¼ö·Îµµ º¯°æÇØ º¸¸é »ï°¢ÇÔ¼ö ±×·¡ÇÁµéÀ» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

¡¡

¸ÊÇÎ ¸ðµåÀÇ °³³ä¿¡ ´ëÇØ ¾Ë¾Æ º¸¾Ò´Âµ¥ Áö±Ý±îÁö ¹è¿î ³»¿ëµé¿¡ ºñÇؼ­´Â ´Ù¼Ò ¾î·Æ´Ù´Â »ý°¢ÀÌ µé °ÍÀÌ´Ù. ¿À·¡Àü¿¡ Àؾî¹ö¸° ¼öÇÐ ¾ê±âµµ ³ª¿À°í »õ·Î¿î ¿ë¾îµµ ¿©·¯ °³ µîÀåÇؼ­ È¥¶õ½º·´Áö³ª ¾Ê¾Ò´ÂÁö ¸ð¸£°Ú´Ù. ¾Æ¸¶ ´ëºÎºÐÀÇ »ç¶÷ÀÌ "´ëÃæÀº ¾Ë°Ú´Âµ¥... ±Û½ê" ÇÏ´Â ¹ÝÀÀÀ» º¸ÀÏ °Í °°Àºµ¥ ±× Á¤µµ¸é ÃæºÐÇÏ´Ù. ´ÙÇàÈ÷ ¸ÊÇÎ ¸ðµå´Â ÀÚÁÖ »ç¿ëµÇÁö ¾ÊÀ¸¹Ç·Î ´çÀå ¸ô¶óµµ µÇ¸ç ±×´ÙÁö »ó¼¼ÇÏ°Ô ¾Ë ÇÊ¿äµµ ¾øÀ¸¹Ç·Î ´ëÃæ Àо°í ´ÙÀ½¿¡ ÇÊ¿äÇÒ ¶§ ´õ °øºÎÇØ º¸±â ¹Ù¶õ´Ù.


¸ñ·Ï º¸±â  ´ÙÀ½ °­Á            written by http://www.winapi.co.kr