티스토리 뷰
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
- Modeless
- CMFCBUTTON
- sqlite3
- 청년내일채움공제 만기신청
- c++
- MSSQL
- ADODB
- 소켓
- 부가가치세전산매체
- 해외송금확인
- 프로세스이름변경
- 항공알파벳
- 모달리스
- 스쿠트항공 환불받기
- ADO
- MFC Modeless
- MXCOMPONENT
- 세금계산서합계표양식
- SendMessage
- Sticky Notes Loading
- 전자신고파일설명서
- 전자신고변환
- 부가가치세
- 모달리스 다이얼로그
- 청년내일채움공제
- 법정동코드
- MFC ADO
- 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 |
글 보관함