问题标签 [atl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
552 浏览

c++ - ATL、VS2008 扩展:将事件处理程序添加到 WindowEvents

使用 New Add-in Wizard 创建 Visual C++/ATL 加载项项目。
生成的代码:

获取事件对象和 WindowEvents:

如何添加事件处理程序?

感谢您的任何提示或参考...

更新,尝试 Alien01 的建议:

1>正在编译...
1>Connect.cpp
1>c:\work\visstudio_addin\cbaddin3\cbaddin3\connect.cpp(43) : error C2039: 'WindowActivated' : is not a member of 'EnvDTE::_WindowEvents'
1 > c:\work\visstudio_addin\cbaddin3\cbaddin3\debug\dte80a.tlh(1006) :参见 'EnvDTE::_WindowEvents'
1>c:\work\visstudio_addin\cbaddin3\cbaddin3\connect.cpp(43) 的声明:错误 C2061:语法错误:标识符“_dispWindowEvents_WindowActivatedEventHandler”

0 投票
2 回答
1523 浏览

c++ - 将自定义上下文菜单添加到托管 Web 浏览器控件

我正在托管一个 Web 浏览器控件,并希望提供我自己的上下文菜单。

理想情况下,我想展示我自己的上下文菜单,其中包含原始浏览器的上下文菜单(包含所有插件等)作为子菜单。

如果这不可能/很难,我可以正常显示我的上下文菜单,并在用户按下 SHIFT 时显示原始菜单。

我需要实现IDocHostUIHandler吗?如果是,如何指定自定义上下文菜单,如何强制使用原始菜单?如何让控件使用我的实现?

控件是这样创建的(省略错误处理):

0 投票
1 回答
833 浏览

c++ - 处理托管 Web 浏览器控件中的键盘事件/快捷方式

我正在托管一个 Web 浏览器控件,当控件具有焦点时,我不知道如何获取诸如 [F1] 之类的热键。

我的主要需求是在用户按下 F1 时显示自定义帮助,但是,通常能够提供额外的快捷方式会很好。

(在我的相关问题中提供了其他信息- 我希望打开第二个问题是正确的选择 - 我猜这些解决方案不相关。)

0 投票
1 回答
2854 浏览

c++ - 在使用 ATL 的宏处理 DWebBrowserEvents2 时处理 HTMLElementEvents2

我正在使用 VS2008、C++ 创建一个浏览器助手对象。我的课程是从 IDispEventImpl 等派生的

从上面的代码可以看出,我的 DWebBrowserEvents2 是使用 ATL 的宏处理的。现在我想处理 HTMLElementEvents2(以检测点击、滚动条等)。为此,我查询 IHTMLElement 的 IHTMLDocument2 对象,查询 IConnectionPointContainer 的 QueryInterface() 并调用 IConnectionPointContainer::FindConnectionPoint(DIID_HTMLElementEvents2)。(请参阅msdn关于处理 HTMLElementEvents2 的文章)。问题是,当我在我的类中覆盖 IDispatch::Invoke 时,DWebBrowserEvents2 句柄(使用 ATL 宏创建)失败。有没有办法在不覆盖 Invoke 的情况下处理 HTMLElementEvents2,或者以只处理 HTMLElementEvents2 的方式实现调用?
谢谢,任何帮助将不胜感激。

0 投票
1 回答
1362 浏览

windows - 使用 ATL CWindowImpl 永不结束 WM_PAINT 循环

我有一个使用 CAtlExeModuleT 的非常简单的 Win32 应用程序。该模块只是创建一个从 CWindowImpl 派生的类 CTestWindow。它只有一个用于 WM_PAINT 的消息处理程序。在我创建窗口并显示它之后,OnPaint 方法(WM_PAINT 消息)被无限调用,从而消耗 100% 的 CPU。

创建窗口的代码非常简单:

OnPaint 消息处理程序也非常简单(它不做任何事情):

0 投票
1 回答
2866 浏览

visual-c++ - 来自 CSMTPConnection::SendSimple 的错误 997 (ERROR_IO_PENDING)(“正在进行重叠的 I/O 操作”

CSMTPConnection 是 atlsmtpconnection.h 中的 ATL (VC++) 类。代码:

用VS2005构建。部署在混合了 Windows 2008 和 Windows 2003 服务器(大约 10 个)上的服务中。可以在任何地方工作,除了其中一个 Windows 2003 服务器,其中 SendSimple 方法(或者它可能是 Connect)总是产生错误 997 - Overlapped I/O operation in progress。我想我可以一直在循环中调用 SendSimple 直到我没有收到错误,但这会起作用吗?

0 投票
2 回答
565 浏览

visual-c++ - 在 VC++ 6 中创建一个新的连接点?

我有一个 ATL/COM 项目,在 VC++ 6 中。我想要一个现有的类,它以前从未被定义为引发事件,引发事件。为此,该类必须实现一个“连接点”。

这些事件属于以前没有任何类引发过的类型,因此我将不得不创建一个新的连接点,而不是重用现有的连接点。

我知道如何让一个类实现一个连接点——右键单击类视图中的类,选择“实现连接点”,然后从它显示的列表中选择适当的连接点。

我知道如何创建一个新的连接点,只要它与一个新的 ATL 类相关联来实现它 - 在创建类时检查“支持连接点”。

但是我不知道如何在创建实现它的新 ATL 类的情况下创建新连接点。

我修改了 IDL 以包含类似于现有连接点定义的内容:

(显然我有一个真正的 uuid,而不是“ blah blah blah ”)。

完成此操作后,_IBlahEvents 界面将显示在类视图中。但是当我右键单击要实现 _IBlahEvents 的 ATL 类并选择“实现连接点”时,_IBlahEvents 不会显示在现有连接点列表中。

我已经重新编译,包括清理和重建所有内容。

我错过了什么?

谢谢。

0 投票
3 回答
6372 浏览

visual-studio - 在 Windows 服务中使用 MFC?

我开始开发 Windows 服务。我想使用我自己的一些类,它们对某些 MFC 类(如 CString、CSocket、CArchive、CMemFile 和 CObject)几乎没有依赖关系。MSDN说您需要非常小心您在 Windows 服务中使用哪些 MFC,但不要指定它,也不要描述可能出现的问题。

我的问题是:

  • 可以使用哪些MFC?
  • 使用 MFC 会出现什么问题?
  • Windows 服务的哪些部分对 MFC 的使用至关重要?
  • 是否建议对 Windows 服务使用 ATL 而不是 MFC?
0 投票
1 回答
792 浏览

.net - 处理 windowStateChanged - IE 扩展中的选项卡更改

当在 IE 中切换选项卡等时,我的 IE 扩展中有以下内容要处理。 [ATL 项目,VS2008,使用 IDispEventImpl 的 C++]

每当我运行我的代码时,IE 就会停止工作(我得到一个对话框“Internet Explorer 已停止工作”)我做错了什么?我的代码中可能缺少什么?或者,这是 IE8 中的错误吗?我正在使用 Windows 7 (eval) BTW。

0 投票
1 回答
151 浏览

visual-c++ - 在 Vista 上托管 ActiveX 时出现问题(在 Visual Studio 6 C++ 应用程序中)

我刚刚在 Vista Enterprise 机器上安装了 Visual Studio 6 (SP5)。有一些问题,但我认为它设置得很好。

问题是我的 VC++ 6 应用程序在尝试托管 ActiveX 时失败。我能够编译它,但从 Vista 收到关于 rc.exe 的警告消息(“该程序存在已知的兼容性问题”)。

当我调试它时,我看到派生自 CAxDialogImpl 的类在其 Create() 方法上失败。相同的应用程序在 XP 上运行良好!

那里有已知的兼容性问题吗?

一些技术信息:我看到 CAxDialogImpl::Create() (我在这里传递 NULL)调用 AtlAxCreateDialogA,后者又调用 CreateDialogIndirectParama 引发一般异常。

非常感谢,埃里克

PS - 我是我机器上的管理员。操作系统是 32 位的。