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 );
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
2012wtl,学习活扩
原文 WTL学习注意–活扩 在Win32下,活扩控件已是个成熟的概念了,即使对COM不太了解,使用活扩控件仍是件容易的事情.既然是控件,无非要关注两个方面,第一是如何调用它的函数,其次是如何接收它的事件. 看看在WTL中,如何使用活扩控件(基本对话框): 1.创建项目时,让对话框支持活…...
![](https://i-blog.csdnimg.cn/direct/e1b260dfb4ce464dab7b6205667d325c.jpeg#pic_center)
使用Deepseek搭建类Cursor编辑器
使用Deepseek搭建类Cursor编辑器 Cursor想必大家都用过了,一个非常强大的AI编辑器,在代码编写上为我们省了不少事,但高昂的价格让我们望而却步,这篇文章教你在Visual Studio Code上搭建一个类Cursor的代码编辑器。 步骤其实非常…...
![](https://www.ngui.cc/images/no-images.jpg)
mysql,PostgreSQL,Oracle数据库sql的细微差异(2) [whith as; group by; 日期引用]
sql示例(MySQL) WITHtemp1 AS (SELECT name AS resultsFROM Users uJOIN MovieRating m ON u.user_id m.user_idGROUP BY m.user_idORDER BY COUNT(*) DESC,left(name,1)LIMIT 1),temp2 AS (SELECT title AS resultsFROM Movies mJOIN MovieRating r ON m.movie_id r.movie_…...
![](https://i-blog.csdnimg.cn/direct/7fd6245b031a45db9d16e53d7f59dabe.png)
基于改进粒子群优化的无人机最优能耗路径规划
目录 1. Introduction2. Preliminaries2.1. Particle Swarm Optimization Algorithm2.2. Deep Deterministic Policy Gradient2.3. Calculation of the Total Output Power of the Quadcopter Battery 3.OptimalEnergyConsumptionPathPlanningBasedonPSO-DDPG3.1.ProblemModell…...
![](https://i-blog.csdnimg.cn/direct/4e2dee0f506f478b9a4b7432ed904242.png)
C#中通道(Channels)的应用之(生产者-消费者模式)
一.生产者-消费者模式概述 生产者-消费者模式是一种经典的设计模式,它将数据的生成(生产者)和处理(消费者)分离到不同的模块或线程中。这种模式的核心在于一个共享的缓冲区,生产者将数据放入缓冲区&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
git: hint:use --reapply-cherry-picks to include skipped commits
问: 当我在feture分支写完功能,切换到dev更新了远端dev代码,切回feture分支,git rebase dev分支后出现报错: warning skipped previously applied commit 709xxxx hint:use --reapply-cherry-picks to include skippe…...
![](https://www.ngui.cc/images/no-images.jpg)
AI:对比ChatGPT这类聊天机器人,人形机器人对人类有哪些不一样的影响?
人形机器人与像ChatGPT这样的聊天机器人相比,虽然都属于人工智能技术的应用,但由于其具备的物理形态和与环境的互动能力,它们对人类的影响会有很大的不同。下面从多个角度进行对比,阐述它们各自对人类的不同影响: 1. …...
![](https://www.ngui.cc/images/no-images.jpg)
vue3 +ts 学习记录
1 父子传参 父传子 父组件 <TestFuzichuancan :title"title"/> const title 父组件标题子组件 import { defineProps } from vue; interface Props {title?: string,arr: number[]; } const props withDefaults(defineProps<Props>(), {title: 默认…...
![](https://i-blog.csdnimg.cn/direct/78d33837df7c41aeb9e6287bd6611f0b.png)
微服务的配置共享
1.什么是微服务的配置共享 微服务架构中,配置共享是一个重要环节,它有助于提升服务间的协同效率和数据一致性。以下是对微服务配置共享的详细阐述: 1.1.配置共享的概念 配置共享是指在微服务架构中,将某些通用或全局的配置信息…...
![](https://i-blog.csdnimg.cn/direct/f5043343ad354fa89ec12c77b10d32d4.png)
Scala分布式语言二(基础功能搭建、面向对象基础、面向对象高级、异常、集合)
章节3基础功能搭建 46.函数作为值三 package cn . itbaizhan . chapter03 // 函数作为值,函数也是个对象 object FunctionToTypeValue { def main ( args : Array [ String ]): Unit { //Student stu new Student() /*val a ()>{"GTJin"…...
![](https://i-blog.csdnimg.cn/direct/da17901af9474351a0670d7f3437e3ad.png)
Chromium 132 编译指南 Windows 篇 - 配置核心环境变量 (三)
1. 引言 在之前的 Chromium 编译指南系列文章中,我们已经完成了编译前的准备工作以及 depot_tools 工具的安装与配置。本篇我们将聚焦于 Chromium 编译过程中至关重要的环境变量设置,这些配置是您顺利进行 Chromium 构建的基石。 2. 启用本地编译&…...
![](https://www.ngui.cc/images/no-images.jpg)
开源文件存储分享平台Seafile部署与应用
Seafile 是一款开源的企业云盘,注重可靠性和性能,支持全平台客户端。Seafile 内置协同文档 SeaDoc ,让协作撰写、管理和发布文档更便捷。适用于团队协作、文件存储和同步的开源解决方案,它提供了可靠、安全和易用的云存储服务。主要有以下特点: 文件存储和同步:Seafile 允…...
![](https://www.ngui.cc/images/no-images.jpg)
MYSQL-创建数据库 CREATE DATABASE (十一)
13.1.11 CREATE DATABASE 语句 -- 创建 数据库的 CREATE 权限 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name[create_option] ...create_option: [DEFAULT] {CHARACTER SET [] charset_name| COLLATE [] collation_name } -- 删除 数据库具有 DROP 权限 DROP {DATABASE…...
![](https://i-blog.csdnimg.cn/direct/e2242106a84947698d642b51545b004a.png)
Java高频面试之SE-11
hello啊,各位观众姥爷们!!!本牛马baby今天又来了!哈哈哈哈哈嗝🐶 Java中是引用传递还是值传递? 在 Java 中,方法参数传递是通过 值传递 的方式实现的,但这可能会引起一…...
![](https://www.ngui.cc/images/no-images.jpg)
C#结构体,枚举,泛型,事件,委托--10
目录 一.结构体 二.特殊的结构体(ref struct): 三.枚举 四.泛型 泛型的使用: 1.泛型类:定义一个泛型类,使用类型参数T 2.泛型方法:在方法定义中使用类型参数 3.泛型接口 五.委托及泛型委托 委托 泛型委托 六.事件 事件: 泛型事件:使用泛型委托(如Event…...
![](https://i-blog.csdnimg.cn/direct/9f05c02dbcc14175b36d2a00b787e828.png)
MapReduce完整工作流程
1、mapreduce工作流程(终极版) 0. 任务提交 1. 拆-split逻辑切片--任务切分。 FileInputFormat--split切片计算工具 FileSplit--单个计算任务的数据范围。 2. 获得split信息和个数。 MapTask阶段 1. 读取split范围内的数据。k(偏移量)-v(行数据) 关键API:TextI…...
![](https://www.ngui.cc/images/no-images.jpg)
网络编程(1)
网络编程概述 Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。 Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java 的本机安装系统里&#…...
![](https://i-blog.csdnimg.cn/direct/da56b880ab064f2892505a0df581b059.png)
mysql中创建计算字段
目录 1、计算字段 2、拼接字段 3、去除空格和使用别名 (1)去除空格 (2)使用别名:AS 4、执行算术计算 5、小结 博主用的是mysql8 DBMS,附上示例资料: 百度网盘链接: https://pan.baidu.co…...
![](https://i-blog.csdnimg.cn/direct/77b2a6b76720413dbaa0034f0f348b42.png)
【算法】判断一个链表是否为回文结构
问: 给定一个单链表的头节点head,请判断该链表是否为回文结构 例: 1 -> 2 -> 1返回true;1 -> 2 -> 2 -> 1返回true;15 -> 6 -> 15返回true 答: 笔试:初始化一个栈用来…...
![](https://www.ngui.cc/images/no-images.jpg)
计算机网络之---ICMP协议与Ping命令
ICMP 协议 ICMP (Internet Control Message Protocol) 是一种网络层协议,主要用于在 IP 网络中传递控制消息。ICMP 主要用于网络设备之间的故障报告和诊断,帮助设备检测网络连接问题。它是 IP 协议的核心部分之一,用于发送错误消息和操作信息…...
![](https://i-blog.csdnimg.cn/direct/36c3d80834214d50b47399d601c226ee.png)
【硬件介绍】Type-C接口详解
一、Type-C接口概述 Type-C接口特点:以其独特的扁头设计和无需区分正反两面的便捷性而广受欢迎。这种设计大大提高了用户的使用体验,避免了传统USB接口需要多次尝试才能正确插入的问题。Type-C接口内部结构:内部上下两排引脚的设计虽然可能不…...
![](https://www.ngui.cc/images/no-images.jpg)
【Pandas】pandas Series rtruediv
Pandas2.2 Series Binary operator functions 方法描述Series.add()用于对两个 Series 进行逐元素加法运算Series.sub()用于对两个 Series 进行逐元素减法运算Series.mul()用于对两个 Series 进行逐元素乘法运算Series.div()用于对两个 Series 进行逐元素除法运算Series.true…...
![](https://www.ngui.cc/images/no-images.jpg)
项目开发版本控制Git流程规范
个人&测试&预发布&生产分支命名 1)个人分支: 从sit或者master进行切出,姓名切出分支命名,或者日期切出分支命名 示例:liuys_sit、20250110_sit2)测试分支: sit3)用户验…...
![](https://i-blog.csdnimg.cn/direct/012103af002f46699f28b0b518e1b1d5.png)
STM32 : 波特率发生器
波特率发生器 1. 发送器和接收器的波特率 波特率寄存器 (BRR): 在串行通信中,发送器和接收器的波特率是由波特率寄存器(BRR)中的一个值 DIV 来确定的。 2. 计算公式 计算公式: 详细解释 1. 波特率寄存器 (BRR) BRR: 波特率寄存器是一…...
![](https://i-blog.csdnimg.cn/direct/4024175b4e1b4e27a352aee99ffcf3a4.png)
STM32 USB组合设备 MSC CDC
STM32 USB组合设备 MSC CDC实现 教程 教程请看大佬niu_88 手把手教你使用USB的CDCMSC复合设备(基于stm32f407) 大佬的教程很好,很详细,我调出来了,代码请见我绑定的资源 注意事项 值得注意的是: 1、 cu…...
![](https://img-blog.csdnimg.cn/20210916225739194.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU3MTU4NDk2,size_16,color_FFFFFF,t_70)
继续以“实用”指导Pythonic编码(re通配表达式)(2024年终总结2)
弃现成工具手剥任务🧐,我哈哈滴就像笨笨的傻大个儿😋。 (笔记模板由python脚本于2025年01月12日 23:29:33创建,本篇笔记适合熟悉正则表达式的coder翻阅) 【学习的细节是欢悦的历程】 Python官网:https://www.python.or…...
![](https://www.ngui.cc/images/no-images.jpg)
Flutter使用BorderRadiusTween实现由矩形变成圆形的动画
BorderRadiusTween 是插值动画中,用于组件边框半径的类,专门作用于组件边框和半径动化过度。 这个类继承自Tween,用法相似。 下面是示例写法 class BorderRadiusTweenPage extends StatefulWidget {overrideState<StatefulWidget> c…...
![](https://www.ngui.cc/images/no-images.jpg)
VSCode 中的 launch.json 配置使用
VSCode 中的 launch.json 配置使用 在 VSCode 中,launch.json 文件用于配置调试设置,特别是用来定义如何启动和调试你的应用。它允许你配置不同的调试模式、运行参数和调试选项。 基本结构 launch.json 文件位于 .vscode 文件夹内,可以通过…...
![](https://img-blog.csdnimg.cn/c18b5fd8b716481eb6d07763b5835049.png)
深度学习张量的秩、轴和形状
深度学习张量的秩、轴和形状 秩、轴和形状是在深度学习中我们最关心的张量属性。 秩轴形状 秩、轴和形状是在深度学习中开始使用张量时我们最关心的三个属性。这些概念相互建立,从秩开始,然后是轴,最后构建到形状,所以请注意这…...
![](https://i-blog.csdnimg.cn/direct/a88130c569104d218020cc495de342bd.png)
Redis有哪些常用应用场景?
大家好,我是锋哥。今天分享关于【Redis有哪些常用应用场景?】面试题。希望对大家有帮助; Redis有哪些常用应用场景? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis 是一个高性能的开源键值对(Key-Va…...
![](https://img-blog.csdnimg.cn/img_convert/5691782fc30e206700e075d91222febd.png)
企业网站建设规划的基本原则是什么/百度关键词优化排名
现在很多行业,都离不开Excel:做财务的,要用Excel做报表;做物流的,会用Excel来跟踪订单情况;做HR的,会用Excel算工资;做运营的,会用Excel记录数据做分析。不知道你有没有这…...
燕窝网站怎么做/云南百度推广开户
整理 | 李雪敬出品 | 程序人生(ID:coder_life)据微博用户程序员的那些事 透露,一名来自洛阳的程序员在离职后的第二个月收到了原公司的汇款2400元,该笔汇款备注了竞业协议补偿款,在收到该笔汇款后不久&…...
![](/images/no-images.jpg)
wordpress密码漏洞’/seo排名优化有哪些
oracle9i企业版和标准版的区别_计算机软件及应用_IT/计算机_专业资料 1人阅读|次下载 oracle9i企业版和标准版的区别_计算机软件及应用_IT/计算机_专业资料。Oracle9i 企业版和标准版的区别 Oracle9i 企业版和标准版的区别 ......Oracle9i 企业版和标准版的区别 Oracle9i 企业版…...
![](/images/no-images.jpg)
威海微网站建设/清远seo
现在做项目都会使用框架,现在很常见的框架就是SSH(StrutsSpringMVCspringhibernate),SSM(Struts/springMVCSpringHibernate),而我最近做的项目itoo中,使用到框架为easyUISpringMVCEJBhibernate.做项目分层是为了更好的解耦,分层可以完全不用你框架就能够解决,为什么还不需要这么…...
![](https://s1.51cto.com/attachment/201202/20/450441_1329724049Zubn.png)
购物网站建设费用/长春百度快速优化
我的邀请链接,请从以下位置注册:http://www.kuaipan.cn/index.php?acaccount&opregister&channelb58vj0 这样可以给我增加积分,也可以让你的初始容量从5G直接升到6G ,感谢。 金山快盘(T盘)是什么:…...
![](/images/no-images.jpg)
网站开发最新技术/淘宝seo是指什么
安装:MySQL 安装 | 菜鸟教程 #创建账户 create user root% identified by root; #赋予权限 grant all privileges on *.* to root% with grant option; #刷新 flush privileges; #密码设置 set password for rootlocalhostpassword(root);...