我在WM_INITDIALOG设置ComboBox默认选择第一个也就是0,
然后程序运行起来以后,比如我更改了ComboBox的选中内容。我要弹出一个对话框。
在VC里面是用哪个API来响应的?

解决方案 »

  1.   

    相应CBN_ Selchange消息即可在消息相应函数中MessageBox
      

  2.   

    这个要什么实例啊,正常情况下,你双击ComboBox的话,就会进入到CBN_ Selchange处理函数中去。代码如下:
    void CcdcDlg::OnCbnSelchangeCombo1()
    {
    MessageBox(_T(""));
    }
      

  3.   

    可是我是SDK的啊。不是MFC
    =======
    如果是SDK的话,就复杂一点,对于控件对父窗口的通知,都是发送WM_COMMAND消息的,所以你在父窗口中处理WM_COMMAND消息,对于CBN_SELCHANGE 通知来说,wParam参数的高位是通知码:CBN_SELCHANGE。
    下面是MSDN:
    The CBN_SELCHANGE notification message is sent when the user changes the current selection in the list box of a combo box. The user can change the selection by clicking in the list box or by using the arrow keys. The parent window of the combo box receives this notification in the form of a WM_COMMAND message with CBN_SELCHANGE in the high-order word of the wParam parameter. 
      

  4.   

    case WM_COMMAND:
    {
     switch(HIWORD(wParam))
     {
       case CBN_SELCHANGE:
       {
           // ...
       }
       break;
       default:
       break;
     }
    }
    break;
      

  5.   

    VisualEleven你这个我试了不行哦。。当我更改ComboBox的选中项的时候
    case CBN_SELCHANGE:
       {
           // ...
       }
    里面的事件不会激活
    是不是缺少了什么?
      

  6.   


    case WM_COMMAND:
    {
     switch(HIWORD(wParam))
     {
       case CBN_SELENDOK:
    这样行不行?
      

  7.   

    你所说的响应更改到底指的是什么啊,对comboBox控件来说,在编辑框中输入和在下拉列表中选择触发的是两个通知消息,一个CBN_EDITCHANGE,一个是CBN_SELCHANGE
      

  8.   

    真的不行..
    我代码贴出来吧。好找到原因自己消化一下。 case WM_INITDIALOG:
    {
    SetDlgIcon(hInst,hDlg,IDI_SQL);//自己写的一个设置图标的
    HWND hList = GetDlgItem(hDlg,IDC_Drives);
    int len = GetLogicalDriveStrings(0,NULL);
    TCHAR* ds = new TCHAR[len];
    GetLogicalDriveStrings(len,ds);
    while(*ds!=NULL)
    {
    ComboBox_AddString(hList,ds);
    ds+=_tcslen(ds)+1;
    }
    ComboBox_SetCurSel(hList,0);
    TCHAR str[256];
    ComboBox_GetText(hList,str,sizeof(str));
    SetDlgItemText(hDlg,IDC_CurrentDrive,str);
    break;
    }
    case WM_COMMAND:
    switch(LOWORD(wParam))
    {
    case IDCANCEL:
    {
    EndDialog(hDlg, LOWORD(wParam));
    break;
    }
    case CBN_EDITCHANGE:
    {
    MessageBox(hDlg,TEXT("A"),TEXT("A"),MB_OK);
    break;
    }
    break;
    }
      

  9.   

    你有没有看上面说的啊,通知消息是在wParam的高位中,你写的是:switch(LOWORD(wParam))
      

  10.   

    对于WM_COMMAND消息来说,wParam的高位是通码,低位是控件ID.
      

  11.   

    晕,说了半天是SDK,你咋不一开始就说清楚呢?痛苦
      

  12.   

    wltg2001谢谢你了我现在还不知道什么是高位低位。看来我要多学习学习回来下午回来结贴。。谢谢兔子门哈哈
      

  13.   

    对了、要是我有很多comboBox那么他怎么区分是哪个?
      

  14.   

    对了、要是我有很多comboBox那么他怎么区分是哪个?
    =========
    wParam低位是ID,利用ID可以区分不同的控件
      

  15.   

    LOWORD(wParam)低位的是取动作的、LOWORD(wParam)高位的是取ID的吧。。我这样理解的
      

  16.   

    LOWORD(wParam)低位的是取动作的、LOWORD(wParam)高位的是取ID的吧。。我这样理解的
    ====================================
    HIWORD(wParam)是取wParam这个32位数的高16位,对于WM_COMMAND的消息来说,wParam参数的高位表示通知码,LOWORD(wParam)是取32位中低16位,对于WM_COMMAND来说,低16位表示发送消息的控件ID。
      

  17.   

    建议你去读《windows程序设计》对于SDK来说,绝对能解答你所有的问题