我创建了对话框程序,里面的CListControl是用来枚举桌面窗口的我添加了一个按钮事件
void CTestDialog4Dlg::OnOK()
{
// TODO: Add extra validation here
CListCtrl* pList=(CListCtrl*)GetDlgItem(IDC_LIST);
pList->DeleteAllItems();
pList->SetRedraw(FALSE);
//枚举窗口
::EnumWindows(EnumWndProc,(LPARAM)pList); //想调用枚举窗口函数的
pList->SetRedraw();
}我在TestDialog4Dlg的头文件声明回调函数BOOL CALLBACK EnumWndProc(HWND hwnd,LPARAM lParam);,这没有问题吧?然后我在TestDialog4Dlg的.cpp文件里面实现了上面的BOOL CALLBACK EnumWndProc(HWND hwnd,LPARAM lParam)函数。
但是就无法使用此回调函数,大家看下什么问题。
void CTestDialog4Dlg::OnOK()
{
// TODO: Add extra validation here
CListCtrl* pList=(CListCtrl*)GetDlgItem(IDC_LIST);
pList->DeleteAllItems();
pList->SetRedraw(FALSE);
//枚举窗口
::EnumWindows(EnumWndProc,(LPARAM)pList); //想调用枚举窗口函数的
pList->SetRedraw();
}我在TestDialog4Dlg的头文件声明回调函数BOOL CALLBACK EnumWndProc(HWND hwnd,LPARAM lParam);,这没有问题吧?然后我在TestDialog4Dlg的.cpp文件里面实现了上面的BOOL CALLBACK EnumWndProc(HWND hwnd,LPARAM lParam)函数。
但是就无法使用此回调函数,大家看下什么问题。
是编译通不过,还是说调用了却好像什么都没发生一样?
编译通不过的话,你代码帖出来看下.
如是是没有执行结果,那你就要跟踪下你的程序了,看是哪里没有执行成功.还有要注意EnumWndProc的返回值.
BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
HWND hList = (HWND)lParam;
TCHAR szName[MAX_PATH] = {0};
GetWindowText(hWnd, szName, MAX_PATH);
if(_tcslen(szName))
{
static int nCount = 0;
LVITEM item = {0};
item.mask = LVIF_TEXT;
item.cchTextMax = MAX_PATH;
item.pszText = szName;
item.iItem = nCount++;
ListView_InsertItem(hList, &item);
}
return TRUE;
}void CXXXDlg::OnOK()
{
// TODO: Add extra validation here
m_list.DeleteAllItems();
m_list.SetRedraw(FALSE);
EnumWindows(EnumWindowsProc, (LPARAM)m_list.GetSafeHwnd());
m_list.SetRedraw(TRUE);
}
/code]
BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
HWND hList = (HWND)lParam;
TCHAR szName[MAX_PATH] = {0};
GetWindowText(hWnd, szName, MAX_PATH);
if(_tcslen(szName))
{
static int nCount = 0;
LVITEM item = {0};
item.mask = LVIF_TEXT;
item.cchTextMax = MAX_PATH;
item.pszText = szName;
item.iItem = nCount++;
ListView_InsertItem(hList, &item);
}
return TRUE;
}void CXXDlg::OnOK()
{
// TODO: Add extra validation here
m_list.DeleteAllItems();
m_list.SetRedraw(FALSE);
EnumWindows(EnumWindowsProc, (LPARAM)m_list.GetSafeHwnd());
m_list.SetRedraw(TRUE);
}