MFCでは、ほぼすべてのコントロールには、プロンプトの情報を持っているが、我々はリストボックスコントロールの上にマウス、クリトリスは非常にああ落胆されていないされていないので、私は特に、今日書いたときにのみリストボックスには、このような特徴を持っていませんその効果を達成するために、リストボックスコントロールの簡単な示唆に富みます。
アイデアは単純です:それを踏襲し、我々は最初のリストボックスコントロールを継承し、その後(情報の表示キャリア)で独自のMyListBoxという中でのCToolTipCtrl制御を追加するために、独自のMyListBoxというの構築ので、我々はのCToolTipCtrlコントロールを作成するためのインタフェースを提供する必要があり、コントロールが後に作成されます。それは、我々は、マウスを移動すると、それがマウスの位置の変化であり、異なるコンテンツを表示するので、マウス移動イベント、情報のセットを必要とし、インターフェイス情報のセットが必要である。ときにマウスが移動コードは以下の通りである:コードは、cppのファイルを一覧表示します
BOOL CTipListBox :: CreateToolTip()
{
IF(NULL == m_toolTipMessage)
{
m_toolTipMessage =新規のCToolTipCtrl()。
もし(m_toolTipMessage->を作成します(この、TTS_ALWAYSTIP | TTS_NOPREFIX))
{
m_toolTipMessage->アクティブ(TRUE);
m_toolTipMessage-> SetDelayTime(100)。
m_toolTipMessage-> SetMaxTipWidth(500)。
m_toolTipMessage-> AddTool(この); //帮定控件ツールチップ
TRUEを返します。
}
}
FALSEを返します。
}
ボイドCTipListBox :: SetTipMessage(CStringの&メッセージ)
{
IF(message.IsEmpty())
{
返します。
}
IF(!m_toolTipMessage-> GetSafeHwnd()= NULL)
{
m_toolTipMessage-> UpdateTipText(メッセージ、この)。//更新要显示的字符
}
他
{
IF(CreateToolTip())
{
m_toolTipMessage-> AddTool(このメッセージ)。
}
}
m_toolTipMessage->アクティブ(TRUE);
}
:: CTipListBox ONMOUSEMOVEボイド(UINT nFlags、CPointポイント)
{
CPoint白金; //現在のマウス位置の
GetCursorPos(&Pt)から、
一方ScreenToClient(&白金); //クライアント領域座標に
CRect四角形、コントロールの//サイズ
GetClientRect(&RECT);
BOOL INOUT;
CStringのメッセージ。
IF(rect.PtInRect(PT))
{
int型SELECT = ItemFromPoint(白金、INOUT); //マウスの情報が一つである
GetTextは(SELECT、メッセージ);
SetTipMessage(メッセージ);
}
}
BOOL CTipListBox ::のPreTranslateMessage(MSG * pMsgを)
{
IF(!m_toolTipMessage-> GetSafeHwnd()= NULL)
{
IF(pMsg->メッセージ== WM_MOUSEMOVE)
{
m_toolTipMessage-> RelayEvent(pMsgを)。
SendMessage(WM_MOUSEMOVE)。
}
}
返すのCWnd :: PreTranslateMessageの(pMsgを);
}