2013-10-29 100 views
2

我使用功能從MSDN Create a Tooltip for a Control工具提示按鈕

HWND CreateToolTip(int toolID, HINSTANCE hInst, HWND hDlg, PTSTR pszText) { 
    if (!toolID || !hDlg || !pszText) { 
     return FALSE; 
    } 

HWND hwndTool = GetDlgItem(hDlg, toolID); 

HWND hwndTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL, 
    WS_POPUP |TTS_ALWAYSTIP | TTS_BALLOON, 
    CW_USEDEFAULT, CW_USEDEFAULT, 
    CW_USEDEFAULT, CW_USEDEFAULT, 
    hDlg, NULL, 
    hInst, NULL); 

if (!hwndTool || !hwndTip) { 
    return (HWND)NULL; 
} 

TOOLINFO toolInfo; 
toolInfo.cbSize = sizeof(toolInfo); 
toolInfo.hwnd = hDlg; 
toolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS; 
toolInfo.uId = (UINT_PTR)hwndTool; 
toolInfo.lpszText = pszText; 
SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo); 

return hwndTip; 
} 

然後在WndProcWM_CREATE創建按鈕Button=CreateWindowEx( 0, L"BUTTON", L"My Button", WS_VISIBLE|WS_CHILD, 10, 10, 100, 24, hWnd, (HMENU)ID_TOOLTIP, hInst, NULL);
最後創建工具提示tooltip_mess = CreateToolTip(ID_TOOLTIP, hInst, hWnd, (PTSTR)"Tooltip message");
但它不工作,我看不到我的提示,其中我做錯了?

+1

你通過自身激活提示找到一條TTM_ACTIVATE消息? –

+0

SendMessage(tooltip_mess,TTM_ACTIVATE,TRUE,0);但相同的結果 – user2650128

+0

我需要在WM_NOTIFY中寫入什麼? – user2650128

回答

1

試試這個:

HWND CreateToolTip(int toolID, HWND hDlg, HINSTANCE hInst, PTSTR pszText) 
{ 
    if (!toolID || !hDlg || !pszText) 
    { 
     return NULL; 
    } 

    // Get the window of the tool. 
    HWND hwndTool = GetDlgItem(hDlg, toolID); 
    if (!hwndTool) 
    { 
     return NULL; 
    }        

    // Create the tooltip. g_hInst is the global instance handle. 
    HWND hwndTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL, 
           WS_POPUP |TTS_ALWAYSTIP | TTS_BALLOON, 
           CW_USEDEFAULT, CW_USEDEFAULT, 
           CW_USEDEFAULT, CW_USEDEFAULT, 
           hDlg, NULL, 
           hInst, NULL); 

    if (!hwndTip) 
    { 
     return NULL; 
    }        

    // Associate the tooltip with the tool. 
    TOOLINFO toolInfo = { 0 }; 
    toolInfo.cbSize = sizeof(toolInfo); 
    toolInfo.hwnd = hDlg; 
    toolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS; 
    toolInfo.uId = (UINT_PTR)hwndTool; 
    toolInfo.lpszText = pszText; 
    if (!SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo)) 
    { 
     DestroyWindow(hwndTip); 
     return NULL; 
    } 

    return hwndTip; 
} 

case WM_CREATE: 
{ 
    Button = CreateWindowEx(0, L"BUTTON", L"My Button", WS_VISIBLE|WS_CHILD, 10, 10, 100, 24, hWnd, (HMENU)ID_TOOLTIP, hInst, NULL); 

    tooltip_mess = CreateToolTip(ID_TOOLTIP, hWnd, hInst, L"Tooltip message"); 

    break; 
} 

if (tooltip_mess) 
    SendMessage(tooltip_mess, TTM_ACTIVATE, TRUE, 0); 

if (tooltip_mess) 
    SendMessage(tooltip_mess, TTM_ACTIVATE, FALSE, 0); 
+0

嘗試了這段代碼,但寫了tooltip_mess = CreateToolTip(ID_TOOLTIP,hInst,hWnd,L「Tooltip message」);沒有hInst,如果我正確的功能只接收3個參數。不幸的是我看不到工具提示。哪裏需要寫「如果」? – user2650128

+0

我更新了我的答案。至於'if'語句,當你需要顯示/隱藏按鈕上的tooptip時,你可以將它們放在需要它們的地方。 –

+0

if(!SendMessage(hwndTip,TTM_ADDTOOL,0,(LPARAM)&toolInfo))always DestroyWindow它是正常的嗎?我想做一些類似於工具欄的東西,當鼠標點擊按鈕時 - >顯示工具提示。當我單擊按鈕時,我嘗試顯示工具提示,但出現錯誤提示「變量'tooltip_mess'正在被使用而未被初始化。」 – user2650128