目前有需要动态改变工具栏项提示,程序是采用SDK实现,实在做不出来,来请教各位,望指点。

解决方案 »

  1.   

    http://msdn.microsoft.com/en-us/library/hh298386%28v=vs.85%29.aspx
      

  2.   

    动态改变工具栏按钮提示文本:
      在MFC中框架类CFrameWnd通过函数OnToolTipText处理工具提示,可在MFC的文件AFXWIN.H及WINFRM.CPP找到该函数的定义及实现。如果要动态改变工具提示,需要重载该函数。实际上MFC的CMDIChildWnd类就重载了该函数。
      
      1、在MainFrm.h的DECLARE_MESSAGE_MAP()前添加函数的定义:
      
          afx_msg BOOL OnToolTipText(UINT nID, NMHDR* pNMHDR, LRESULT* pResult);
      
      2、在MainFrm.cpp的END_MESSAGE_MAP()前面添加消息映射:
      
           ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
           ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
      3、在MainFrm.cpp中添加动态提示的实现代码:
      
      假如对ID为ID_PAUSE的工具栏按钮实现动态提示,如下(红色部分)。其中SendMessage(WM_SETMESSAGESTRING, 0, (LPARAM)(LPCTSTR)strTipText)用来设置状态条的显示文本。
      
      BOOL CMainFrame::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
      {
       ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
      
       // 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 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==ID_PAUSE)
       {
       strTipText=(m_bPause?"继续":"暂停");
       SendMessage(WM_SETMESSAGESTRING, 0, (LPARAM)(LPCTSTR)strTipText);
       }
       else if (nID != 0) // will be zero on a separator
       {
       // don’t handle the message if no string resource found
       if (AfxLoadString(nID, szFullText) == 0)
        return FALSE;
      
       // 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, _countof(pTTTA->szText));
       else
       _mbstowcsz(pTTTW->szText, strTipText, _countof(pTTTW->szText));
      #else
       if (pNMHDR->code == TTN_NEEDTEXTA)
       _wcstombsz(pTTTA->szText, strTipText, _countof(pTTTA->szText));
       else
       lstrcpyn(pTTTW->szText, strTipText, _countof(pTTTW->szText));
      #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|SWP_NOOWNERZORDER);
       strTipText.Empty();
       return TRUE;  // message was handled
      }
      

  3.   

    如果是SDK的话,找句柄,SendMessage
      

  4.   


    wcscpy(pCaption5,L "hao   ahaoa "); 
    TBBUTTONINFO   tbinfo; 
    memset(&tbinfo,0,sizeof(TBBUTTONINFO)); 
    tbinfo.cbSize=sizeof(TBBUTTONINFO); 
    tbinfo.dwMask=TBIF_TEXT|TBIF_COMMAND; 
    //tbinfo.idCommand=IDM_BTN2; 
    tbinfo.pszText=pCaption5; 
    ::SendMessage(m_hWnd,TB_SETBUTTONINFO,IDM_BTN2,(LPARAM)&tbinfo);
      

  5.   

    http://pan.baidu.com/share/link?shareid=63466&uk=1174701208