1.如何区分父窗口和子窗口?是不是由一个窗口DoModal()出来的就是父子窗口?2.同一程序中两个不同窗口之间使用::SendMessage发送消息,如何确定目标窗口的窗口句柄?

解决方案 »

  1.   

    BOOL IsChild(          HWND hWndParent,
        HWND hWnd
    );能测试一个窗口是不是另一个的下级窗口
    同程序中可以通过一些方法共享这个窗口句柄
    比如两个类之间 做一个函数传递窗口句柄 或者友元 或者全局变量 等等
      

  2.   

    1. 根据你创建窗口时传的参数作父窗口virtual BOOL CWnd::Create(
       LPCTSTR lpszClassName,
       LPCTSTR lpszWindowName,
       DWORD dwStyle,
       const RECT& rect,
       CWnd* pParentWnd,
       UINT nID,
       CCreateContext* pContext = NULL
    );
    2.
    拿到目标窗口的指针(CWnd * pWndDest)后 pWndDest->GetSafeHwnd()
      

  3.   

    个人认为:
    A1:父窗口是由主程序直接产生的,而子窗口是在对父窗口进行某种操作后产生的窗口。
    A2:如果窗口有一个确定的标题,直接用FindWindow函数就可以得到窗口的句柄了。
      

  4.   

    在子窗口中
    CMainDlg* pParent = (CMainDlg*)GetParent();
    pParent->SendMessage(WM_YOURMSG,NULL, 0);
      

  5.   

    如果是DoModal()出来的窗口那就是子窗口,父窗口访问子窗口可这样做。如果是子窗口访问父窗口就要设置全局变量。
      

  6.   

    1、父窗口和子窗口是一起出现的,有子窗口就一定会有父窗口。DoModal出来的一定是子窗口。
    确定的方式是看你窗口创建的时候怎样设置你的父窗口的。2、要知道目标窗口的句柄有很多方式,各种get方法,或者直接设置等等都可以
      

  7.   

    CWnd*   pWnd=CWnd::FindWindow(NULL,_T("windowname")); // 窗口名称 
    HWND   hwnd = pWnd->GetSafeHwnd();
    ::SendMessage(hwnd,WM_EditChanged,NULL,NULL);//WM_EditChanged  定义的信息名
      

  8.   


    谢谢bao20080513shengbin朋友的回复,还想问一下,本进程中某一窗口句柄和其他进程中某窗口句柄FindWindow函数都能够查找么?
      

  9.   

    FindWindowEx 可能可以,你具体再看看,MSDN 看看。我不是很精通。