CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  ATL/ActiveX/COM

如何得到ActiveX控件的窗口句柄

楼主Erlin(很多年以后,我有了个绰号,叫白痴)2001-06-28 09:59:06 在 VC/MFC / ATL/ActiveX/COM 提问

问题点数:10、回复次数:8Top

1 楼vcmfc(【痛苦的虫虫】)回复于 2001-06-28 16:09:36 得分 0

#27   如何在ATL中取得windowsless窗口的HWND?  
  答:windowsless   就是没有窗口。你的ATL控件没有窗口,   m_hWnd不是NULL能是什么。   至于Ondraw得到的   hdc   实际是父窗口的hdc。huhu   你注意看   M$   的form   系列控件(就是IE页面中的那些textbox   checkbox   ....),   都是windwosless的。  
  if   (m_bWndLess)    
  {    
  HDC   hDC;    
  HWND   hWnd;    
  //   Get   the   HDC   from   the   client    
  m_spInPlaceSite->GetDC(NULL,   OLEDC_NODRAW,   &hDC);    
  //   Get   the   HWND   from   the   HDC    
  hWnd   =   WindowFromDC(hDC);    
  m_spInPlaceSite->ReleaseDC(hDC);    
  }    
  注意:不要乱动那个hWnd因为这个东西不是你的。   Top

2 楼Erlin(很多年以后,我有了个绰号,叫白痴)回复于 2001-06-28 16:36:00 得分 0

目录我能过ATL生成的ActiveX控件都是从IOleInPlaceObjectWindowlessImpl派生出来的,难道说所有的ActiveX控制都不是子窗口吗?只是占用了父窗口一块区域而已。  
   
  Top

3 楼Erlin(很多年以后,我有了个绰号,叫白痴)回复于 2001-06-29 11:19:53 得分 0

在VC++中,当我将控件放到对话框中,控件区域成为白色,我在OnDraw里面并没有调用FillRect等函数,那么这块区域是由谁填充的呢?Top

4 楼Erlin(很多年以后,我有了个绰号,叫白痴)回复于 2001-06-29 15:21:51 得分 0

我仔细看了一下,我写的这个控件的确是WindowLess的,其实很简单,基类CComControl的有两个成员变量,m_hWndCD控件的窗口句柄,m_bWndLess是否是无窗口的.  
  除此以外,CComControl还有一个很奇怪的成员变量m_bWindowOnly.且看MSDN的解释  
  m_bWindowOnly:Flag   indicating   the   control   should   be   windowed   even   if   the   container   supports   windowless   controls  
  难道说控件窗口化或不窗口化跟容器有关吗?  
   
  非窗口组件为什么可以得到标准window消息呢?是容器窗口传递给它的吗?  
   
  请各位大虾给小弟解释一二,一定加分。Top

5 楼vcmfc(【痛苦的虫虫】)回复于 2001-07-01 14:36:05 得分 0

我想你可能有点乱,这不是什么窗口化,而是如果是WindowLess的话,窗口背景透明,而非WindowLess的话,就是我们常说的窗口,默认是白色背景且不透明,这就是它们的区别。Top

6 楼Erlin(很多年以后,我有了个绰号,叫白痴)回复于 2001-07-02 12:14:00 得分 0

不对,看msdn上说,为了减少系统资源消耗,对于那些简单的ActiveX的确是无窗口的,它由两个接口IOleInPlaceObjectWindowlessImpl(控件端)和IOleInPlaceSiteWindowless(容器端)共同模拟一个窗口的操作,甚至加速键消息。  
   
  Windowless控件不能调GUI函数InvalidateRect以及DefWindowProc,因为它不是一个真正的窗口。  
   
  这样说来通过GetDlgItem得到的那个HWND是什么?难道也是控件或容器模拟出来的吗?  
   
   
  Top

7 楼Python(ToolBox)回复于 2001-07-02 12:32:52 得分 10

非WindowLess窗口,默认的白色背景不透明,怎么改呢?  
  Top

8 楼Erlin(很多年以后,我有了个绰号,叫白痴)回复于 2001-07-05 14:09:14 得分 0

这个问题为什么没人回答Top

相关问题

  • VB做ActiveX控件,如果直接得到父窗体(容器)的句柄!
  • 找不到ActiveX控件句柄?
  • 如何得到控件的句柄
  • 如何得到控件的句柄?
  • SDK下,已知控件ID怎么得到控件句柄?
  • 如何取得ActiveX控件的窗口句柄和他的父窗口句柄?
  • 知一控件句柄,怎么得到它所属窗体的句柄??
  • 请问:用ATL写ActiveX控制,在实现控件类中如何得到控件自身句柄,这样的ActiveX是一个窗口吗
  • 如何取得MFC ActiveX控件的窗口句柄?
  • 如何获得ActiveX控件的窗口句柄?

关键词

  • 控件
  • activex
  • atl
  • 区域
  • windowless
  • hdc
  • 容器
  • hwnd
  • 得到
  • 透明

得分解答快速导航

  • 帖主:Erlin
  • Python

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo