首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导致访问冲突的WTL和CContainedWindow

导致访问冲突的WTL和CContainedWindow
EN

Stack Overflow用户
提问于 2012-05-17 04:50:49
回答 2查看 572关注 0票数 2

我正在尝试使用以下代码在对话框中创建进度控件的子类:

代码语言:javascript
复制
ATL::CContainedWindowT<WTL::CProgressBarCtrl> progress;
// ...
progress.SubclassWindow(GetDlgItem(IDC_PROGRESS));

一切都很好。现在,如果我尝试这样做:

代码语言:javascript
复制
progress.SetRange(0, 100);

在一个微不足道的WTL的SetRange()实现中,我在SendMessage上得到了访问冲突异常。我一直在上下搜索,我发现这可能是Applications Using Older ATL Components May Experience Conflicts With DEP中提到的一些"thunking“问题,这不应该真正适用于我,因为我使用的是最新的ATL和WTL (Visual Studio2010和WTL 8.1)。即使我使用WTL 8.0也会遇到同样的问题。

子类化已完成,因为HWND是有效的。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-17 05:02:14

CProgressBarCtrl m_Progress;<~使用它来附加进度条,而不是CContainedWindow。

票数 2
EN

Stack Overflow用户

发布于 2012-05-17 16:08:56

如果你子类化了一个窗口,那么你需要为这个子类化的控件实现一个消息映射。这包括将成员变量连接到构造函数中的消息映射,将ALT_MSG_MAP添加到类消息映射。这是你做的吗?我想你不知道。

你需要把这个放在第一位吗?如果只想发送不需要子类化的消息,只需要在CProgressBarCtrl实例上附加真正的HWND

代码语言:javascript
复制
WTL::CProgressBarCtrl m_ProgressBar;
// ...
m_ProgressBar = GetDlgItem(IDC_PROGRESS);
m_ProgressBar.SetRange(...

由于

有效,HWND子类化完成得很好

不,这并不好。您挂上了窗口,但没有提供WindowProc。因此,问题就来了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10626499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档