请问:从窗口A向窗口B发送消息时,如何在A中获取B的句柄呢?

解决方案 »

  1.   

    A和B是什么关系?
    如果在同一个进程里,可以通过app类来中转
    如果不在同一个进程里,FindWindow、EnumWindows
      

  2.   

    A是动态创建的Check控件,它的父类是CButton;B是Dialog窗口,它的父类是CDialog;
    B在窗口A上面放;
    我用 HWND hwnd = ::FindWindow(_T("B"), NULL);获取句柄时,得到的hwnd为空了,不知道是什么原因?
      

  3.   

    B放在A上面是什么意思?
    在A窗口创建子窗口B吗?
    如果这样直接可以取得B.m_hWnd.
      

  4.   

    我现在是得不到B的句柄啊
    在A中用
    HWND hwnd = ::FindWindow(_T("B"), NULL);获取B句柄时,得到的hwnd为空了
      

  5.   

    你的findwindow用错了吧?
    HWND FindWindow(
      LPCTSTR lpClassName,  // class name
      LPCTSTR lpWindowName  // window name
    );
    应该是HWND hwnd = ::FindWindow(NULL,_T("B");
      

  6.   

    FindWindow(_T("B"), NULL);
    ===================
    用错了,前一个参数是类名,后一个才是窗口标题,你的程序中B和A是在同一个程序中的,完全可以保存B的句柄然后拿来给A用.
      

  7.   

    在A类中定义B的实例,用实例.Create创建控件,用实例.SendMessage发消息;
    或者在A类中定义B的指针变量,在构造A的时候用new构造B,在A析构的时候delete指针,用指针->Create创建控件,用指针->SendMessage发消息。
      

  8.   

    你调用全局的::FindWindow是用来查找顶层桌面窗口的。既然B是A的子控件,直接在B中GetParent()->SendMessage()就可以了。
    另外,FindWindow里面的类名也不是C++的class类名,而是注册的窗口类。
      

  9.   

    直接在B中GetParent()->SendMessage()就可以了