荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Second (石开), 信区: Program
标  题: ATL问题集-#22 ~ #23
发信站: 荔园晨风BBS站 (Fri Jun  1 08:04:26 2001), 转信


#22 如何取得控件的HWND?
     HWND CMyOcx::GetApplicationWindow()
      {
         HWND  hwnd = NULL;
         HRESULT hr;
         //*****这段代码在VC++ v4.1工作
         if (m_pInPlaceSite != NULL)
             {
             m_pInPlaceSite->GetWindow(&hwnd);
             return hwnd;
             }
         //****** 这段代码在Visual Basic工作
         LPOLECLIENTSITE pOleClientSite = GetClientSite();
         if ( pOleClientSite )
          {
             IOleWindow* pOleWindow;
             hr = pOleClientSite->QueryInterface( IID_IOleWindow, (LPVOID*)
                    &pOleWindow );
             if ( pOleWindow )
              {
                 pOleWindow->GetWindow( &hwnd );
                 pOleWindow->Release();
                 return hwnd;
              }
          }
         return NULL;
     }

#23 为什么AmbientUserMode总是返回TRUE?

答:如果你在控件类的构造函数,析构函数,OnSetClientSite方法中使用AmbientUser
Mode()会总是返回TRUE,因为控件还未设置ambient IDispatch连接点到容器,下面演示
在OnSetClientSite()中取得其值:
void CYourCtrl::OnSetClientSite()
{
  if ( m_ambientDispDriver.m_lpDispatch && AmbientUserMode() )
    RecreateControlWindow();//商业代码
}
m_ambientDispDriver变量是用于维护COleControl的ambient的自动化接口,只有它m_l
pDispatch有效时才会返回这个属性值。
                           既然热爱生命
                            那么,
                            一切都在意料之中。

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.28.190]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店