2014년 10월 26일 일요일

컨트롤에 툴팁을 띄워보자.(MFC)

우선 알아둘 것은 툴팁의 글자 제한이 80자로 제한되어 있다는 것이다.

The maximum tooltip width value does not indicate a tooltip window's actual width. Rather, if a tooltip string exceeds the maximum width, the control breaks the text into multiple lines, using spaces to determine line breaks. If the text cannot be segmented into multiple lines, it will be displayed on a single line. The length of this line may exceed the maximum tooltip width.
MAXIMUM 툴팁 WIDTH는 툴팁 창의 실제 길이를 의미하지는 않는다. 대신에 툴팁 문자열이 지정된 폭을 넘으면 행을 분할하여 다음 행에 보여준다. ...

이 글을 쓰는 시점에서 VC6 sp6 에서도 동일한 현상이 나타난다. 넉넉한 글자수를 사용하고 싶다면, codeproject에 들어가보자.(http://www.codeproject.com/miscctrl/tooltipex.asp)

80자 제한에서 작성한다고 했을 때를 가정하고 글을 쓴다.

그 다음 CTooltipCtrl m_tooltip 변수를 하나 선언하고, 필요한 곳에서 m_tooltip.Create(this);를 하여 생성한다.(Create 함수의 두 번째 파라미터로 스타일을 정해줄 수 있다. 두번째 파라미터로 TTS_BALLOON을 줘보자.)

그 다음 개행(\n)을 수행하기 위해, 멤버함수인  m_tooltip.SetMaxTipWidth(80); 을 호출해준다. 파라미터로 넓이를 넘겨주지만, 위에서 말했듯이 80이상은 무의미하다. 그냥 개행을 위해 쓴다.

그 다음 툴팁에 나타내고자 하는 문장에 \n을 포함하여 작성을 하고.

m_tooltip.AddTool(GetDlgItem(IDC_EDIT_IPADDRESS), "텍스트");

위 처럼 AddTool 함수를 이용해서 원하는 컨트롤에 텍스트를 적용한다.

그 다음 PreTranslateMessage 를 추가하여, 아래와 같이 한다.

 switch(pMsg->message)
 {
 case WM_LBUTTONDOWN :
 case WM_LBUTTONUP :
 case WM_MOUSEMOVE :
  m_tooltip.RelayEvent(pMsg);
  break;
 }

즉, 해당 메시지가 날라오면 툴팁을 띄워준다. 간단한 툴팁 표시방법. 하지만! 80자 이상은 안된다는거~~~

댓글 없음: