7-5-°¡. ½ºÅ©·Ñ ¹Ù

½ºÅ©·Ñ ¹Ù´Â Áö±Ý±îÁö ³íÇÑ ÄÁÆ®·Ñµé¿¡ ºñÇؼ­´Â ºñ±³Àû º¹ÀâÇÑ ÄÁÆ®·ÑÀÌ´Ù. ¿©±â¼­´Â ´ëÃæ ¿¹Á¦ ±¸°æ¸¸ ÇÏ°í ÀÚ¼¼ÇÑ ³»¿ëÀº ´ÙÀ½¿¡ ¾Ë¾Æº¸´Â °ÍÀÌ ÁÁÀ» °Í °°´Ù.

½ºÅ©·Ñ ¹Ù´Â "scrollbar"À©µµ¿ì Ŭ·¡½º·Î »ý¼ºÇÏ¸ç ¼öÆò ½ºÅ©·Ñ ¹ÙÀÏ °æ¿ì SBS_HORZ ½ºÅ¸ÀÏÀ», ¼öÁ÷ ½ºÅ©·Ñ ¹ÙÀÏ °æ¿ì´Â SBS_VERT ½ºÅ¸ÀÏÀ» ÁöÁ¤ÇÑ´Ù. ´ÙÇàÈ÷ ½ºÅ¸ÀÏÀº µÎ °¡Áö Á¾·ù¹Û¿¡ ¾ø´Ù. ½ºÅ©·Ñ ¹Ù´Â ¹üÀ§¿Í ÇöÀç À§Ä¡°ªÀ» °¡Áö´Âµ¥ ´ÙÀ½ µÎ ÇÔ¼ö·Î ÀÌ °ªµéÀ» ÁöÁ¤ÇÑ´Ù.

BOOL SetScrollRange( HWND hWnd, int nBar, int nMinPos, int nMaxPos, BOOL bRedraw );
int SetScrollPos( HWND hWnd, int nBar, int nPos, BOOL bRedraw );

SetScrollRange ÇÔ¼ö·Î ÃÖ´ë°ª(nMaxPos), ÃÖ¼Ò°ª(nMinPos)À» ÁöÁ¤ÇÏµÇ Ã¹¹ø° Àμö°¡ ½ºÅ©·Ñ ¹ÙÀÇ À©µµ¿ì ÇÚµéÀÌ´Ù. µÎ¹ø° Àμö nBar´Â ¸ÞÀÎ À©µµ¿ì¿¡ ºÎÂøµÈ ½ºÅ©·Ñ ¹Ù ¶Ç´Â º°µµÀÇ ½ºÅ©·Ñ ¹Ù ÄÁÆ®·ÑÀ» ÁöÁ¤Çϴµ¥ ÀÌ °ªÀÌ SBS_CTLÀÌ¸é º°µµÀÇ ÄÁÆ®·ÑÀ» ÁöÁ¤ÇÑ´Ù. SetScrollPos´Â ½ºÅ©·Ñ ¹ÙÀÇ ÇöÀç À§Ä¡¸¦ ¼¼¹ø° Àμö nPos·Î ÁöÁ¤ÇÑ´Ù.

´Ù¸¥ ÄÁÆ®·ÑµéÀº Àڽſ¡°Ô º¯È­°¡ ÀÖÀ» ¶§ ºÎ¸ð À©µµ¿ì·Î ÅëÁö ¸Þ½ÃÁö¸¦ º¸³»´Âµ¥ ºñÇØ ½ºÅ©·Ñ ¹Ù´Â WM_HSCROLL(¼öÆòÀÏ °æ¿ì), WM_VSCROLL(¼öÁ÷ÀÏ °æ¿ì)À̶ó´Â º°µµÀÇ ¸Þ½ÃÁö¸¦ ºÎ¸ð À©µµ¿ì·Î º¸³»¸ç Ãß°¡ Á¤º¸´Â ´ÙÀ½°ú °°´Ù.

