在对话框 OnInitDialog中加了这个
HWND hbtwnd=CreateWindow(_T("BUTTON"),_T(""),WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX,20+16,160,16,16,GetSafeHwnd(),NULL,NULL,this);
aaa=::GetDlgCtrlID(hbtwnd);
aaa为全局int(用于得到动态创建出来的checkbox的ID的)添加了ON_BN_CLICKED(aaa, OnBnClickedCheck2)、afx_msg void OnBnClickedCheck2()以及OnBnClickedCheck2()的定义,checkbox可以显示,在点下去的时候也可以打勾,可是为什么OnBnClickedCheck2()函数没有反映呢??
我看了看aaa的值是0,这说明GetDlgCtrlID失败CreateWindow(。。)应该没有问题吧??不然的话checkbox也不会被创建出来了啊。
各位高手,看看 是哪里有问题,谢谢。

解决方案 »

  1.   

    看看 aaa 的内容是啥动态创建的控件的 Resource ID 是需要在 CreateWindow 时给定的吧     m_hSelf = ::CreateWindow( 
                        "BUTTON",   // Predefined class 
                        "OK",       // Button text 
                        WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX, // Styles. 
                        210,         // x position.
                        10,         // y position
                        100,        // Button width
                        100,        // Button height
                        m_hParent,  // Parent window
                        (HMENU)m_nResourceID,   // control ID 
                        m_hInstance, 
                        NULL);      // Pointer not needed.
      

  2.   

    同意2楼
    createwindow的(HMENU)m_nResourceID, 给要创建的窗口指定了一个ID
      

  3.   

     感谢fox000002 问题 已经解决  不过就是看不懂 msdn上面对于hMenu我怎么看也没看出他说的是 动态创建的checkbox的ID啊。晕死还有,在我的问题里面我是这么想的啊  用CreateWindow返回的句柄(应该是标示刚创建的checkbox吧)来得到他的 ID啊  应该不会有错的吧??怎么得到的就是0呢。
      

  4.   

    你根本没有给控件指定id,当然得不到了。对于msdn不太理解时,就google该函数的使用实例
      

  5.   

    原来是这样那还有一个问题就是:现在我已经在listcontrol里面增加了 checkbox了 用的方法是
    DWORD dwStyle = m_listcontrol.GetStyle();
    dwStyle |= LVS_EX_CHECKBOXES;
    m_listcontrol.SetExtendedStyle(dwStyle);也增加了 对checkbox选择的函数
    void CMyDlg::OnLvnItemchangedList2(NMHDR *pNMHDR, LRESULT *pResult)
    {
    //LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
        
        *pResult = 0;
        
        if (pNMListView->uOldState == 0 && pNMListView->uNewState == 0)        
            return; // No change
        
        BOOL bPrevState = (BOOL)(((pNMListView->uOldState &         
            LVIS_STATEIMAGEMASK)>>12)-1);   // Old check box state
        
        if (bPrevState < 0) // On startup there's no previous state         
            bPrevState = 0; // so assign as false (unchecked)   
        
        // New check box state    
        BOOL bChecked=(BOOL)(((pNMListView->uNewState & LVIS_STATEIMAGEMASK)>>12)-1);   
        
        if (bChecked < 0) // On non-checkbox notifications assume false        
            bChecked = 0; 
        
        if (bPrevState == bChecked) // No change in check box        
            return;
        //……bChecked即是现在的选中状态,处理之,示例代码如下:
        if(bChecked)
        {
           AfxMessageBox("is Checked");
        }
         *pResult = 0;
    }但是这个只能判断checkbox是否被选择,而不能知道具体是哪个checkbox被选中了的。请问想知道具体哪个checkbox被选中了,应该怎么处理呢??