关于WM_COMMAND消息的返回值的有关问题,求高人指点~

关于WM_COMMAND消息的返回值的问题,求高人指点~~~~~~
我发现调用::SendMessage发送WM_COMMAND的消息,该消息的返回值和MSDN上说的有点不同。

MSDN的说法
Return Value
If an application processes this message, it should return zero.
大致的意思就是如果应用程序处理了消息,将返回0

测试的结果
nState = ::SendMessage(this->m_hWnd, WM_COMMAND, IDC_BTN_TOGETSTAT, (LPARAM)btn_test.m_hWnd);
该条发送出去后,nState的值为1,而这个WM_COMMAND的消息是有被响应的。

求高人指点

------解决方案--------------------
返回值:返回值指定消息处理的结果,依赖于所发送的消息。 
http://baike.baidu.com/view/1080187.htm
------解决方案--------------------
nState = ::SendMessage(this->m_hWnd, WM_COMMAND, IDC_BTN_TOGETSTAT, (LPARAM)btn_test.m_hWnd);
-->
nState = ::SendMessage(this->m_hWnd, WM_COMMAND, MAKEWPARAM(IDC_BTN_TOGETSTAT, BN_CLICKED), (LPARAM)btn_test.m_hWnd);

------解决方案--------------------
nState = ::SendMessage(this->m_hWnd, WM_COMMAND, IDC_BTN_TOGETSTAT, (LPARAM)btn_test.m_hWnd);
-->
nState = ::SendMessage(this->m_hWnd, WM_COMMAND, MAKEWPARAM(IDC_BTN_TOGETSTAT, BN_CLICKED), (LPARAM)btn_test.m_hWnd);

------解决方案--------------------
C/C++ code
AFX_STATIC BOOL AFXAPI _AfxDispatchCmdMsg(CCmdTarget* pTarget, UINT nID, int nCode,
    AFX_PMSG pfn, void* pExtra, UINT nSig, AFX_CMDHANDLERINFO* pHandlerInfo)
        // return TRUE to stop routing
{
    ASSERT_VALID(pTarget);
    UNUSED(nCode);   // unused in release builds

    union MessageMapFunctions mmf;
    mmf.pfn = pfn;
    BOOL bResult = TRUE; // default is ok

    if (pHandlerInfo != NULL)
    {
        // just fill in the information, don't do it
        pHandlerInfo->pTarget = pTarget;
        pHandlerInfo->pmf = mmf.pfn;
        return TRUE;
    }

    switch (nSig)
    {
    case AfxSig_vv:
        // normal command or control notification
        ASSERT(CN_COMMAND == 0);        // CN_COMMAND same as BN_CLICKED
        ASSERT(pExtra == NULL);
        (pTarget->*mmf.pfn_COMMAND)(); // 这里BN_CLICKED消息响应
        break;

    case AfxSig_bv:
        // normal command or control notification
        ASSERT(CN_COMMAND == 0);        // CN_COMMAND same as BN_CLICKED
        ASSERT(pExtra == NULL);
        bResult = (pTarget->*mmf.pfn_bCOMMAND)();
        break;

    case AfxSig_vw:
        // normal command or control notification in a range
        ASSERT(CN_COMMAND == 0);        // CN_COMMAND same as BN_CLICKED
        ASSERT(pExtra == NULL);
        (pTarget->*mmf.pfn_COMMAND_RANGE)(nID);
        break;

    case AfxSig_bw:
        // extended command (passed ID, returns bContinue)
        ASSERT(pExtra == NULL);
        bResult = (pTarget->*mmf.pfn_COMMAND_EX)(nID);
        break;

    case AfxSig_vNMHDRpl:
        {
            AFX_NOTIFY* pNotify = (AFX_NOTIFY*)pExtra;
            ASSERT(pNotify != NULL);
            ASSERT(pNotify->pResult != NULL);
            ASSERT(pNotify->pNMHDR != NULL);
            (pTarget->*mmf.pfn_NOTIFY)(pNotify->pNMHDR, pNotify->pResult);
        }
        break;
    case AfxSig_bNMHDRpl:
        {
            AFX_NOTIFY* pNotify = (AFX_NOTIFY*)pExtra;
            ASSERT(pNotify != NULL);
            ASSERT(pNotify->pResult != NULL);
            ASSERT(pNotify->pNMHDR != NULL);
            bResult = (pTarget->*mmf.pfn_bNOTIFY)(pNotify->pNMHDR, pNotify->pResult);
        }
        break;
    case AfxSig_vwNMHDRpl:
        {
            AFX_NOTIFY* pNotify = (AFX_NOTIFY*)pExtra;
            ASSERT(pNotify != NULL);
            ASSERT(pNotify->pResult != NULL);
            ASSERT(pNotify->pNMHDR != NULL);
            (pTarget->*mmf.pfn_NOTIFY_RANGE)(nID, pNotify->pNMHDR,
                pNotify->pResult);
        }
        break;
    case AfxSig_bwNMHDRpl:
        {
            AFX_NOTIFY* pNotify = (AFX_NOTIFY*)pExtra;
            ASSERT(pNotify != NULL);
            ASSERT(pNotify->pResult != NULL);
            ASSERT(pNotify->pNMHDR != NULL);
            bResult = (pTarget->*mmf.pfn_NOTIFY_EX)(nID, pNotify->pNMHDR,
                pNotify->pResult);
        }
        break;
    case AfxSig_cmdui:
        {
            // ON_UPDATE_COMMAND_UI or ON_UPDATE_COMMAND_UI_REFLECT case
            ASSERT(CN_UPDATE_COMMAND_UI == (UINT)-1);
            ASSERT(nCode == CN_UPDATE_COMMAND_UI || nCode == 0xFFFF);
            ASSERT(pExtra != NULL);
            CCmdUI* pCmdUI = (CCmdUI*)pExtra;
            ASSERT(!pCmdUI->m_bContinueRouting);    // idle - not set
            (pTarget->*mmf.pfn_UPDATE_COMMAND_UI)(pCmdUI);
            bResult = !pCmdUI->m_bContinueRouting;
            pCmdUI->m_bContinueRouting = FALSE;     // go back to idle
        }
        break;

    case AfxSig_cmduiw:
        {
            // ON_UPDATE_COMMAND_UI case
            ASSERT(nCode == CN_UPDATE_COMMAND_UI);
            ASSERT(pExtra != NULL);
            CCmdUI* pCmdUI = (CCmdUI*)pExtra;
            ASSERT(pCmdUI->m_nID == nID);           // sanity assert
            ASSERT(!pCmdUI->m_bContinueRouting);    // idle - not set
            (pTarget->*mmf.pfn_UPDATE_COMMAND_UI_RANGE)(pCmdUI, nID);
            bResult = !pCmdUI->m_bContinueRouting;
            pCmdUI->m_bContinueRouting = FALSE;     // go back to idle
        }
        break;

    // general extensibility hooks
    case AfxSig_vpv:
        (pTarget->*mmf.pfn_OTHER)(pExtra);
        break;
    case AfxSig_bpv:
        bResult = (pTarget->*mmf.pfn_OTHER_EX)(pExtra);
        break;

    default:    // illegal
        ASSERT(FALSE);
        return 0;
    }
    return bResult;
}