我创建了对话框程序,里面的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)函数。
但是就无法使用此回调函数,大家看下什么问题。

解决方案 »

  1.   

    无法使用  是什么意思
    是编译通不过,还是说调用了却好像什么都没发生一样?
    编译通不过的话,你代码帖出来看下.
    如是是没有执行结果,那你就要跟踪下你的程序了,看是哪里没有执行成功.还有要注意EnumWndProc的返回值.
      

  2.   

    [code=C/C++]
    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]
      

  3.   


    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);
    }