我正在尝试使用以下代码在对话框中继承进度控件:
ATL::CContainedWindowT<WTL::CProgressBarCtrl> progress;
// ...
progress.SubclassWindow(GetDlgItem(IDC_PROGRESS));
一切都很好。现在,如果我尝试这样做:
progress.SetRange(0, 100);
我在一个简单的WTL SendMessage
实现中的SetRange()
上获得了访问冲突异常。我一直在寻找,我所能找到的就是这可能是Applications Using Older ATL Components May Experience Conflicts With DEP中提到的一些“thunking”问题,它不应该真正适用于我,因为我使用的是最新的ATL和WTL(Visual Studio 2010和WTL 8.1)。即使我使用WTL 8.0,我也会遇到同样的问题。
由于HWND有效,子类化已完成。有什么想法吗?
答案 0 :(得分:2)
WTL :: CProgressBarCtrl m_Progress; &lt;〜用它来附加进度条,而不是CContainedWindow。
答案 1 :(得分:2)
如果您子类化窗口,那么您应该为此子类控件实现消息映射。这包括将构件变量连接到构造函数中的消息映射,并将ALT_MSG_MAP
添加到类消息映射中。你在做这个吗?我想你没有。
你首先需要这个吗?要仅发送不需要子类化的消息,您只需要将真实HWND
附加到CProgressBarCtrl
实例:
WTL::CProgressBarCtrl m_ProgressBar;
// ...
m_ProgressBar = GetDlgItem(IDC_PROGRESS);
m_ProgressBar.SetRange(...
由于HWND有效,子类化已经完成
不,不行。你挂钩了窗口,但你没有提供你的WindowProc。因此,问题。