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

Erlin 2001-06-28 09:59:06
...全文
254 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Erlin 2001-07-05
  • 打赏
  • 举报
回复
这个问题为什么没人回答
Python 2001-07-02
  • 打赏
  • 举报
回复
非WindowLess窗口,默认的白色背景不透明,怎么改呢?
Erlin 2001-07-02
  • 打赏
  • 举报
回复
不对,看msdn上说,为了减少系统资源消耗,对于那些简单的ActiveX的确是无窗口的,它由两个接口IOleInPlaceObjectWindowlessImpl(控件端)和IOleInPlaceSiteWindowless(容器端)共同模拟一个窗口的操作,甚至加速键消息。

Windowless控件不能调GUI函数InvalidateRect以及DefWindowProc,因为它不是一个真正的窗口。

这样说来通过GetDlgItem得到的那个HWND是什么?难道也是控件或容器模拟出来的吗?


vcmfc 2001-07-01
  • 打赏
  • 举报
回复
我想你可能有点乱,这不是什么窗口化,而是如果是WindowLess的话,窗口背景透明,而非WindowLess的话,就是我们常说的窗口,默认是白色背景且不透明,这就是它们的区别。
Erlin 2001-06-29
  • 打赏
  • 举报
回复
在VC++中,当我将控件放到对话框中,控件区域成为白色,我在OnDraw里面并没有调用FillRect等函数,那么这块区域是由谁填充的呢?
Erlin 2001-06-29
  • 打赏
  • 举报
回复
我仔细看了一下,我写的这个控件的确是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消息呢?是容器窗口传递给它的吗?

请各位大虾给小弟解释一二,一定加分。
Erlin 2001-06-28
  • 打赏
  • 举报
回复
目录我能过ATL生成的ActiveX控件都是从IOleInPlaceObjectWindowlessImpl派生出来的,难道说所有的ActiveX控制都不是子窗口吗?只是占用了父窗口一块区域而已。

vcmfc 2001-06-28
  • 打赏
  • 举报
回复
#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因为这个东西不是你的。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