居候部屋/ 居候掲示板/ 大家さん

既存のコードでボタン上にマウスを置いたときにツールチップを表示
 ATL/WTLで作ってたコードを Visual Studio 2012 Express でやろうとしたら、
 'atlbase.h': No such file or directory "atlbase.h" がありません。
 色々、試しましたが、素直にそれぞれのボタンにツールチップを設定することにしました。 今回は MFC も ATL/WTL も使いません。コモンコントロールを使います。
 まず、インクルードファイルを追加で挿入します。リンクするライブラリも指定しておきます
#include <commctrl.h>
#pragma comment(lib,"comctl32.lib")

 次に、ボタンコントロールのハンドルを得るために TOOLINFO型、HWND 型の変数をそれぞれ宣言しておきます。ついでにツールチップ用のハンドル(HWND)もセットで宣言します。 ここでは2つのボタンを想定して、それぞれ
TOOLINFO ti1,ti2;
HWND w1,w2,t1,t2;
とし、ボタンを作成する CreateWindow() の戻り値を w1,w2 に入れます(w2の方は省略)。ツールチップ用のウィンドウも t1,t2として開きます(こっちは CreateWindowEx)。
InitCommonControls();
w1=CreateWindow(TEXT("BUTTON"),TEXT("Paste"),
 BS_PUSHBUTTON|BS_BITMAP^WS_CHILD^WS_VISIBLE^WS_GROUP^WS_TABSTOP,
 5,5,34,32,hWnd,(HMENU)ID_BUTTON0,hInst,NULL);
t1=CreateWindowEx(0,TOOLTIPS_CLASS,NULL,WS_POPUP|TTS_ALWAYSTIP,
 CW_USEDEFAULT,CW_USEDEFAULT,
 CW_USEDEFAULT,CW_USEDEFAULT,w1,NULL,hInst,NULL);
GetClientRect(w1,&ti1.rect);
ti1.cbSize=sizeof(TOOLINFO);
ti1.uFlags=TTF_IDISHWND|TTF_SUBCLASS;
ti1.hwnd=w1;
ti1.uId=(WPARAM)w1;
ti1.lpszText=TEXT("クリップボード\r\nから貼り付け"); //表示する文字列
SendMessage(ti1,TTM_ADDTOOL,0,(LPARAM)&ti1);
 右がビルドしてツールチップが表示できたさま。
 TTM_SETMAXTIPWIDTH
をSendMessageすれば、ツールチップ内の改行も可能です。
 キャプチャはウィンドウズの拡大鏡を使ってます。マウスカーソルまで取り込めます。
ではまた