一个项目里有两个对话框
我在A对话框里用:CControlTestDlg *pControlTest = (CControlTestDlg*)GetDlgItem(IDD_CONTROLTEST_DIALOG);
想得到B对话框的句柄,可设断点发现pControlTest 为空...........
为什么不对啊?
还有别的方法么?

解决方案 »

  1.   

    首先你要知道GetDlgItem的意思,他的意思是得到一个对话框上控件的hwnd,知道意思了。
    如果你是基于对话框的程序你可以在A中包含一个b的对象,然后用create创建后使用。
    如果上view的,可以在view中包含a,b等,用view来访问b
      

  2.   

    方法1:用FindWindow(或EnumWindows()得到对话框的句柄
    方法2:假设对话框B的指针为pWnd. 则按钮C的指针可以这样得到(IDC_BUTTONC为按钮C的ID号.) pCtrl=pWnd->GetDlgItem(IDC_BUTTONC); 窗口句柄为 hCtrlWnd=pCtrl->GetSafeHWnd();   
      

  3.   

    IDD_CONTROLTEST_DIALOG 当这个为A的子窗体的时候 才可以用你的方法来获得.
      

  4.   

    我LZ
    有两个对话框:CADlg 和 CBDlg
    ID分别为:IDD_A 和 IDD_B
    我就是想在A对话框里让B对话框隐藏
      

  5.   

    你想让A控制B,就先要建立他们之间的关系;GetDlgItem用于获取子窗口,所以除非B是A的子窗口,就不能用这个函数;如果两个对话框没有直接关系,就需用通过父窗口来查找子窗口。
      

  6.   

    难道一点关系都没的两个对话框,但在一个项目里,是不能互相取得彼此的句柄么?
    ======================================
    不是不能,而不能用GetDlgItem不行,这个是父窗口用来获取它的子窗口的,如果A、B没有关系的话,要么传递指针,要么用FindWindow来获取句柄
      

  7.   

    一直在用FindWindows,楼主说的只能对应于父子窗口(MDI)