2009/02/03
실행시간에 툴바의 툴팁 바꾸기
다국어 프로그래밍에대한 정보를 찾다가 알게된 정보이다.
실생시간에 툴바의 툴팁을 바뀌기 위해서는 TTN_NEEDTEXTA, TTN_NEEDTEXTW 메세지를 받아 처리하면 된다.
TTN_NEEDTEXTA 는 Ascii 형식의 툴팁 데이터를 요구할때 발생하며 Win95에서 발생하고 TTN_NEEDTEXTW는 유니코드 형식의 툴팁 데이터를 요구할 때 발생하며 WinNT 이상에서 발생한다.
이 메세지를 처리하기 위한 메세지 맵을 작성한다.
실행시간에 컨트롤 아이디에 맞는 툴팁을 생성하기 위한 함수와 TTN_NEEDTEXTA, TTN_NEEDTEXTW 메세지를 핸들링할 함수를 작성한다.
아래 소스는 다국어 처리를 하기 위한 소스 중 일 부분으로 툴팁에 대한 메세지를 테스트한 내용의 소스이다.
실생시간에 툴바의 툴팁을 바뀌기 위해서는 TTN_NEEDTEXTA, TTN_NEEDTEXTW 메세지를 받아 처리하면 된다.
TTN_NEEDTEXTA 는 Ascii 형식의 툴팁 데이터를 요구할때 발생하며 Win95에서 발생하고 TTN_NEEDTEXTW는 유니코드 형식의 툴팁 데이터를 요구할 때 발생하며 WinNT 이상에서 발생한다.
이 메세지를 처리하기 위한 메세지 맵을 작성한다.
ON_NOTIFY_EX_RANGE( TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
ON_NOTIFY_EX_RANGE( TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
실행시간에 컨트롤 아이디에 맞는 툴팁을 생성하기 위한 함수와 TTN_NEEDTEXTA, TTN_NEEDTEXTW 메세지를 핸들링할 함수를 작성한다.
아래 소스는 다국어 처리를 하기 위한 소스 중 일 부분으로 툴팁에 대한 메세지를 테스트한 내용의 소스이다.
BOOL GetToolTip( UINT nID, CString& strTipText, CString& /*strMessage*/);
virtual afx_msg BOOL OnToolTipText(UINT nID, NMHDR* pNMHDR,
LRESULT* pResult );
BOOL CMainFrame::GetToolTip( UINT nID, CString& strTipText,
CString& /*strMessage*/)
{
CString strFullString;
switch( nID )
{
case ID_FILE_NEW: // have to handle all toolbar tool tip messages here
theApp.m_Lang.GetMenuTip2( strTipText, _T("ID_FILE_NEW") );
break;
case ID_FILE_OPEN:
theApp.m_Lang.GetMenuTip2( strTipText, _T("ID_FILE_OPEN") );
break;
case ID_FILE_SAVE:
theApp.m_Lang.GetMenuTip2( strTipText, _T("ID_FILE_SAVE") );
break;
case ID_EDIT_CUT:
case ID_EDIT_COPY:
case ID_EDIT_PASTE:
case ID_FILE_PRINT:
case ID_APP_ABOUT:
if (strFullString.LoadString(nID))
AfxExtractSubString ( strTipText, strFullString, 1,'\n');
break;
}
return TRUE;
}
BOOL CMainFrame::OnToolTipText(UINT nID, NMHDR* pNMHDR, LRESULT* pResult )
{
ASSERT ( pNMHDR->code == TTN_NEEDTEXTA || TTN_NEEDTEXTW );
TOOLTIPTEXTA* pTTTA = ( TOOLTIPTEXTA *)pNMHDR;
TOOLTIPTEXTW* pTTTW = ( TOOLTIPTEXTW *)pNMHDR;
CString strTipText;
CString strMessage;
if( GetToolTip( (UINT)pNMHDR->idFrom, strTipText, strMessage))
{
#ifndef _UNICODE
if(pNMHDR->code == TTN_NEEDTEXTA)
lstrcpyn(pTTTA->szText,strTipText,_countof(pTTTA->szText));
else
_mbstowcsz(pTTTW->szText,strTipText,_countof(pTTTW->szText));
#else
if(pNMHDR->code == TTN_NEEDTEXTA)
_wcstombsz(pTTTA->szText,strTipText,_countof(pTTTA->szText));
else
lstrcpyn(pTTTW->szText,strTipText,_countof(pTTTW->szText));
#endif
// change status bar message here need pointer to CMainFrame
// SetMessageText(strMessage);
// ok we handled the message, the buck stops here
return TRUE;
}
// we did not handle the message, pass it on
return CMainFrame::OnToolTipText(nID,pNMHDR,pResult);
}
Original Post : http://neodreamer-dev.tistory.com/246
Labels:
C++
,
TistoryOldPost
,
TTN_NEEDTEXT
,
TTN_NEEDTEXTA
,
TTN_NEEDTEXTW
Subscribe to:
Post Comments
(
Atom
)
No comments :
Post a Comment