在Property Sheet中的两个对话框之间怎样实现通信呢?
例如:在一个对话框的成员函数中通过GetWindow( GW_HWNDNEXT )
得到了另一个对话框的指针,想通过这个指针实现对另一个对话框的
控件进行操作,可是为什么通过GetDlgItem不能取得另一个对话框的句柄?
CTargetParameterPage* p_temp1 = ( CTargetParameterPage* )( this->GetWindow(
GW_HWNDNEXT ) );
CWnd* p_temp2 = ( p_temp1->GetDlgItem( IDC_EDIT_TARGETORIENTATION ) );
p_temp2->EnableWindow( FALSE );
不知道什么原因,应该怎么做?
我想在一个对话框中动态禁用另一个对话框的控件!
多谢了!

解决方案 »

  1.   

    也许你通过GETDLGITEM得到的指针是个空的
    1。先得到每一页的句柄:m_hWnd
    2。GetDlgItem(属性页句柄,控件id号),返回该id号控件的句柄。
    3。用fromhandle()转化该句柄成为CWND *
    4。再转化CWND *为你所需要控件类型指针。
    然后你就可以自便了。以下m_page1是窗口句柄。
             CWnd *pWnd;
    HWND myhandle;
    myhandle = ::GetDlgItem(m_page1,IDC_CHECK1);
    pWnd = FromHandle(myhandle);
    CButton * pBtn;
    pBtn = static_cast<CButton *>(pWnd) ;
      

  2.   

    怎么取得属性页的句柄呢?
    已经通过GetWindow()取得属性页的指针。
    GetDlgItem()返回的好象还是NULL.
      

  3.   

    在你需要调用其他窗口(B)函数的窗口(A)中定义以下句柄
    HWND MYHANDLE
    在B中声明A类的对象 B bobject
    bobject.myhandle = m_hWnd;
    myhandle就是B窗口的句柄了
    再用::GetDlgItem(handle,id)这个函数,你去查查msdn,返回值是句柄
      

  4.   

    首先谢谢两位大侠的帮助!
    CWnd* pWnd1 = ( CWnd* )( this->GetWindow( GW_HWNDNEXT ) ); 
    HWND myHandle1 = p_Wnd1->m_hWnd;
    HWND myHandle2 = ( ::GetDlgItem( myHandle1, IDC_EDIT_TARGETORIENTATION ) );
    CWnd* pWnd2 = FromHandle( myHandle2 );
    pWnd2->EnableWindow( FALSE );
    以上代码在其中一个属性页的成员函数中,通过GetWindow( GW_HWNDNEXT )取得另一个
    属性页的指针pWnd1,再得到相应的句柄myHandle1(不知道取得句柄的方法对不对),
    但是调用::GetDlgItem()时总是返回NULL,不知道怎么回事!
    这个问题已经困扰我好长时间了!
      

  5.   

    好象还是不行啊!
    我想实现的功能很简单:在一个Property Page中动态的控制另一个Property Page中CEdit控件的Disable或Enable,比如点击某一按钮,另一Property Page中的CEdit控件被禁用,可是
    GetDlgItem()返回的总是NULL,苦恼啊!
      

  6.   

    晕,你把HWND设置为全局变量再试试?
      

  7.   

    Davidstrong(隔壁小猫怀孕了)
    你能说的再具体点儿吗?谢谢了!