当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>Visual C++教程

Dialog中加入一个工具栏让它有提示信息

    工具栏一般使用在SDI或是MDI里。

    如果我们在一个Dialog里新建了一个工具栏,它的提示信息可能就没有办法出来了。

    主要的原因是由于我们没有为这个工具栏写提示信息的消息映射函数。

    如果要增加的话。就可以这样。

    1.增加一个这样的函数处理函数

    afx_msg BOOL OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult );

    BOOL MyDialog::OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
    {
     ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);

     // allow top level routing frame to handle the message
     if (GetRoutingFrame() != NULL)
      return FALSE;

     // need to handle both ANSI and UNICODE versions of the message
     TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
     TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
     TCHAR szFullText[256];
     CString strTipText;
     UINT_PTR nID = (UINT_PTR)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 = ((UINT_PTR)(WORD)::GetDlgCtrlID((HWND)nID));
     }

     if (nID != 0) // will be zero on a separator
     {
      AfxLoadString((UINT)nID, szFullText);
      // this is the command id, not the button index
      AfxExtractSubString(strTipText, szFullText, 1, '\n');
     }
    #ifndef _UNICODE
     if (pNMHDR->code == TTN_NEEDTEXTA)
      lstrcpyn(pTTTA->szText, strTipText,
      (sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0])));
     else
     {
      int n = MultiByteToWideChar(CP_ACP, 0, strTipText, -1, pTTTW->szText,
       sizeof(pTTTW->szText)/sizeof(pTTTW->szText[0]));
      if (n > 0)
       pTTTW->szText[n-1] = 0;
     }
    #else
     if (pNMHDR->code == TTN_NEEDTEXTA)
     {
      int n = WideCharToMultiByte(CP_ACP, 0, strTipText, -1,
       pTTTA->szText, sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0]),
       NULL, NULL);
      if (n > 0)
       pTTTA->szText[n-1] = 0;
     }
     else
      lstrcpyn(pTTTW->szText, strTipText,
      (sizeof(pTTTW->szText)/sizeof(pTTTW->szText[0])));
    #endif
     *pResult = 0;

     // bring the tooltip window above other popup windows
     ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,
      SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE);

     return TRUE;    // message was handled
    }

    2.增加一个头文件

    #include <afxpriv.h>

    3.创建消息映射

     ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
     ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)

    这样就行了。


 

相关内容
赞助商链接