社区
ATL
帖子详情
如何在组件中使用自定义消息?
0313700000
2003-12-12 11:31:50
如何在组件中使用自定义消息?
...全文
78
10
打赏
收藏
如何在组件中使用自定义消息?
如何在组件中使用自定义消息?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
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
Android高手进阶之
自定义
View,
自定义
属性(带进度的圆形进度条)源码
在Android开发
中
,
自定义
View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的UI
组件
。本篇文章将深入探讨如何实现一个
自定义
的、带有进度指示的圆形进度条,以此来提升用户界面的交互体验。我们...
Android
自定义
View (四) 视频音量调控
在Android开发
中
,
自定义
View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的用户界面。本教程将深入探讨如何实现一个
自定义
的音量调控View,以提供更直观、更个性化的音量控制体验。我们参考的...
ActionBar
自定义
布局源码工程
- `MainActivity.java`:展示了如何在Activity
中
使用
自定义
布局的代码。 - `AndroidManifest.xml`:可能指定了Activity的主题。 通过研究这个源码工程,开发者可以深入理解
自定义
ActionBar的工作原理,并将其应用到...
Android图片滚动,加入自动播放功能,
使用
自定义
属性实现,霸气十足demo
在Android资源文件(res/values/attrs.xml)
中
定义属性,然后在
自定义
控件
中
解析这些属性,以在运行时
使用
。例如,对于`SlidingViewSwitcher`,可能需要定义以下属性: 1. `slideDuration`:滑动动画的持续时间,...
自定义
UIAlertView
在iOS开发
中
,UIAlertView曾是系统提供的一种用于展示警告或提示信息的标准
组件
,但在iOS 8之后被UIAlertController所取代。然而,在某些场景下,开发者可能仍需要
自定义
UIAlertView来实现特定的界面风格或者功能...
ATL
3,248
社区成员
48,529
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章