在对话框 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也不会被创建出来了啊。
各位高手,看看 是哪里有问题,谢谢。
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也不会被创建出来了啊。
各位高手,看看 是哪里有问题,谢谢。
"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.
createwindow的(HMENU)m_nResourceID, 给要创建的窗口指定了一个ID
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被选中了,应该怎么处理呢??