我对着网上杂志的程序输入,然后再把源代码下下来,居然相同的代码,我抄的的就编译通不过
Compiling...
DlgMenuToolbarDlg.cpp
D:\Program Files\Microsoft Visual Studio\MyProjects\DlgMenuToolbar\DlgMenuToolbarDlg.cpp(214) : error C2664: '_wcstombsz' : cannot convert parameter 2 from 'class CString' to 'const unsigned short *'
        No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
D:\Program Files\Microsoft Visual Studio\MyProjects\DlgMenuToolbar\DlgMenuToolbarDlg.cpp(218) : error C2664: 'lstrcpynA' : cannot convert parameter 1 from 'unsigned short [80]' to 'char *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
执行 cl.exe 时出错.DlgMenuToolbar.exe - 1 error(s), 0 warning(s)
代码是:
BOOL CDlgMenuToolbarDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
{
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);

// UNICODE消息
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为工具条的HWND 
nID = ::GetDlgCtrlID((HWND)nID);
}

if (nID != 0) //不为分隔符
{
strTipText.LoadString(nID);
strTipText = strTipText.Mid(strTipText.Find('\n',0)+1);

#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;

// 使工具条提示窗口在最上面
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,SWP_NOACTIVATE|
SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER); 
return TRUE;
}
return TRUE;
}

解决方案 »

  1.   

    我抄的是
    BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
    {
    ASSERT(pNMHDR->code==TTN_NEEDTEXTA||pNMHDR->code==TTN_NEEDTEXTW); TOOLTIPTEXTA* pTTTA=(TOOLTIPTEXTA*)pNMHDR;
    TOOLTIPTEXTW* pTTTW=(TOOLTIPTEXTW*)pNMHDR; CString strTipText;
    UINT nID=pNMHDR->idFrom; if(pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
    pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
    {
    nID=::GetDlgCtrlID((HWND)nID);
    }
    if(nID!=0)
    {
    strTipText.LoadString(nID);
    strTipText=strTipText.Mid(strTipText.Find('\n',0)+1);
    #ifdef _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;
    ::SetWindowPos(pNMHDR->hwndFrom,HWND_TOP,0,0,0,0,
    SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
    return TRUE;
    }
    return TRUE;
    }
      

  2.   

    字符集有问题,当前用的Unicode,你用MBCS编译就行。