본문 바로가기

API / MFC/Function Information

슬라이딩 메뉴(OnTimer)

타이머를 이용한 방법의 슬라이딩 메뉴에 대해서 간단히 알아 보면,


OnTimer는 쉽게 말해서 타이머로


사용자가 정한 일정 시간마다 이 함수를 부르도록 설정을 할 수 있는 함수입니다.


즉, 사용자가 SetTimer 함수를 이용해


OnTimer 함수를 일정시간마다 부르도록 하며,


KillTimer 함수를 이용해 종료를 하는 것입니다.


그럼 SetTimer과 KillTimer 함수의 선언부를 보게 되면,


// afxwin.h
// Timer Functions
	UINT_PTR SetTimer(UINT_PTR nIDEvent, UINT nElapse,
		void (CALLBACK* lpfnTimer)(HWND, UINT, UINT_PTR, DWORD));
	BOOL KillTimer(UINT_PTR nIDEvent);

이렇게 선언이 되어 있습니다.


먼저 SetTimer의 인자를 보면,



UINT_PTR nIDEvent => 타이머의 식별자(0이 아닌 값)

UINT nElapse => 타이머의 주기

void (CALLBACK* lpfnTimer)(HWND, UINT, UINT_PTR, DWORD)
=> WM_TIMER 메시지를 처리하는 TimerProc 콜백 함수의 주소를 지정
   NULL이면 WM_TIMER 메시지는 응용 프로그램의 메시지 큐나 CWnd 개체에서 처리


KillTimer의 인자는
UINT_PTR nIDEvent => 타이머의 식별자(0이 아닌 값)

입니다.


그럼 어떻게 슬라이딩 메뉴를 구성하는지 보면,

다이얼로그1, 다이얼로그2가 있으며,

여기에서 다이얼로그1의 a 버튼을 누르게 되면 다이얼로그2가 슬라이딩 형식으로

나온다는 가정을 하겠습니다.

그럼 먼저,

다이얼로그 1의 버튼 클릭을 하였을 경우 함수를 보면,

void CtestDlg::OnBnClickedButton()
{
	test2 test_2;
	test_2.DoModal();
}

위치럼 모달형식으로 다이얼로그를 부릅니다.

그럼 다이얼로그2에서는

부름을 당했기 때문에

OnInitDialog() 함수를 통해서 전체적인 기본 형태를 정해 줍니다.

BOOL test2::OnInitDialog()
{
	CDialog::OnInitDialog();
	m_height1 = 430;
	m_height2 = 50;

	int x, y;

	x = GetSystemMetrics(SM_CXSCREEN);
	y = GetSystemMetrics(SM_CYSCREEN);
	x = (x / 2) - (272 / 2);
	y = ((y / 2) - (480 / 2) )+ 430;

	this->SetWindowPos(NULL, x, y, 272, 50, SWP_NOZORDER);
	button2.MoveWindow(0,0,265,40);
	SetTimer(1,100,NULL);


	return TRUE;
}

정해 주고 나서 마지막 return 형 위에 SetTimer함수로 타이머를 작동 시킵니다.

그럼 OnTimer함수에서는

void test2::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default

	m_height1 = m_height1 - 10;
	m_height2 = m_height2 + 10;
	int x,y;
	KillTimer(1);

	if(m_height1 >= 240)
	{
		x = GetSystemMetrics(SM_CXSCREEN);
		y = GetSystemMetrics(SM_CYSCREEN);
		x = (x / 2) - (272 / 2);
		y = ((y / 2) - (480 / 2) )+ m_height1;

		this->SetWindowPos(NULL, x, y, 272, m_height2, SWP_NOZORDER);
		SetTimer(1,1,NULL);
	}

	CDialog::OnTimer(nIDEvent);
}

이렇게 타이머를 KillTimer와 SetTimer로 반복작업을 하면서

생성된 기본형태에서 조금씩 변화를 반복적으로 일으켜

슬라이딩 메뉴를 만들게 됩니다.

참조 : http://msdn.microsoft.com/ko-kr/library/49313fdf(VS.80).aspx

'API / MFC > Function Information' 카테고리의 다른 글

CDC::BitBlt  (0) 2010.03.08
CARRAY CLASS  (0) 2010.03.08
컨트롤 위치 및 크기 조절(MoveWindow)  (0) 2010.03.02
컴퓨터 해상도 구하기(GetSystemMetrics)  (0) 2010.02.26
윈도우 크기 조절 함수(SetWindowPos)  (0) 2010.02.26