.MFC의 툴팁

다음은 MFC CToolTipCtrl 컨트롤에 대한 분석을 위한 예제이다. MFC 공통 컨트롤 클래스는 Win32 컨트롤의 단순한 래퍼에 불과하나 CToolTipCtrl 클래스는 Win32 툴팁과는 상당히 다른 방식으로 동작하도록 작성되어 있다. 그래서 Win32 툴팁을 아는 것만으로는 MFC 툴팁을 제대로 다룰 없으며 별도의 추가 분석이 필요하다.

 

1.AppWizard MfcToolTip 프로젝트를 SDI 옵션으로 생성한다. 나머지 옵션은 모두 디폴트를 사용하므로 Step 1에서 곧바로 Finish 버튼을 누른다. 상태로 컴파일해 보면 이미 툴바의 툴팁은 모두 구현되어 있다.

2.새로운 툴팁 컨트롤을 만들어 보도록 하자. 뷰의 멤버로 CToolTipCtrl 객체를 선언한다.

 

class CMfcToolTipView : public CView

{

protected: // create from serialization only

CMfcToolTipView();

DECLARE_DYNCREATE(CMfcToolTipView)

 

CToolTipCtrl m_Tip;

 

3.그리고 뷰가 초기화될 때인 OnInitialUpdate 다음 코드를 작성하여 툴을 등록한다. 뷰의 작업 영역에 대해 툴팁을 달아 주었다.

 

void CMfcToolTipView::OnInitialUpdate()

{

CView::OnInitialUpdate();

m_Tip.Create(this, 0);

 

RECT crt;

GetClientRect(&crt);

m_Tip.AddTool(this, "MFC 툴팁 테스트", &crt, 1);

}

 

4.MFC 툴팁은 TTF_SUBCLASS 플래그를 사용하지 않으므로 마우스 관련 메시지를 툴팁 컨트롤로 전달해 주어야 한다. PreTranslateMessage에서 RelayEvent 호출해 주면 된다.

 

BOOL CMfcToolTipView::PreTranslateMessage(MSG* pMsg)

{

if (pMsg->message >= WM_MOUSEFIRST && pMsg->message <= WM_MOUSELAST) {

    m_Tip.RelayEvent(pMsg);

}

return CView::PreTranslateMessage(pMsg);

}

 

실행한 뷰의 작업 영역에 커서를 정지시켜 놓으면 툴팁이 보일 것이다.

메모:MFC 툴팁 분석은 다음 기회로 넘김. 컨트롤 분석뿐만 아니라 MFC 메시지 펌프 구조에 대한 분석이 먼저 요구되기 때문에 지금 원고를 작성하기 힘듬. 필요하다고는 판단되나 내용을 툴팁 컨트롤 다음에 쓰는 것이 좋은지 아니면 별도의 MFC 구조에 대한 컨텐트를 작성할 지는 생각해 필요가 있을 같다.