我在对话框上加了个关于工具栏提示的功能之后,然后想在类视图里添加菜单命令响应,但是却出现如下提示?没有办法添加命令响应,下面的提示是什么意思呢!
Pasing error : Expected ")"
Input Line : "ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0 0XFFFF, OnToolTipText)"

解决方案 »

  1.   

    本帖最后由 Mackz 于 2008-08-03 23:13:07 编辑
      

  2.   


    我加了工具栏提示的代码,代码如下;加入这个之后出现的问题,0 0XFFFF写错了,应该有个逗号,这你都看出来了,佩服!添加了这个代码之后,右击类CUwtNetSimDlg添加消息处理或者虚函数的时候就会出现上面的提示。让后无法添加消息处理和虚函数,同样,在view的类视图里面也不能选择这个对话框,也出同样提示。程序可以运行,工具栏的提示也有,但是就是有上面的问题。
    BEGIN_MESSAGE_MAP(CUwtNetSimDlg, CDialog)

    ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
    ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText) ON_COMMAND(IDM_TSK_NEW, OnTskNew)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()类的保护成员
    protected:
    afx_msg void OnContextMenu(CWnd*, CPoint point);
    HICON m_hIcon;
    CImageList m_imgList;//存储工具栏图标列表
    // Generated message map functions

    afx_msg BOOL OnToolTipText(UINT nID, NMHDR* pNMHDR, LRESULT* pResult);
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()BOOL CUwtNetSimDlg::OnToolTipText(UINT , NMHDR* pNMHDR, LRESULT* pResult)
    {
        ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);    // if there is a top level routing frame then let it handle the message
        if (GetRoutingFrame() != NULL) return FALSE;    // to be thorough we will need to handle UNICODE versions of the message also !!
        TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
        TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
    //    TCHAR szFullText[512];
        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 != 0) // will be zero on a separator
        {
     //       AfxLoadString(nID, szFullText);
    strTipText.LoadString(nID);
    //        strTipText=szFullText;#ifndef _UNICODE
            if (pNMHDR->code == TTN_NEEDTEXTA)
            {
                lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
            }
            else
            {
                _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
            }
    #else
            if (pNMHDR->code == TTN_NEEDTEXTA)
            {
                _wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText));
            }
            else
            {
                lstrcpyn(pTTTW->szText, strTipText, sizeof(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);
            
            return TRUE;
        }    return FALSE;
    }
      

  3.   

    你把自己添加的消息映射项放到//}}AFX_MSG_MAP 这一行下面试试看,其他没什么问题。不过这个逻辑有问题:
        if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ¦¦ 
            pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
    应该是:
        if ((pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND)) ¦¦ 
            (pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND)))
    当然事实上运行的时候可能没有出错。