Develop/C,C++,MFC,API,Qt

MFC Tooltip 출력하기

퓨림노 2020. 12. 13. 07:00
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
반응형