Àμö ¼³¸í
LOWORD(wParam) ½ºÅ©·Ñ ¹Ù ³»ÀÇ ¾îµð¸¦ ´­·¶´Â°¡?
HIWORD(wParam) ÇöÀç À§Ä¡
lParam ½ºÅ©·Ñ ¹ÙÀÇ À©µµ¿ì ÇÚµé

LOWORD(wParam)À¸·Î Àü´ÞµÇ´Â °ªÀº »ç¿ëÀÚÀÇ ½ºÅ©·Ñ ¿ä±¸»çÇ×À» ³ªÅ¸³»¸ç °¡´ÉÇÑ °ªÀÇ Á¾·ù´Â ´ÙÀ½°ú °°´Ù.

°ª ¼³¸í
SB_LINELEFT ¶Ç´Â SB_LINEUP »ç¿ëÀÚ°¡ ¿ÞÂÊ È­»ìÇ¥ ¹öÆ°À» ´­·¶´Ù´Â ¶æÀ̸ç À̶§´Â ¿ÞÂÊÀ¸·Î ÇÑ ´ÜÀ§ ½ºÅ©·Ñ½ÃŲ´Ù.
SB_LINERIGHT ¶Ç´Â SB_LINEDOWN »ç¿ëÀÚ°¡ ¿À¸¥ÂÊ È­»ìÇ¥ ¹öÆ°À» ´­·¶´Ù´Â ¶æÀ̸ç À̶§´Â ¿À¸¥ÂÊÀ¸·Î ÇÑ ´ÜÀ§ ½ºÅ©·Ñ½ÃŲ´Ù.
SB_PAGELEFT ¶Ç´Â SB_PAGEUP »ç¿ëÀÚ°¡ ¿ÞÂÊ ¸öÅë ºÎºÐÀ» ´­·¶´Ù´Â ¶æÀ̸ç À̶§´Â ÇÑÆäÀÌÁö ¿ÞÂÊÀ¸·Î ½ºÅ©·Ñ½ÃŲ´Ù.
SB_PAGERIGHT ¶Ç´Â SB_PAGEDOWN »ç¿ëÀÚ°¡ ¿À¸¥ÂÊ ¸öÅë ºÎºÐÀ» ´­·¶´Ù´Â ¶æÀ̸ç À̶§´Â ÇÑÆäÀÌÁö ¿À¸¥ÂÊÀ¸·Î ½ºÅ©·Ñ½ÃŲ´Ù.
SB_THUMBPOSITION ½ºÅ©·Ñ ¹Ú½º¸¦ µå·¡±×ÇÑ ÈÄ ¸¶¿ì½º ¹öÆ°À» ³õ¾Ò´Ù.
SB_THUMBTRACK ½ºÅ©·Ñ ¹Ú½º¸¦ µå·¡±×ÇÏ°í ÀÖ´Â ÁßÀÌ´Ù. ÀÌ ¸Þ½ÃÁö´Â ¸¶¿ì½º ¹öÆ°À» ³õÀ» ¶§±îÁö °è¼Ó Àü´ÞµÈ´Ù.

¼öÆò ½ºÅ©·Ñ ¹Ù¸¦ ¿¹·Î µé¾î »ç¿ëÀÚ°¡ Ŭ¸¯ÇÑ ºÎºÐ°ú À̶§ Àü´ÞµÇ´Â ¸Þ½ÃÁö¸¦ º¸¸é ´ÙÀ½°ú °°´Ù. ¾ç³¡ÀÇ ¹öÆ°À» ´©¸£´Â °ÍÀº ºñ±³Àû ÀÛÀº ´ÜÀ§(¿¹¸¦ µé¾î ÇÑ ÁÙ¾¿)·Î ¼¶¼¼ÇÏ°Ô À̵¿Ç϶ó´Â ¶æÀÌ¸ç ¸öÅëºÎºÐÀ» Ŭ¸¯ÇÏ´Â °ÍÀº ºñ±³Àû Å« ´ÜÀ§(¿¹¸¦ µé¾î ÇÑ ÆäÀÌÁö¾¿)·Î À̵¿Ç϶ó´Â ¶æÀÌ´Ù.

