我正在尝试使用以下代码在对话框中创建进度控件的子类:
ATL::CContainedWindowT<WTL::CProgressBarCtrl> progress;
// ...
progress.SubclassWindow(GetDlgItem(IDC_PROGRESS));一切都很好。现在,如果我尝试这样做:
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是有效的。有什么想法吗?
发布于 2012-05-17 05:02:14
CProgressBarCtrl m_Progress;<~使用它来附加进度条,而不是CContainedWindow。
发布于 2012-05-17 16:08:56
如果你子类化了一个窗口,那么你需要为这个子类化的控件实现一个消息映射。这包括将成员变量连接到构造函数中的消息映射,将ALT_MSG_MAP添加到类消息映射。这是你做的吗?我想你不知道。
你需要把这个放在第一位吗?如果只想发送不需要子类化的消息,只需要在CProgressBarCtrl实例上附加真正的HWND:
WTL::CProgressBarCtrl m_ProgressBar;
// ...
m_ProgressBar = GetDlgItem(IDC_PROGRESS);
m_ProgressBar.SetRange(...由于
有效,HWND子类化完成得很好
不,这并不好。您挂上了窗口,但没有提供WindowProc。因此,问题就来了。
https://stackoverflow.com/questions/10626499
复制相似问题