6-3-¶ó. °¡º¯ ºñÀ²

À©µµ¿ìÁî¿¡ Æ÷ÇÔµÈ ½Ã°è ÇÁ·Î±×·¥À» º¸¸é À©µµ¿ìÀÇ Å©±â¿¡ ºñÇØ Ç×»ó ÀÏÁ¤ÇÑ ºñÀ²À» À¯ÁöÇϸç À©µµ¿ìÀÇ Å©±â°¡ º¯°æµÇ¸é ½Ã°èÀÇ Å©±âµµ °°ÀÌ º¯°æµÇ¾î Ç×»ó À©µµ¿ìÀÇ ÀÏÁ¤ ¿µ¿ªÀ» Â÷ÁöÇÑ´Ù.

ÀÌ·± ÇÁ·Î±×·¥Àº µµ´ëü ¾î¶² ¹æ¹ýÀ¸·Î ÀÛ¾÷ ¿µ¿ª¿¡ ±×·ÁÁö´Â Å©±â¸¦ ÀÏÁ¤ÇÏ°Ô À¯ÁöÇÏ´Â °ÍÀϱî? À©µµ¿ìÀÇ Å©±â°¡ º¯ÇÒ ¶§¸¶´Ù ±×¸²À» ±×¸®´Â Äڵ带 ¹Ù²Ù°Å³ª ÁÂÇ¥¸¦ ÀÏÁ¤ ºñÀ²·Î °öÇØÁÖ´Â °ÍÀÌ ¾Æ´Ò±î ÇÏ°í ÃßÃøµÇ°ÚÁö¸¸ ±×·¸Áö´Â ¾Ê´Ù. ±×¸²À» ±×¸®´Â Äڵ峪 ÁÂÇ¥´Â Ç×»ó ÀÏÁ¤ÇÏÁö¸¸ À©µµ¿ì È®ÀåÀ» º¯°æÇÔÀ¸·Î½á Àüü ÁÂÇ¥°èÀÇ ¹üÀ§¸¦ Á¶Á¤ÇØ ÁÖ´Â ¹æ¹ýÀ» »ç¿ëÇÑ´Ù.

