fc2ブログ


ツールバー:ツールチップ

ツールバーのボタンに対してツールチップを表示する方法はいくつかある。

一番簡単なのはTBSTYLE_LISTスタイルのツールバーにTBSTYLE_EX_MIXEDBUTTONS拡張スタイルを加える方法で、ボタンのテキストが自動的にツールチップとして表示される。そのかわりボタンにはテキストが表示されない。明示的にBTNS_SHOWTEXTスタイルを指定したボタンにはテキストが表示されるがそのボタンにはツールチップは表示されない。

TBSTYLE_EX_MIXEDBUTTONSをセットする場合、他の拡張スタイルもセットするなら次のようにまとめてセットする。

SendMessage(hTBar, TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_MIXEDBUTTONS | TBSTYLE_EX_DRAWDDARROWS);

これを次のように二つに分けて行うと後からセットしたものしか反映されない。

SendMessage(hTBar, TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS);
SendMessage(hTBar, TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_MIXEDBUTTONS);

TBN_GETINFOTIPメッセージを処理してツールチップを表示することも出来る。

case WM_NOTIFY:
{
	NMHDR* pnmh = (NMHDR*)lp;

	if (pnmh->hwndFrom == hTBar)
	{
		if (pnmh->code == TBN_GETINFOTIP)
		{
			NMTBGETINFOTIP* pnm = (NMTBGETINFOTIP*)lp;
			int rcId = 0;
			switch (pnm->iItem) {
			case IDM_****: rcId = IDS_TTIP_****; break;
			  ・
			  ・
			  ・
			}
			TCHAR str[256];
			LoadString(hInst, rcId, str, 256);
			pnm->pszText = str;
			pnm->cchTextMax = lstrlen(str);
			return 0;
		}
	}
	break;
}

TBN_GETINFOTIPメッセージを処理する方法はそれ程面倒でもないし、同じボタンに毎回違うツールチップを表示するような柔軟な処理も簡単にできるのだけど、いつも同じテキストを表示するのに毎回処理するのは気に入らないというのであればTB_SETTOOLTIPSでボタンにツールチップをセットすることもできる。

HWND hTip = CreateWindow(
	TOOLTIPS_CLASS,
	NULL,
	TTS_ALWAYSTIP,
	CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
	hParentWnd,
	NULL,
	hInst,
	NULL);

TOOLINFO ti = {0};
ti.cbSize = sizeof(TOOLINFO);
ti.hwnd = hTBar;
ti.hinst = hInst;
ti.uFlags = TTF_SUBCLASS;

int textIds[] = { IDS_TIP_****, IDS_TIP_****, ... }; // テキストリソースIDの配列
int cmdIds[] = { IDM_****, IDM_****, ... }; // コマンドIDの配列
int maxtext = sizeof(textIds) / sizeof(int);
for (int i = 0; i < maxtext; ++i)
{
	SendMessage(hTBar, TB_GETRECT, cmdIds[i], (LPARAM)&ti.rect);
	ti.uId = cmdIds[i];
	ti.lpszText = (LPTSTR)textIds[i];
	SendMessage(hTip, TTM_ADDTOOL, 0, (LPARAM)&ti);
}
SendMessage(hTBar, TB_SETTOOLTIPS, (WPARAM)hTip, 0);

ti.uIdには対応するコマンドIDを設定してあるが、ツールチップはti.rectで表されるツールバーのクライアント領域に対して設定されるので、ti.uIdは全く無関係の値でも問題ない(しかし全く無関係のIDを用意するのも面倒だし、コマンドIDと共通のほうが都合のよいこともあろうからこうしている)。

スポンサーサイト




TrackBack0 Comment0 page top





管理者にだけ表示を許可する





TRACK BACK
TB*URL





Copyright © 手づくりアプリの裏側. all rights reserved.