¶ÇÇÑ ¼öÆò ½ºÅ©·Ñ ¹Ù´Â ¿ÞÂÊ, ¿À¸¥ÂÊÀ¸·Î ½ºÅ©·ÑµÇÁö¸¸ ¼öÁ÷ ½ºÅ©·Ñ ¹Ù´Â À§, ¾Æ·¡·Î ½ºÅ©·ÑµÇ´Âµ¥ À̶§ ¼öÆòÀÇ ¿ÞÂÊ À̵¿°ú ¼öÁ÷ÀÇ À§ÂÊ À̵¿Àº µÑ ´Ù °ªÀ» °¨¼Ò½ÃÅ°´Â Á¡¿¡¼­ µ¿ÀÏÇÏ´Ù. ±×·¡¼­ SB_LINELEFT¿Í SB_LINEUPÀº °°Àº Àǹ̶ó°í ÇÒ ¼ö ÀÖ´Ù.

´ÙÀ½ ¿¹Á¦´Â ½ºÅ©·Ñ ¹Ù ¼¼ °³¸¦ »ç¿ëÇÏ¿© R,G,B°ªÀ» ÀÔ·Â¹Þ¾Æ ºê·¯½Ã¸¦ ¸¸µç ÈÄ »ç°¢ÇüÀ» ±×¸°´Ù.

