반응형
리스트 컨트롤로 썸네일을 구현하였을때
마우스를 올려놓았을 때 일정 시간이 지나면 미리 보는 기능을 넣을려면
다이얼로그를 하나 만든다 ( 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 |
댓글