타이머를 이용한 방법의 슬라이딩 메뉴에 대해서 간단히 알아 보면,
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 |