VC语言

本类阅读TOP10

·VC++ 学习笔记(二)
·用Visual C++打造IE浏览器(1)
·每个开发人员现在应该下载的十种必备工具
·教你用VC6做QQ对对碰外挂程序
·Netmsg 局域网聊天程序
·Windows消息大全
·VC++下使用ADO编写数据库程序
·VC++学习笔记(四)
·非法探取密码的原理及其防范
·怎样在VC++中访问、修改注册表

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
ATL问题集-#22 ~ #23

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

/*此文是我将网上的一些文章,自已遇到的问题进行整理,有些是翻译,所有只供学习讨论,如有版权还属于原作者——作者:黄森堂*/

#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方法中使用AmbientUserMode()会总是返回TRUE,因为控件还未设置ambient IDispatch连接点到容器,下面演示在OnSetClientSite()中取得其值:

void CYourCtrl::OnSetClientSite()
{
  if ( m_ambientDispDriver.m_lpDispatch && AmbientUserMode() )
    RecreateControlWindow();//商业代码
}

m_ambientDispDriver变量是用于维护COleControl的ambient的自动化接口,只有它m_lpDispatch有效时才会返回这个属性值。




相关文章

相关软件