#define ID_SCRRED 100
#define ID_SCRGREEN 101
#define ID_SCRBLUE 102
HWND hRed,hGreen,hBlue;
int Red,Green,Blue;

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	HBRUSH MyBrush, OldBrush;
	int TempPos;
	switch(iMessage) {
	case WM_CREATE:
		hRed=CreateWindow("scrollbar",NULL,WS_CHILD | WS_VISIBLE | SBS_HORZ,
			10,10,200,20,hWnd,(HMENU)ID_SCRRED,g_hInst,NULL);
		hGreen=CreateWindow("scrollbar",NULL,WS_CHILD | WS_VISIBLE | SBS_HORZ,
			10,40,200,20,hWnd,(HMENU)ID_SCRGREEN,g_hInst,NULL);
		hBlue=CreateWindow("scrollbar",NULL,WS_CHILD | WS_VISIBLE | SBS_HORZ,
			10,70,200,20,hWnd,(HMENU)ID_SCRBLUE,g_hInst,NULL);
		SetScrollRange(hRed,SB_CTL,0,255,TRUE);
		SetScrollPos(hRed,SB_CTL,0,TRUE);
		SetScrollRange(hGreen,SB_CTL,0,255,TRUE);
		SetScrollPos(hGreen,SB_CTL,0,TRUE);
		SetScrollRange(hBlue,SB_CTL,0,255,TRUE);
		SetScrollPos(hBlue,SB_CTL,0,TRUE);
		return 0;
	case WM_HSCROLL:
		if ((HWND)lParam == hRed) TempPos = Red;
		if ((HWND)lParam == hGreen) TempPos = Green;
		if ((HWND)lParam == hBlue) TempPos = Blue;
		switch (LOWORD(wParam)) {
		case SB_LINELEFT:
			TempPos=max(0,TempPos-1);
			break;
		case SB_LINERIGHT:
			TempPos=min(255,TempPos+1);
			break;
		case SB_PAGELEFT:
			TempPos=max(0,TempPos-10);
			break;
		case SB_PAGERIGHT:
			TempPos=min(255,TempPos+10);
			break;
		case SB_THUMBTRACK:
			TempPos=HIWORD(wParam);
			break;
		}
		if ((HWND)lParam == hRed) Red=TempPos;
		if ((HWND)lParam == hGreen) Green=TempPos;
		if ((HWND)lParam == hBlue) Blue=TempPos;
		SetScrollPos((HWND)lParam,SB_CTL,TempPos,TRUE);
		InvalidateRect(hWnd,NULL,FALSE);
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hWnd,&ps);
		MyBrush=CreateSolidBrush(RGB(Red,Green,Blue));
		OldBrush=(HBRUSH)SelectObject(hdc,MyBrush);
		Rectangle(hdc,10,100,210,200);
		SelectObject(hdc,OldBrush);
		DeleteObject(MyBrush);
		EndPaint(hWnd,&ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

½ÇÇàÁßÀÇ ¸ð½ÀÀº ´ÙÀ½°ú °°´Ù. ½ºÅ©·Ñ ¹Ù¸¦ µå·¡±×ÇÏ¿© À̵¿½ÃÄÑ º¸¸é ¾Æ·¡ÂÊ »ç°¢ÇüÀÇ »ö»óÀÌ º¯°æµÉ °ÍÀÌ´Ù.

WM_CREATE¿¡¼­ ¼¼ °³ÀÇ ¼öÆò ½ºÅ©·Ñ ¹Ù¸¦ ¸¸µé°í ¹üÀ§¸¦ °¢°¢ 0~255±îÁö ÁöÁ¤ÇÏ¿´´Ù. »ö»ó°ªÀº 1¹ÙÀÌÆ®À̱⠶§¹®¿¡ ÃÖ´ë°ªÀº 255ÀÌ¸é µÈ´Ù. ÀÌ ¼öÆò ½ºÅ©·Ñ ¹Ù´Â »ç¿ëÀÚ°¡ ÀÚ½ÅÀ» Ŭ¸¯ÇÒ °æ¿ì ºÎ¸ð À©µµ¿ì·Î WM_HSCROLL ¸Þ½ÃÁö¸¦ º¸³»ÁÙ °ÍÀÌ´Ù. ¸ÞÀÎ À©µµ¿ì´Â ½ºÅ©·Ñ ¹Ù°¡ WM_HSCROLL ¸Þ½ÃÁö¸¦ º¸³»¿Ã ¶§ »ç¿ëÀÚ°¡ ½ºÅ©·Ñ ¹ÙÀÇ ¾îµð¸¦ ´­·¶´ÂÁö LOWORD(wParam) °ª¿¡ µû¶ó »ö»ó°ªÀ» Àû´çÈ÷ Áõ°¨½ÃÅ°´Âµ¥ SB_LINE* ¸Þ½ÃÁöÀÏ °æ¿ì 1¾¿ Áõ°¨½ÃÅ°°í SB_PAGE*ÀÏ °æ¿ì´Â 10¾¿ Áõ°¨½ÃÄ×´Ù. Áõ°¨µÈ °ªÀÇ °á°ú´Â Red, Green, Blue Àü¿ª º¯¼ö¿¡ ´ëÀԵǸç ÀÌ °©½Ã º¯°æµÉ ¶§¸¶´Ù ÀÛ¾÷ ¿µ¿ªÀ» ¹«È¿È­ÇÏ¿© ´Ù½Ã ±×¸®µµ·Ï ÇÏ¿´´Ù.

WM_PAINT ¸Þ½ÃÁö¿¡¼­´Â Àü¿ª º¯¼ö Red, Green, Blue °ªÀ» È¥ÇÕÇÏ¿© ´Ü»öÀÇ ºê·¯½Ã¸¦ ¸¸µé°í »ç°¢ÇüÀ» ±×¸²À»½á ½ºÅ©·Ñ ¹Ù·Î ¼±ÅÃÇÑ »ö»ó°ªÀÌ È­¸éÀ¸·Î Ãâ·ÂµÇ´Â °ÍÀÌ´Ù.


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