반응형
리스트 컨트롤로 썸네일을 구현하였을때
마우스를 올려놓았을 때 일정 시간이 지나면 미리 보는 기능을 넣을려면
다이얼로그를 하나 만든다 ( Style은 None으로 )
그리고 동적으로 생성하여서 모달리스 다이얼로그로 생성하고 초기 상태를
ShowWindow( SW_HIDE); 로 해놓는다.
MouseMove 메시지를 오버라이드한다. 마우스가 해당 그림위에 있을 때
- void CThumbList::OnMouseMove(UINT nFlags, CPoint point)
- {
- LVHITTESTINFO htInfo;
- CPoint pt( point );
- htInfo.pt = pt;
- htInfo.flags = LVHT_ONITEM;
- int nItem = HitTest( &htInfo );
- if ( nItem == -1 )
- {
- KillTimer( 1 );
- ::PostMessage((GetParent())->m_hWnd, WM_SHOWPREVIEW, FALSE, (u_int)&m_strName);
- m_bTimer = FALSE;
- return;
- }
- m_nPoint = htInfo.iItem;
- if ( m_bTimer == FALSE )
- {
- m_nOldPoint = m_nPoint;
- SetTimer( 1, 1000, NULL );
- m_bTimer = TRUE;
- }
- CListCtrl::OnMouseMove(nFlags, point);
- }
void CThumbList::OnMouseMove(UINT nFlags, CPoint point) { LVHITTESTINFO htInfo; CPoint pt( point ); htInfo.pt = pt; htInfo.flags = LVHT_ONITEM; int nItem = HitTest( &htInfo ); if ( nItem == -1 ) { KillTimer( 1 ); ::PostMessage((GetParent())->m_hWnd, WM_SHOWPREVIEW, FALSE, (u_int)&m_strName); m_bTimer = FALSE; return; } m_nPoint = htInfo.iItem; if ( m_bTimer == FALSE ) { m_nOldPoint = m_nPoint; SetTimer( 1, 1000, NULL ); m_bTimer = TRUE; } CListCtrl::OnMouseMove(nFlags, point); }
이렇게 한뒤에 OnTimer 함수에는 이렇게 코딩한다
- void CThumbList::OnTimer(UINT nIDEvent)
- {
- switch ( nIDEvent)
- {
- case 1:
- if ( m_nPoint == m_nOldPoint )
- {
- GetItemPosition( m_nPoint, &m_ItemPoint );
- m_strName = GetItemText( m_nPoint, 0 );
- // 보여준다
- ::PostMessage((GetParent())->m_hWnd, WM_SHOWPREVIEW, TRUE, (u_int)&m_strName);
- }
- KillTimer(1);
- m_bTimer = FALSE;
- break;
- default:
- ;
- }
- CListCtrl::OnTimer(nIDEvent);
- }
void CThumbList::OnTimer(UINT nIDEvent) { switch ( nIDEvent) { case 1: if ( m_nPoint == m_nOldPoint ) { GetItemPosition( m_nPoint, &m_ItemPoint ); m_strName = GetItemText( m_nPoint, 0 ); // 보여준다 ::PostMessage((GetParent())->m_hWnd, WM_SHOWPREVIEW, TRUE, (u_int)&m_strName); } KillTimer(1); m_bTimer = FALSE; break; default: ; } CListCtrl::OnTimer(nIDEvent); }
그리고 메시지를 받는 메인 다이얼로그( 리스트 컨트롤을 포함하고 있는)는
메시지를 받는 함수를 만들고,
- VOID CShotEditorDlg::ShowPreview( WPARAM wParam, LPARAM lParam )
- {
- CPoint point;
- CString* strPath = ( CString* )lParam;
- CString strResult;
- strResult = m_strShotPath + "\\" + *strPath;
- if ( wParam == 0 )
- {
- m_pPreview->ShowWindow( SW_HIDE );
- return;
- }
- GetCursorPos(&point);
- m_pPreview->SetThumbBmp( strResult );
- m_pPreview->MoveWindow( point.x , point.y, PREVIEW_WIDTH, PREVIEW_HEIGHT );
- m_pPreview->ShowWindow( SW_SHOW );
- }
VOID CShotEditorDlg::ShowPreview( WPARAM wParam, LPARAM lParam ) { CPoint point; CString* strPath = ( CString* )lParam; CString strResult; strResult = m_strShotPath + "\\" + *strPath; if ( wParam == 0 ) { m_pPreview->ShowWindow( SW_HIDE ); return; } GetCursorPos(&point); m_pPreview->SetThumbBmp( strResult ); m_pPreview->MoveWindow( point.x , point.y, PREVIEW_WIDTH, PREVIEW_HEIGHT ); m_pPreview->ShowWindow( SW_SHOW ); }
이렇게 하면 밑과 같이 완성이 된다
반응형
'C & C++ > MFC 컨트롤' 카테고리의 다른 글
[Tip] 작업표시줄에 응용프로그램 나타나지 않게 (0) | 2011.04.04 |
---|---|
[Tip] 인텔리젼스 구현 (0) | 2011.04.04 |
[Tip] 네이트온 올림글 따라하기 (0) | 2011.04.04 |
[Tab] 탭 컨트롤러 만들기 (0) | 2011.03.29 |
[Tip] 트레이 아이콘 조작 (0) | 2011.03.29 |
댓글