次に示すのは、静的なツールチップを作成する方法です。
ダイアログ上のエディットコントロールにマウスカーソルを乗せると、
「edit control」というツールチップを表示します。
// stdafx.h
#pragma once
#include <atlbase.h>
#include <atlapp.h>
extern CAppModule _Module;
#include <atlwin.h>
#include <atlcrack.h>
#include <atlmisc.h>
#include <atlctrls.h> // コントロール用クラスを使用するため
|
// MainDlg.h
#pragma once
class CMainDlg : public CDialogImpl<CMainDlg>
{
public:
enum { IDD = IDD_MAINDLG };
CEdit m_edit_tooltip; // ツールチップ表示用
BEGIN_MSG_MAP(CMainDlg)
MSG_WM_INITDIALOG(OnInitDialog)
COMMAND_ID_HANDLER_EX(IDOK, OnOK)
COMMAND_ID_HANDLER_EX(IDCANCEL, OnCancel)
END_MSG_MAP()
BOOL OnInitDialog(CWindow wndFocus, LPARAM lInitParam){
// スクリーンの中央に配置
CenterWindow();
// 大きいアイコン設定
HICON hIcon = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR,
::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON));
SetIcon(hIcon, TRUE);
// 小さいアイコン設定
HICON hIconSmall = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR,
::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON));
SetIcon(hIconSmall, FALSE);
// コントロール設定
m_edit_tooltip = GetDlgItem(IDC_EDIT_TOOLTIP);
// ツールチップコントロール作成
CToolTipCtrl tooltip;
tooltip.Create(m_hWnd);
tooltip.Activate(TRUE);
// エディットコントロールのツールチップ情報をツールチップコントロールに追加
CToolInfo tiEdit(TTF_SUBCLASS, m_edit_tooltip, 0, NULL, _T("edit control"));
tooltip.AddTool(tiEdit);
return TRUE;
}
void OnOK(UINT uNotifyCode, int nID, CWindow wndCtl){
EndDialog(nID);
}
void OnCancel(UINT uNotifyCode, int nID, CWindow wndCtl){
EndDialog(nID);
}
};
|
// SampleProject.cpp
#include "stdafx.h"
#include "resource.h"
#include "MainDlg.h"
CAppModule _Module;
int WINAPI _tWinMain(HINSTANCE hInstance,
HINSTANCE /*hPrevInstance*/, LPTSTR /*lpstrCmdLine*/, int /*nCmdShow*/)
{
HRESULT hRes = ::CoInitialize(NULL);
ATLASSERT(SUCCEEDED(hRes));
::DefWindowProc(NULL, 0, 0, 0L);
AtlInitCommonControls(ICC_BAR_CLASSES);
hRes = _Module.Init(NULL, hInstance);
ATLASSERT(SUCCEEDED(hRes));
CMainDlg dlg;
int nRet = (int) dlg.DoModal();
_Module.Term();
::CoUninitialize();
return nRet;
}
|
まず、リソースを作成します。ダイアログにエディットコントロールを配置し、
[ID]を次のように設定します。
なお、エディットコントロールの[プロパティ]では[MultiLine]、[Horizontal Scroll]、
[Vertical Scroll]、[Auto VScroll]、[Want Return]を[True]に設定します。
| コントロール名 |
ID |
| エディット |
IDC_EDIT_TOOLTIP |
次に、stdafx.hヘッダでは、CToolTipCtrlクラスを使用するためにatlctrls.hヘッダをインクルードします。
CMainDlgクラスでは、まず、エディットコントロール用に
CEditクラスのインスタンスをメンバ変数として宣言します。
これを使うためには、WM_INITDIALOGメッセージハンドラでコントロールのハンドルを代入する必要があります。
次に、WM_INITDIALOGメッセージハンドラでツールチップコントロールを作成し、
エディットコントロールに対するツールチップ情報をツールチップコントロールに追加します。
ツールチップ情報はTOOLINFO構造体から派生したCToolInfoクラスでカプセル化されます。
CToolInfoクラスのコンストラクタ引数は、順にTOOLINFO構造体の
uFlags、hwnd、uId、rect、lpszText、lParamに対応し、第3引数以降は省略可能です。
これで、エディットコントロールにマウスカーソルを乗せるとツールチップが表示されます。
なお、表示するツールチップ文字列を複数行にすることもできます。
CToolTipCtrlクラスのメンバ関数であるSetMaxTipWidth()で
ツールチップの幅を設定すると、幅よりも長い文字列は自動的に複数行で表示されます。
// OnInitDialog()内
CToolTipCtrl tooltip;
tooltip.Create(m_hWnd);
tooltip.Activate(TRUE);
// 複数行表示のためにツールチップ幅を設定
tooltip.SetMaxTipWidth(80);
CToolInfo tiEdit(TTF_SUBCLASS, m_edit_tooltip, 0, NULL, _T("複数行のツールチップ"));
tooltip.AddTool(tiEdit);
|
また、文字列の任意の場所で改行したい場合は、「\r\n」で改行することができます。
// OnInitDialog()内
CToolTipCtrl tooltip;
tooltip.Create(m_hWnd);
tooltip.Activate(TRUE);
// 複数行表示のためにツールチップ幅を設定
tooltip.SetMaxTipWidth(80);
CToolInfo tiEdit(TTF_SUBCLASS, m_edit_tooltip, 0, NULL, _T("複数行の\r\nツールチップ"));
tooltip.AddTool(tiEdit);
|
|