À©µµ¿ì È®ÀåÀ» Á¶Á¤ÇÒ ¼ö ÀÖ´Â ¸ÊÇÎ ¸ðµå¿¡´Â MM_ISOTROPIC°ú MM_ANISOTROPIC µÎ °¡Áö°¡ ÀÖÀ¸¸ç ³ª¸ÓÁö ¸ÊÇÎ ¸ðµå¿¡¼­´Â À©µµ¿ì È®ÀåÀ» º¯°æÇÒ ¼ö ¾ø´Ù. ½Ã°è ÇÁ·Î±×·¥°ú ¶È°°Àº ¿ø¸®·Î Ç×»ó ÀÏÁ¤ÇÑ Å©±â¸¦ À¯ÁöÇÏ´Â ÇÁ·Î±×·¥À» Aniso.dsw¶ó´Â À̸§À¸·Î ¸¸µé°í WndProc¿¡ ´ÙÀ½ Äڵ带 ÀÛ¼ºÇØ º¸ÀÚ.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	POINT ar[]={25,10,125,10,140,30,10,30,25,10};
	HBRUSH BrR, BrB, BrY, OldBr;
	RECT rect;

	switch(iMessage) {
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		BrR=CreateSolidBrush(RGB(255,0,0));
		BrB=CreateSolidBrush(RGB(0,0,255));
		BrY=CreateSolidBrush(RGB(255,255,0));

		SetMapMode(hdc,MM_ANISOTROPIC);
		SetWindowExtEx(hdc,160,100,NULL);
		GetClientRect(hWnd, &rect);
		SetViewportExtEx(hdc,rect.right,rect.bottom,NULL);

		OldBr=(HBRUSH)SelectObject(hdc,BrR);
		Rectangle(hdc,20,30,130,90);
		SelectObject(hdc,BrB);
		Polygon(hdc,ar,5);

		SelectObject(hdc,BrY);
		Rectangle(hdc,30,40,60,70);
		Rectangle(hdc,90,40,120,70);
		Ellipse(hdc,135,5,155,25);

		SelectObject(hdc,OldBr);
		DeleteObject(BrR);
		DeleteObject(BrB);
		DeleteObject(BrY);
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

±×¸®°í ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇÑ ÈÄ ½ÇÇàÇØ º¸¸é ÀÌ ÇÁ·Î±×·¥µµ °ú¿¬ ½Ã°è ÇÁ·Î±×·¥°ú ¸¶Âù°¡Áö·Î À©µµ¿ì Å©±â¸¦ º¯°æÇÔ¿¡ µû¶ó ±×¸²ÀÇ Å©±âµµ º¯°æµÈ´Ù. ÇÁ·Î±×·¥ ½ÇÇàÁßÀÇ ¸ð½ÀÀº ´ÙÀ½°ú °°´Ù.

¡¡

ÀÌ·¸°Ô Á¤¸» ÀÛ°Ô ¸¸µé¾îµµ ±×¸²ÀÇ Å©±â´Â À©µµ¿ìÀÇ Å©±â¿¡ ºñÇØ Ç×»ó ÀÏÁ¤ÇÏ´Ù. Äڵ带 »ìÆ캸¸é ¸ÊÇÎ ¸ðµå´Â MM_ANISOTROPICÀ¸·Î µÇ¾î ÀÖÀ¸¸ç ´ÙÀ½ µÎ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© À©µµ¿ì¿Í ºäÆ÷Æ®ÀÇ È®ÀåÀ» ¼³Á¤ÇÑ´Ù.

BOOL SetWindowExtEx( HDC hdc, int nXExtent, int nYExtent, LPSIZE lpSize );
BOOL SetViewportExtEx( HDC hdc, int nXExtent, int nYExtent, LPSIZE lpSize );

À©µµ¿ì È®ÀåÀº ³í¸®ÀûÀÎ ÁÂÇ¥ ¹üÀ§¸¦ ÁöÁ¤Çϸç ÀÌ ÇÁ·Î±×·¥ÀÇ °æ¿ì (160,100)À¸·Î ¼³Á¤ÇÏ¿´´Ù. ±×·¡¼­ ±×¸²À» ±×¸®´Â ÇÔ¼öµéÀº ¸ðµÎ (160,100) ¾ÈÂÊÀÇ ÁÂÇ¥¸¦ »ç¿ëÇϸç (160,100)ÀÌ ¿ìÇÏ´ÜÀÇ ÁÂÇ¥°¡ µÈ´Ù. ºäÆ÷Æ®ÀÇ È®ÀåÀº ±×¸²ÀÌ È­¸éÀ¸·Î Ãâ·ÂµÇ´Â ºäÆ÷Æ®ÀÇ ÁÂÇ¥ ¹üÀ§¸¦ ¸»ÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥¿¡¼­´Â ºäÆ÷Æ® È®ÀåÀ» ÀÛ¾÷ ¿µ¿ªÀÇ ¿ìÇÏ´Ü Á¡±îÁö·Î È®ÀåÇÑ´Ù. ºäÆ÷Æ®ÀÇ ¿ìÇÏ´ÜÀÌ À©µµ¿ìÀÇ ¿ìÇÏ´Ü°ú ¸ÊÇεǹǷΠÀ©µµ¿ìÀÇ (160,100)Àº Ç×»ó ºäÆ÷Æ®ÀÇ ¿ìÇÏ´Ü°ú ´ëÀÀµÇ¸ç ±× Áß°£ Á¡µéÀº Àû´çÇÑ ºñÀ²ÀÇ ÁÂÇ¥¿Í ¸ÊÇεǾî À©µµ¿ìÀÇ Å©±â¿¡ »ó°ü¾øÀÌ Ç×»ó ÀÏÁ¤ÇÑ ºñÀ²ÀÇ Å©±â¸¦ À¯ÁöÇÏ´Â °ÍÀÌ´Ù.

MM_ANISOTROPIC ¸ÊÇÎ ¸ðµå´Â ÀÌ·±½ÄÀ¸·Î X,Y ¾î´À ¹æÇâÀ¸·Î³ª È®ÀåÀ» ÀÓÀÇ ¼³Á¤ÇÒ ¼ö ÀÖ´Â ¸ÊÇÎ ¸ðµåÀÌ´Ù. ÀÌ¿¡ ºñÇØ MM_ISOTROPICÀº È®ÀåÀ» ¸¶À½´ë·Î º¯°æÇÒ ¼ö ÀÖµµ·Ï ÇØ ÁÖ±â´Â Ç쵂 Ç×»ó °¡·Î, ¼¼·Î Á¾È¾ºñ¸¦ ÀÏÁ¤ÇÏ°Ô À¯Áö½ÃÄÑÁØ´Ù. ±×·¡¼­ È®Àå¿¡ µû¶ó ±×¸²ÀÌ ÀÛ¾ÆÁö°Å³ª Ä¿Áö±â´Â ÇÏÁö¸¸ Âî±×·¯ÁöÁö´Â ¾Êµµ·Ï ÇØ ÁØ´Ù. À§ Äڵ忡¼­ ¸ÊÇÎ ¸ðµå¸¦ MM_ISOTROPICÀ¸·Î º¯°æÇØ º¸¸é ¹«½¼ ¸»ÀÎÁö ½±°Ô ÀÌÇØÇÒ °ÍÀÌ´Ù. À©µµ¿ìÁîÀÇ ½Ã°è ÇÁ·Î±×·¥µµ »ç½ÇÀº MM_ISOTROPIC ¸ÊÇÎ ¸ðµå¸¦ »ç¿ëÇϱ⠶§¹®¿¡ ½Ã°èÀÇ Å©±â°¡ º¯ÇÒÁö¶óµµ Ç×»ó ¿ø¸ð¾çÀ» À¯ÁöÇϸç Ÿ¿øÀÌ µÇÁö´Â ¾Ê´Â´Ù.

¿©±â±îÁö ±×¸®±â ¸ðµå, ¸ÊÇÎ ¸ðµå, À©µµ¿ì¿Í ºäÆ÷Æ®¿¡ ´ëÇØ ¾Ë¾Æº¸¾Ò°í °ü·Ã ÇÔ¼öµé¿¡ ´ëÇؼ­µµ ¼Ò°³Çß´Ù. ±×·±µ¥ ÀÌ ÁîÀ½¿¡¼­ Win32 API ÇÔ¼öµéÀÇ À̸§À» Àß °üÂûÇØ º¸¸é Set~ ÇÔ¼ö°¡ ÀÖÀ¸¸é Get~ ÇÔ¼ö°¡ ¹Ýµå½Ã Á¸ÀçÇÑ´Ù´Â ¹ýÄ¢À» ¹ß°ßÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. Áï SetMapMode ÇÔ¼ö°¡ ÀÖÀ¸¸é GetMapMode ÇÔ¼ö°¡ ÀÖ°í SetROP2 ÇÔ¼ö°¡ ÀÖÀ¸¸é GetROP2 ÇÔ¼öµµ Á¸ÀçÇÑ´Ù. ¹°·Ð °¢ ÇÔ¼öÀÇ ½ÖÀº °°Àº ´ë»óÀ» ¼³Á¤/Á¶»çÇÏ´Â ÇÔ¼ö½ÖÀε¥ ´ëºÎºÐÀÇ API ÇÔ¼öµéÀº Get/Set ÇÔ¼ö°¡ ½ÖÀ¸·Î Á¸ÀçÇÑ´Ù.


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