社区
ATL
帖子详情
如何在组件中使用自定义消息?
0313700000
2003-12-12 11:31:50
如何在组件中使用自定义消息?
...全文
45
10
打赏
收藏
微信扫一扫
点击复制链接
分享
下载分享明细
分享
举报
写回复
10 条
回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
0313700000
2003-12-12
我的问题描述如下
我在我的atl复合控件中添加了一个处理socket接受数据的线程,当解析了消息之后,我要去刷新ie上相应的编辑框,但我发现在线程中使用这样的代码
CComPtr<IOleContainer> spIE;
m_spClientSite->GetContainer(&spIE);
CComQIPtr<IHTMLDocument2,&IID_IHTMLDocument2> spDoc(spIE);
CComPtr<IHTMLElement> sp;
HRESULT hr;
if(!spDoc)
{
return S_FALSE;
}
取得spDoc始终失败,在线程外没有问题,就想到了自定义消息,如下添加
#define WM_MSG WM_USER+100
BEGIN_MSG_MAP(CSocketCtrl)
MESSAGE_HANDLER(WM_MSG, OnMyMessage)
END_MSG_MAP()
LRESULT OnMyMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
MessageBox("123","",1);
return 0;
}
这样编译通过,可是我不知道如何在线程中发送消息。使用sendmessage报错
另外:是不是再线程中无法得到IHTMLDocument2指针,如果可以,要如何写,很急,谢谢
打赏
举报
回复
赞
0313700000
2003-12-12
??/???/???
打赏
举报
回复
赞
0313700000
2003-12-12
使用sendmessage不可以,后来我试了postmessage就没了问题还是感谢您的帮助,谢谢
打赏
举报
回复
赞
0313700000
2003-12-12
CComPtr<IOleContainer> spIE;我定义为了组件类的一个变量,
在初始化代码中
HRESULT hr=m_spClientSite->GetContainer(&spIE);
if(FAILED(hr))
{
::MessageBox(NULL,"spIE faild","",1);
}
else
::MessageBox(NULL,"spIE succ","",1);
}
然后定义赋值函数
CComQIPtr<IHTMLDocument2,&IID_IHTMLDocument2> spDoc(spIE);
if(spDoc)
{
::MessageBox(NULL,"spDoc succ","",1);
CComPtr<IHTMLElement> sp;
HRESULT hr=GetHTMLElement(OLESTR("Log1"),&sp);
if(SUCCEEDED(hr))
{
::MessageBox(NULL,"get log1 element succ","",1);
}
else
{
::MessageBox(NULL,"get log1 element faild","",1);
return ;
}
CComVariant a("111");
hr=sp->put_innerText(a.bstrVal);
if(SUCCEEDED(hr))
{
::MessageBox(NULL,"put_innerText succ","",1);
}
else
{
::MessageBox(NULL,"put_innerText faild","",1);
}
reutrn;
}
else
{::MessageBox(NULL,"spDoc faild","",1);}
然后在线程中调用该函数,直到hr=sp->put_innerText(a.bstrVal);所有的操作都成功,但是到了这里就失败了,真是想不到方法了
打赏
举报
回复
赞
0313700000
2003-12-12
但是问题就在于,我使用了SendMessage发送消息,可是主线程的消息接受函数并没有被触发
SendMessage需要一个窗口句柄,可是我怎么得到呢?如果可以,我到愿意把我的代码发给您让您给看下
打赏
举报
回复
赞
蒋晟
2003-12-12
你需要用CoInitializeEx初始化COM才可以跨线程使用COM对象。另外,在线程中可以用SendMessage发送消息到主线程执行代码。
打赏
举报
回复
赞
0313700000
2003-12-12
m_spClientSite->GetContainer(&spIE);我实在线程中取得IE指针出错的
打赏
举报
回复
赞
0313700000
2003-12-12
to Developerljm(飞车) (
您说的参数太多是什么含义?
打赏
举报
回复
赞
0313700000
2003-12-12
::SendMessage(pCtrl->m_hWnd,WM_MSG,0,0);
我再线程中使用上面代码。执行时候没有问题,可并没有触发我的消息,
打赏
举报
回复
赞
Developerljm
2003-12-12
参数太多了,BOOL& bHandled
打赏
举报
回复
赞
相关推荐
解决vue
自定义
全局
消息
框
组件
问题
主要介绍了vue
自定义
全局
消息
框
组件
问题及解决方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
vue
在
自定义
组件
中
使用
v-model
要想解释清楚v-model
在
自定义
组件
中
的用法,我得先来看看普通的
组件
传值… 一、普通的
组件
传值 如下代码: 这是一个简单的父子,子父传值示例 父
组件
: <!-- parent --> <template> <div class=...
Uni-App -
自定义
组件
-
自定义
组件
创建及
使用
创建
自定义
组件
1、新建
组件
.vue 文件 2、
组件
文档结构 <template name="
组件
名称"> <view> ...... </view> </template> <script...
vue2
自定义
动态
组件
所遇到的问题
主要介绍了vue2
自定义
动态
组件
的实现方法,需要的朋友可以参考下
vue
中
组件
的
自定义
事件(详)
今天这篇文章,让你彻底学会
组件
自定义
事件…… 我们
在
vue
中
用的click、keyup……等事件,这些属于内置事件,也就是js自带的事件。 问题一:什么是
组件
自定义
事件呢
?
自定义
事件,顾名思义就是自己打造的事件,...
发帖
ATL
加入
微信扫一扫
点击复制链接
分享社区
下载分享明细
3231
社区成员
4.8w+
社区内容
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
申请成为版主
帖子事件
创建了帖子
2003-12-12 11:31
社区公告
暂无公告