티스토리 뷰
Visual Studio 2012
버튼에 마우스 커서를 위로 올리거나(Hover) 버튼에서 벗어날 시(Leave)의 마우스 이벤트 추가하기
1. 사용하는 버튼의 클래스 상속 받기 (CMFCBUTTON)
* 클래스 마법사 - 클래스 추가(우측 화살표 클릭) - MFC 클래스..
* 파생 클래스 추가(CMyButton)
2. 메시지 추가
* WM_MOUSEHOVER, WM_MOUSELEAVE, WM_MOUSEMOVE
3. 소스 추가
* Flag용 변수 추가 및 초기화(m_bCursorOnButton)
// MyButton.h
class CMyButton : public CMFCButton
{
...
public:
CMyButton();
virtual ~CMyButton();
BOOL m_bCursorOnButton;
...
};
// MyButton.cpp : 구현 파일입니다.
//
CMyButton::CMyButton()
{
m_bCursorOnButton=FALSE;
}
* OnMouseMove() 에 TRACKMOUSEEVENT 추가
void CMyButton::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
if( m_bCursorOnButton == FALSE )
{
TRACKMOUSEEVENT tme;
ZeroMemory(&tme,sizeof(TRACKMOUSEEVENT));
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE|TME_HOVER;
tme.dwHoverTime = 1;
m_bCursorOnButton = _TrackMouseEvent(&tme);
}
CMFCButton::OnMouseMove(nFlags, point);
}
* OnMouseLeave(), OnMouseHover()에 코드 추가
void CMyButton::OnMouseLeave()
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
m_bCursorOnButton=FALSE; //Leave시 Flag False로 만들고 버튼 Hover하면 이벤트 설정되게
MessageBox("LEAVE","LEAVE",0);
Invalidate();
CMFCButton::OnMouseLeave();
}
void CMyButton::OnMouseHover(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
MessageBox("HOVER","HOVER",0);
Invalidate();
CMFCButton::OnMouseHover(nFlags, point);
}
4. 테스트
0
* 작동은 하나 HOVER시 일정 시간이 지난 후에 LEAVE동작이 진행됨.
* TRACKMOUSEEVENT 구조로 인해 버튼 위에 마우스 올라갔을 시(HOVER) 구조체에 있는 dwHoveerTime 변수의 설정 시간에 맞춰 HOVER 후에 바로 LEAVE 되는 현상이 있음.
* HOVER가 계속 유지되도록 하는 구문은 좀 더 검색을 해봐야함.. ㅠㅠ
- > 다시 확인해본 결과 Hover될 시에 메시지 창을 띄우면 focus가 메시지창으로 가면서 버튼을 Leave하는 것처럼 인식하여 생기는 현상이였음. 메시지 박스 같은거 말고 다른 방식으로는 정상 작동됨
'Programming > MFC(C++)' 카테고리의 다른 글
| [MFC] 부모 다이얼로그가 자식 다이얼로그보다 항상 아래에 있을 때 (0) | 2018.07.13 |
|---|---|
| [MFC] 버튼 컨트롤에 색 입히기(CMFCBUTTON) (4) | 2018.07.09 |
| [MFC] 대화상자 최소화,최대화,종료 버튼 클릭시 이벤트 핸들링 (1) | 2018.07.06 |
| [MFC] SQLITE3 연동하기 (db 생성) (0) | 2018.07.05 |
| [MFC] 대화상자 기반 ADO 사용하기 - 4 (0) | 2018.07.04 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 스티커메모로드중
- MFC Modeless
- 법정동코드
- ADODB
- #자동업데이트
- 모달리스
- 스쿠트항공 환불받기
- ADO
- 부가가치세전산매체
- Modeless
- 청년내일채움공제 만기신청
- MFC ADO
- 세금계산서합계표양식
- 부가가치세
- 전자신고파일설명서
- 항공알파벳
- MXCOMPONENT
- c++
- CMFCBUTTON
- 프로세스이름변경
- 모달리스 다이얼로그
- sqlite3
- Sticky Notes Loading
- MSSQL
- 청년내일채움공제
- 소켓
- SendMessage
- 해외송금확인
- MFC
- 전자신고변환
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함