このエントリーをはてなブックマークに追加

役に立ちそうな読み物

プログラミング Tips

[MFC] ツールバー上でも ToolTip を表示させる方法

ダイアログ型のアプリケーションに無理やりツールバーを設置した場合、正攻法ではツールバー上でToolTipが表示されない。表示させる方法はMSDNをちょっと調べればと分かるけど、ちょっと深いところにあったのでここに書いておく。

BOOL CPssDlg::OnInitDialog()
{
	...
	EnableToolTips();

	// ツールバー
	m_ToolBar.CreateEx(this,TBSTYLE_FLAT|TBSTYLE_TRANSPARENT,
			WS_CHILD|WS_VISIBLE|CBRS_TOOLTIPS|CBRS_ALIGN_TOP,CRect(0,0,0,0), IDR_MAIN_TOOLBAR );//TOOLBAR_ID );
	m_ToolBar.LoadToolBar( IDR_MAIN_TOOLBAR );
	m_ToolBar.SetWindowPos( NULL, 0, 0, 
		rect.right-rect.left, 20, SWP_NOZORDER );
	...
}

BOOL CPssDlg::OnToolTipNotify(UINT id, NMHDR * pNMHDR, LRESULT * pResult)
{
	// ツールチップを表示
	TOOLTIPTEXT	*pTTT =	(TOOLTIPTEXT*)pNMHDR;
	UINT nID = pNMHDR->idFrom;
	if(pTTT->uFlags	& TTF_IDISHWND)
	{
		nID	= ::GetDlgCtrlID((HWND)nID);
		if(nID)
		{
			pTTT->lpszText = MAKEINTRESOURCE(nID);
			pTTT->hinst	= AfxGetResourceHandle();
			return(TRUE);
		}
	}
	else{
		// nID がそのままコントロールIDである。
		pTTT->lpszText = MAKEINTRESOURCE(nID);
		pTTT->hinst	= AfxGetResourceHandle();
	}
	return(FALSE);
}

強調部分はネットで調べても分からなかった。横着せず自分で調べなきゃダメってことか…。