MFC Tooltip 출력하기

반응형
728x90
반응형
 
 
Introduction

출력된 이미지의 Exif 정보를 읽어 각각의 이미지 위에 Tooltip정보를 출력하는 것이 목표로서, 이번 포스팅은 Tooltip 사용방법에 대해 알아보고자 합니다. Exif는 github에 올려진 코드를 찾으면 쉽게 활용할 수 있습니다. 하지만, 너무 방대한 코드를 사용할 경우 오히려 좋지 않은 결과를 나타낼 수 있으니 적절히 테스트 이후, 진행하시는 걸 추천드립니다. 
 
결과물 미리보기

 
원하는 목적은 PIcture control에 ToolTip 정보를 출력하여 사용자에게 이미지의 Exif를 출력해주는 것입니다. 
 
 

 

 

 
MFC - Dialog의 Picture Control Properties 설정

가장 먼저 Picture control의 속성 중 "Notify" 옵션을 "TRUE"로 변경을 해야합니다. 그렇지 않을 경우, Tooltip 정보가 출력되지 않는 첫번째 문제입니다. 
 
 
Tooltip 출력 하기

 
#Step 0 : 변수/함수 선언
MFC Dialog에 아래와 같이 추가합니다. 
{
// 생략...
 
private:
    CToolTipCtrl m_tooltip;
public:
    void TestTooltip();
 
}
 
#Step 1 : 활용하기
void CDatasetManagerDlg::TestTooltip()
{
    m_tooltip.Create(this);    
    m_tooltip.AddTool(this, L"testTooltip");
    m_tooltip.AddTool(GetDlgItem(IDC_PIC_LEFT), L"check1");
    m_tooltip.AddTool(GetDlgItem(IDC_PIC_CENTER), L"check2");
    m_tooltip.AddTool(GetDlgItem(IDC_PIC_RIGHT), L"check3");    
}
 
상위 코드와 같이 create 이후, AddTool() 함수를 이용하여 추가하시면 됩니다. 하지만, OnInitDialog()에 추가하고 실행하게 되면 Toolip이 출력되지 않습니다. 아래의 한가지 작업이 빠졌기때문이죠. 
 
#Step 2: PreTranslateMessage(MSG* pMsg) 추가
 
MFC 위자드에서 PreTranslateMessage 를 추가합니다.  그리고 아래와 같이 RelayEvent() 함수를 추가합니다. 
 
BOOL CDatasetManagerDlg::PreTranslateMessage(MSG* pMsg)
{
    m_tooltip.RelayEvent(pMsg);
    return CDialogEx::PreTranslateMessage(pMsg);
}
 
 
이제 추가하게되면, 젤처음 보았던 결과와 같이 출력 됩니다. 이제 여러가지 옵션들에 대해 알아보도록 하겠습니다. 
 

 

 

 
 
Tooltip 활용하기

 
 
Step 1: 툴팁의 Width 설정
m_tooltip.SetMaxTipWidth(10);
 
Tooltip의 width 설정을 위해 SetMaxTipWidth() 함수를 이용하여 제한 할 수 있습니다. 글자 단위가 아니고 픽셀(?) 단위인듯합니다. 숫자를 변경해가면서 조금씩 확인 해보시기바랍니다. (MSDN페이지 접속하기 ...)
 
Step 2: 시간 지연
m_tooltip.SetDelayTime(TTDT_AUTOPOP, 3 * 1000); // msc
 
시간 지연을 위해서는 SetDelayTime() 함수를 사용하면 됩니다. 이때, 1/1000 sec로 설정을 하기때문에 시간 확인 후 출력 하시면 됩니다. 
 
Step 3: 영역지정을 통한 툴팁 출력
  • AddTool 정의
// Registers a tool with the ToolTip control.
 
BOOL AddTool(_In_ CWnd* pWnd, _In_ UINT nIDText, _In_opt_ LPCRECT lpRectTool = NULL, _In_ UINT_PTR nIDTool = 0);
 
BOOL AddTool(_In_ CWnd* pWnd, _In_z_ LPCTSTR lpszText = LPSTR_TEXTCALLBACK, _In_opt_ LPCRECT lpRectTool = NULL, _In_ UINT_PTR nIDTool = 0);
 
AddTool 함수의 정의를 찾아보면 상위와 같습니다. 그래서 특정 영역을 통해 Tooltip을 출력할 수 있습니다. 
 
 
Step 4: Tooltip Text Update

사용중에 Tooltip의 내용이 업데이트 되어야 하는 경우가 있습니다. 이때는 UpdateTipText() 함수를 사용하면 됩니다. 
 
#정의
// Sets the ToolTip text for a tool.
    void UpdateTipText(_In_z_ LPCTSTR lpszText, _In_ CWnd* pWnd, _In_ UINT_PTR nIDTool = 0);
    void UpdateTipText(_In_ UINT nIDText, _In_ CWnd* pWnd, _In_ UINT_PTR nIDTool = 0);
 
함수의 원형에 맞춰서 값을 입력!!
 
 
 
Step ??: 기타 (기타옵션은 직접 찾아서..)

 
ToolTipCtrl에 정의된 함수입니다. 이 외에도 여러가지 함수들이 있으니, 어떤상황에 사용할 것인지 생각해보시고 추가 및 수정을 하시면 됩니다. 
 
 
최종결과 : Picture Control에 Tooltip을 이용하여 이미지의 Exif 출력

 
 
 
최종 목표인 결과는 게으르지 않기위해 블로그에 최종 포스팅!
참고로 Tooltip을 이용하여 줄비움(?)을 하기위해서는 아래의 코드를 추가해야 개행 문자("\r\n" or "\n") 가 적용 됨을 알아두시기 바랍니다. 
 
 
m_TooltipMain.SetMaxTipWidth(600);
 
 
 
 

 

 
728x90
반응형

댓글

Designed by JB FACTORY