请前辈帮小弟找找毛病 谢谢class CMy1Dlg : public CDialog
{
public:
    CEdit m_Edit;
    DWORD m_ProcessID;
};BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
    CMy1Dlg* dlg = (CMy1Dlg*)lParam;
    DWORD pid = 0;
    GetWindowThreadProcessId(hwnd, &pid);
    if (dlg->m_ProcessID != pid)
        return TRUE;
    CString text;
    text.Format("%08X\r\n", hwnd);
    dlg->m_Edit.SetDlgItemText(IDC_EDIT1, text);    return FALSE;
}void CShiyan2Dlg::OnButton1() 
{
 EnumWindows(EnumWindowsProc, (LPARAM)this);
}

解决方案 »

  1.   

    你m_ProcessID赋值了没?m_ProcessID=GetCurrentProcessId();  //假设为当前窗口进程ID,看看有没有显示
      

  2.   

    这里也有错
    dlg->m_Edit.SetDlgItemText(IDC_EDIT1, text); 要么
    dlg->SetDlgItemText(IDC_EDIT1,text); 
    要么
    dlg->m_Edit.SetWindowText(text); 
      

  3.   

     dlg->m_Edit.SetWindowText(text); 
      

  4.   

     EnumWindows(EnumWindowsProc, (LPARAM)this); 传进去的是CShiyan2Dlg
    BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) 中转换类型不一致:
    CMy1Dlg* dlg = (CMy1Dlg*)lParam; 
      

  5.   

    汗,LS说的没错,你是在2个类中的,CMy1Dlg和CShiyan2Dlg是什么关系?EnumWindows第二个参数应该是CMy1Dlg的指针,你这里this是CShiyan2Dlg类的指针
      

  6.   

    void CShiyan2Dlg::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CCheckEmailDlg)
    // NOTE: the ClassWizard will add DDX and DDV calls here
    DDX_Text(pDX, IDC_EDIT1, m_Edit);               // add this line in this function
    //}}AFX_DATA_MAP
    }
      

  7.   

    DDX_Control(pDX, IDC_EDIT1, m_Edit);               // add this line in DoDataExchange function 
    m_Edit.SetWindowText(_T("test"));
      

  8.   

    你的上个帖子中给出的是CMy1Dlg::OnButton1,所以我回复的是在CMy1Dlg类中增加两个变量。如果要在CShiyan2Dlg类里面使用,当然就要把变量定义在CShiyan2Dlg类里面了。另外注意:CEdit m_Edit需要是控件的关联变量,可以用VC添加。