まず、ツールチップを静的に設定する方法です。
以下の例はダイアログ上のエディットコントロールにマウスカーソルを乗せると、
「edit control」というツールチップを表示します。
// stdafx.h内
#include <atlbase.h>
#include <atlapp.h>
extern CAppModule _Module;
#include <atlwin.h>
#include <atlcrack.h>
#include <atlmisc.h>
#include <atlctrls.h> // コントロール用クラスを使用するため
|
// maindlg.h内
class CMainDlg : public CDialogImpl<CMainDlg>
{
public:
enum { IDD = IDD_MAINDLG };
CEdit m_edit_tooltip; // ツールチップ表示用
// メッセージマップ
BEGIN_MSG_MAP_EX(CMainDlg)
MSG_WM_INITDIALOG(OnInitDialog)
COMMAND_ID_HANDLER_EX(IDOK, OnOK)
COMMAND_ID_HANDLER_EX(IDCANCEL, OnCancel)
END_MSG_MAP()
LRESULT OnInitDialog(HWND hWnd, LPARAM lParam){
// スクリーンの中央に配置
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, HWND hWndCtl){
EndDialog(nID);
}
void OnCancel(UINT uNotifyCode, int nID, HWND hWndCtl){
EndDialog(nID);
}
};
|
// Control.cpp内
#include "stdafx.h"
#include "resource.h"
#include "maindlg.h"
CAppModule _Module;
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR lpCmdLine, int nCmdShow)
{
HRESULT hRes = ::CoInitialize(NULL);
ATLASSERT(SUCCEEDED(hRes));
::DefWindowProc(NULL, 0, 0, 0L);
AtlInitCommonControls(ICC_COOL_CLASSES | ICC_WIN95_CLASSES);
hRes = _Module.Init(NULL, hInstance);
ATLASSERT(SUCCEEDED(hRes));
int nRet = 0;
// BLOCK: アプリケーション実行
{
CMainDlg dlgMain;
nRet = dlgMain.DoModal();
}
_Module.Term();
::CoUninitialize();
return nRet;
}
|
まず、リソースを作成します。ダイアログにエディットコントロールを配置し、
リソースIDを次のように指定します。
なお、エディットコントロールの[スタイル]ではデフォルト加え[複数行]、[水平スクロールバー]、
[垂直スクロールバー]、[垂直オートスクロール]、[改行を許可]にチェックを入れます。
| コントロール名 |
リソースID |
| エディット |
IDC_EDIT_TOOLTIP |
次に、stdafx.h内では、CToolTipCtrlクラスを使用するためにatlctrls.hヘッダをインクルードします。
次に、CMainDlgクラスのWM_INITDIALOGメッセージハンドラで
エディットコントロールを初期化し、ツールチップコントロールを作成します。
その後エディットコントロールに対するツールチップ情報を作成してそれをツールチップコントロールに追加します。
これで、エディットコントロールにマウスカーソルを乗せるとツールチップが表示されます。
なお、表示するツールチップ文字列を複数行にすることもできます。
そのためには、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);
|
|