我需要一个在SDK里的BN_CLICKED . BN_DISABLE . BN_HILTIE 这些通知码的使用我这里有个不成功的代码段:

switch( LOWORD(wParam) )
{
case IDC_BUTTON_TEST:
switch(HIWORD(wParam))
{
case BN_CLICKED:
MessageBox(hDlg,L"BN_CLICKED",NULL,MB_OK);
SendDlgItemMessage(hDlg,IDC_BUTTON_TEST,BN_DISABLE,1,0);
break;
case BN_DISABLE:
MessageBox(hDlg,L"BN_DISABLE",NULL,MB_OK);
break;
case BN_DOUBLECLICKED:
MessageBox(hDlg,L"BN_DOUBLECLICKED",NULL,MB_OK);
break;
case BN_SETFOCUS:
MessageBox(hDlg,L"BN_SETFOCUS",NULL,MB_OK);
break;
case BN_KILLFOCUS:
MessageBox(hDlg,L"BN_KILLFOCUS",NULL,MB_OK);
break;
} //SendDlgItemMessage(hDlg,IDC_BUTTON_TEST,BN_DISABLE,wParam<<8,0); //MessageBox(hDlg,L"BN_CLICKED",NULL,MB_OK);
break;
}

解决方案 »

  1.   

    用法错误。
    你响应的消息应该是WM_COMMAND吧?
    switch语句里面应该使用高位表示通知码 switch (HIWORD(wParam))
      

  2.   

    似乎应该响应的消息是WM_NOTIFY,呵呵,好久不用SDK了,不知是不是这样的结构:switch(MSGID) 
    {
    case WM_NOTIFY:
    再嵌套你的
    switch(   LOWORD(wParam)   ) 

    case   IDC_BUTTON_TEST: 
    switch(HIWORD(wParam)) 

    case   BN_CLICKED: 
    MessageBox(hDlg,L"BN_CLICKED",NULL,MB_OK); 
    SendDlgItemMessage(hDlg,IDC_BUTTON_TEST,BN_DISABLE,1,0); 
    break; 
    case   BN_DISABLE: 
    MessageBox(hDlg,L"BN_DISABLE",NULL,MB_OK); 
    break; 
    case   BN_DOUBLECLICKED: 
    MessageBox(hDlg,L"BN_DOUBLECLICKED",NULL,MB_OK); 
    break; 
    case   BN_SETFOCUS: 
    MessageBox(hDlg,L"BN_SETFOCUS",NULL,MB_OK); 
    break; 
    case   BN_KILLFOCUS: 
    MessageBox(hDlg,L"BN_KILLFOCUS",NULL,MB_OK); 
    break; 

    }
    另外,似乎还要给你的IDC_BUTTON_TEST控件增加Notify属性(这样他的状态变化就会通知主窗口)