手作りアプリ
|
フリーソフト紹介
|
ツールバーのボタンに対してツールチップを表示する方法はいくつかある。
一番簡単なのは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と共通のほうが都合のよいこともあろうからこうしている)。
スポンサーサイト
| ホーム |