私はすでにツールチップの生成を扱っているアプリケーションを持っています。私は親フレームを持つCWnd派生クラスを変更しています。ツールチップは実装されていません。私はすでにあるツールチップのコードを活用したいと思いますので、私は、フレームウィンドウを取得するためにGetParentFrame()
を使用することができますCFrameWndにTTN_NEEDTEXTを転送する方法はありますか?
BEGIN_MESSAGE_MAP(CMyWindow, CWnd)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipNotify)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipNotify)
END_MESSAGE_MAP()
BOOL CMyWindow::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
{
UNREFERENCED_PARAMETER(id);
UNREFERENCED_PARAMETER(pResult);
// need to handle both ANSI and UNICODE versions of the message
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
CStringA strTipText;
UINT_PTR nID = pNMHDR->idFrom;
if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{
// idFrom is actually the HWND of the tool
nID = ::GetDlgCtrlID((HWND)nID);
}
if (nID != 0) // will be zero on a separator
strTipText.Format("Control ID = %d", nID);
if (pNMHDR->code == TTN_NEEDTEXTA)
{
strncpy_s(pTTTA->szText, sizeof(pTTTA->szText), strTipText,
strTipText.GetLength() + 1);
}
else
{
::MultiByteToWideChar(CP_ACP, 0, strTipText, strTipText.GetLength() + 1,
pTTTW->szText, sizeof(pTTTW->szText)/(sizeof pTTTW->szText[0]));
}
return TRUE; // message was handled
}
:thisから
、私は、ツールチップには、次のコードを追加して表示するために取得することができます私は一貫した外観を得るためにその場で。 TTN_NEEDTEXT
メッセージをフレームウィンドウで処理できるように転送できる方法はありますか?
'GetParentFrame()'はHWNDまたはCWindowを返しますか? – andlabs
@andlabs私の机ではないが、HWNDではなくクラスを返すと思う。 – Adrian
私は、Unicode文字列を使用して、必要に応じて*を* CP_ACPに変換することをお勧めします。 – andlabs