2010-12-03 15 views
5

複数のウィンドウで黄色のツールチップを作成することはできますか?Windowsの黄色いツールチップの複数行?

http://img830.imageshack.us/img830/6117/tooltip.gif

私は\nと試みたが、それは働いていません。

EDIT:

これは私のコードでは、私が持っている機能です。私はMSDNの指示に従いましたが、それを動作させることができませんでした(コメントを見てください:// Multiline tooltip)。

void CreateToolTipForRect(HWND hwndParent) 
{ 
    if (!bCanCreateToolTips) 
     return; 
    // Get list of areas we want tooltips on 
    NSUI::TButton* tbt; 
    tbt = gUserInterface->buttonList; 

    HWND hwndTT; 

    // Array to store all tooltip texts 
    static char string[100][ RM_SCROLLTEXT_MAXLEN + 2 ]; 

    // Go through the list 
    while (tbt != NULL) 
    { 
     // Check id there is a tooltip text defined for this area 
     int sid = GetResourceIdFromButtonId(tbt->id); 
     if (sid == -1) 
     { 
      tbt = tbt->next; 
      continue; 
     } 

     if (!ttwnd[tbt->id]) 
     { 
      // Create a ToolTip. 
      hwndTT = CreateWindowEx(WS_EX_TOPMOST, 
       TOOLTIPS_CLASS, NULL, 
       WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,      
       CW_USEDEFAULT, CW_USEDEFAULT, 
       CW_USEDEFAULT, CW_USEDEFAULT, 
       hwndParent, NULL, ((QunicApp *)CQMainGetApp())->CQWinApp_GetHInst(),NULL); 

      ttwnd[tbt->id] = hwndTT; 

      SetWindowPos(hwndTT, HWND_TOPMOST, 
       0, 0, 0, 0, 
       SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); 
      // Get tooltip from resources 
      int res = LoadString(((QunicApp *)CQMainGetApp())->CQWinApp_GetHInst(), sid, string[tbt->id], RM_SCROLLTEXT_MAXLEN); 
     } 
     // Set up "tool" information. 
     TOOLINFO ti = { 0 }; 
     ti.cbSize = sizeof(TOOLINFO); 
     ti.uFlags = TTF_SUBCLASS; 
     ti.hwnd = hwndParent; 
     ti.hinst = ((QunicApp *)CQMainGetApp())->CQWinApp_GetHInst(); 

     ti.lpszText = string[tbt->id]; 

     // Set area 
     ti.rect.left = tbt->tx; 
     ti.rect.right = tbt->bx; 
     ti.rect.top = tbt->ty; 
     ti.rect.bottom = tbt->by; 

     // Associate the ToolTip with the "tool" window. 
     SendMessage(ttwnd[tbt->id], TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti); 

     // Multiline tooltip - Ilija tried with this 
     /*LPNMTTDISPINFO pInfo = (LPNMTTDISPINFO)tbt; 
     SendMessage(pInfo->hdr.hwndFrom, TTM_SETMAXTIPWIDTH, 0, 150);*/ 

     tbt = tbt->next; 
    } 
    // Extra one, area or button is not known yet 
    // Create a ToolTip. 
    hwndTT = CreateWindowEx(WS_EX_TOPMOST, 
     TOOLTIPS_CLASS, NULL, 
     WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,      
     CW_USEDEFAULT, CW_USEDEFAULT, 
     CW_USEDEFAULT, CW_USEDEFAULT, 
     hwndParent, NULL, ((QunicApp *)CQMainGetApp())->CQWinApp_GetHInst(),NULL); 

    SetWindowPos(hwndTT, HWND_TOPMOST, 
     0, 0, 0, 0, 
     SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); 

    // Set up "tool" information. 
    TOOLINFO ti = { 0 }; 
    ti.cbSize = sizeof(TOOLINFO); 
    ti.uFlags = TTF_SUBCLASS; 
    ti.hwnd = hwndParent; 
    ti.hinst = ((QunicApp *)CQMainGetApp())->CQWinApp_GetHInst(); 

    // Get tooltip from resources 
    int res = LoadString(ti.hinst, IDS_PREVIEW, string[99], RM_SCROLLTEXT_MAXLEN); 

    ti.lpszText = string[99]; 

    // Set area 
    ti.rect.left = 7; 
    ti.rect.right = 104; 
    ti.rect.top = 131; 
    ti.rect.bottom = 145; 

    // Associate the ToolTip with the "tool" window. 
    SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti); 
} 

おかげで、
Ilija

答えて

0

Windowsは改行のための\r\nを使用しています。代わりにそれを試してください、それは動作するはずです。 MSDNを参照してください。

+0

なぜ-1ですか?誰でも落とした、あなたは本当にこれを試してみましたか? – ybungalobill

+0

それは動作しません...あなたが以前にTTM_SETMAXTIPWIDTHを使用する場合、あなたが送信したリンクでは...しかし、何も動作しません... btw、-1は私ではありません:) –

7

3種類のツールチップがあります。スクリーンショットにトラッキングツールチップが表示されます。次に、複数のツールチップがあり、TTM_SETMAXTIPWIDTHを送信し、TTN_GETDISPINFOに応答します。バルーンツールチップがあり、TTS_BALLOONウィンドウスタイルフラグを指定します。後者の2つはあなたの請求書に適合します。

SDK articleには良いコード例があります。

+0

ハンス、答えてくれてありがとう。私はリンクからの指示に従ったが、それを動作させることができなかった。私は経験のC + +のユーザーではないので、私はこれを理解するのに苦労している。私は自分の質問を編集し、私が変更すると思われる現在の関数のコードを貼り付けました。私が間違っていることを確認してください。ありがとう!! –

+1

'SendMessage(...、TTM_SETMAXTIPWIDTH、0、MAXINT);'を使ってみてください。 – wj32

+0

おそらく 'SendMessage'の最初のパラメータが間違っていますか? –

0

通常のツールチップでは\ n、バルーンツールチップでは\ n、\ r \ nはどちらも機能しません。私はUnicodeを使用していません。あなたのTTN_NEEDTEXTハンドラで

1

次のトリックを使用して複数行を行うには、標準のツールチップコントロールを強制することができます幅を設定することにより、

// force multi-line tool tips 
::SendMessage(pNMHDR->hwndFrom, TTM_SETMAXTIPWIDTH, 0, kToolTipWidth); 

かかわらず、私はmuiltilineを描画することができますよヒント:

pToolTipText->lpszText = _T("blah blah blah\r\nmore blah blah\r\nline 3 of blah"); 

ここで、kToolTipWidthは、いくつかの有用な最大幅です(例:600-800)。

奇妙なことに、私はTTN_NEEDTEXTハンドラでこのメッセージを再発行する必要があります。これは、MFCがスレッドごとのグローバルツールチップコントロールを使用するMFCアプリケーションに当てはまります。新しいツールチップコントロールは、新しいダイアログが作成されるたびにデフォルト値にリセットされる可能性があります。したがって、MFC以外のアプリケーションでは、一度しか初期化できない可能性があります。

お楽しみください!

関連する問題