class CSyCtrl : public COleControl在CSyCtrl的函数里面取这个控件的窗口句柄。我用下面的语句也无法取得句柄不知道怎么回事
HWND hWnd = GetSafeHwnd();

解决方案 »

  1.   

    QueryInterface to retrieve IOleWindow pointer, if you succeeded, call IOleWindow::GetWindow
      

  2.   

    //如果是取容器接口指针
    LPOLECONTAINER lpContainer;
    HRESULT hr = m_pClientSite->GetContainer(&lpContainer);//如果是取窗口句柄
    HWND m_hWndParent;
    IOleInPlaceSite *pOleInPlaceSite = NULL;
    if (NOERROR==m_pClientSite->QueryInterface(IID_IOleInPlaceSite, (LPVOID *)&pOleInPlaceSite))
    {
    pOleInPlaceSite->GetWindow((HWND *)&m_hWndParent);
    pOleInPlaceSite->Release();
    }
      

  3.   

    不行啊,出错显示如下:
    error C2227: left of '->QueryInterface' must point to class/struct/union
      

  4.   

    补充说明一下问题的具体情况:
    我写了一个控件,有两个类,一个是默认的Ctrl类,一个是自定义类。现在自定义类需要找到控件窗口,并向控件窗口发送一个消息,但是现在在自定义类中方法里不知道怎么才能找到控件窗口?
    我用了上面的办法也不行。郁闷!
      

  5.   

    自定义类中创建Public函数接收窗口句柄,如SetHwnd(Hwnd h)
    Ctrl类中调用自定义类中的SetHwnd函数
      

  6.   

    masterz(www.fruitfruit.com) 
    没见过该人用中文颇觉神秘