当前位置: 首页 > news >正文

2012wtl,学习活扩

原文

WTL学习注意–活扩

Win32下,活扩控件已是个成熟的概念了,即使对COM不太了解,使用活扩控件仍是件容易的事情.既然是控件,无非要关注两个方面,第一是如何调用它的函数,其次是如何接收它的事件.

看看在WTL中,如何使用活扩控件(基本对话框):

1.创建项目时,让对话框支持活扩.从代码中,可发现一些差异:

//对话框从`CAxDialogImpl`继承,而不是从`CdialogImpl`继承:
class CMainDlg : public CAxDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>,
public CMessageFilter, public CidleHandler
//起动时初始`ActiveX`:
AtlAxWinInit()

2.打开对话框资源,向对话框时插入WebBrowser控件.可发现rc文件中多了一项:

CONTROL "",IDC_EXPLORER,"{8856F961-340A-11D0A96B-00C04FD705A2}",
WS_TABSTOP,7,7,198,174
#import "C:/WINNT/System32/shdocvw.dll"

3.调用控件的函数,CAxDialogImpl实现了一个QueryControl函数,通过它可查询到控件的接口,然后通过该接口指针访问对象.

CAxWindow wndIE = GetDlgItem(IDC_EXPLORER);
CComPtr<IWebBrowser2> pWB2;
HRESULT hr = wndIE.QueryControl ( &pWB2 );
if ( pWB2 )
{CComVariant v; //空`变量`pWB2->Navigate ( CComBSTR("http://blog.csdn.net/absurd/"),&v, &v, &v, &v );
}

4.处理控件的事件,在对话框资源上,通过鼠标右键控件加入处理事件函数,会有类似如下的代码:

//`导入`类型库,需要把后面那些参数删除才能编译过.
#import "C:/WINNT/System32/shdocvw.dll" raw_interfaces_only, raw_native_types, no_namespace, named_guids
//让对话框从`IdispEventImpl`继承过来
class CMainDlg : public CAxDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>,
public CMessageFilter, public CIdleHandler,
public IDispEventImpl<IDC_EXPLORER, CMainDlg>
//增加事件映射
BEGIN_SINK_MAP(CMainDlg)//确保事件处理器有`__stdcall`调用约定SINK_ENTRY(IDC_EXPLORER, 0x68, OnDownloadCompleteExplorer)
END_SINK_MAP()//增加处理事件函数
VOID __stdcall OnDownloadCompleteExplorer()
{//`待办`:为事件处理器添加代码.MessageBox("download ok");
}

5.还要在OnInitDialog做些初化工作,事件才能生效.

AtlAdviseSinkMap ( this, true );

6.最后在CloseDialog中做些反初化工作:

AtlAdviseSinkMap ( this, false );
http://www.lryc.cn/news/520146.html

相关文章:

  • 使用Deepseek搭建类Cursor编辑器
  • mysql,PostgreSQL,Oracle数据库sql的细微差异(2) [whith as; group by; 日期引用]
  • 基于改进粒子群优化的无人机最优能耗路径规划
  • C#中通道(Channels)的应用之(生产者-消费者模式)
  • git: hint:use --reapply-cherry-picks to include skipped commits
  • AI:对比ChatGPT这类聊天机器人,人形机器人对人类有哪些不一样的影响?
  • vue3 +ts 学习记录
  • 微服务的配置共享
  • Scala分布式语言二(基础功能搭建、面向对象基础、面向对象高级、异常、集合)
  • Chromium 132 编译指南 Windows 篇 - 配置核心环境变量 (三)
  • 开源文件存储分享平台Seafile部署与应用
  • MYSQL-创建数据库 CREATE DATABASE (十一)
  • Java高频面试之SE-11
  • C#结构体,枚举,泛型,事件,委托--10
  • MapReduce完整工作流程
  • 网络编程(1)
  • mysql中创建计算字段
  • 【算法】判断一个链表是否为回文结构
  • 计算机网络之---ICMP协议与Ping命令
  • 【硬件介绍】Type-C接口详解
  • 【Pandas】pandas Series rtruediv
  • 项目开发版本控制Git流程规范
  • STM32 : 波特率发生器
  • STM32 USB组合设备 MSC CDC
  • 继续以“实用”指导Pythonic编码(re通配表达式)(2024年终总结2)
  • Flutter使用BorderRadiusTween实现由矩形变成圆形的动画
  • VSCode 中的 launch.json 配置使用
  • 深度学习张量的秩、轴和形状
  • Redis有哪些常用应用场景?
  • vue3+ts+element-plus 输入框el-input设置背景颜色