[英]WTL and CContainedWindow causing access violation
我试图使用以下代码在对话框中将进度控件子类化:
ATL::CContainedWindowT<WTL::CProgressBarCtrl> progress;
// ...
progress.SubclassWindow(GetDlgItem(IDC_PROGRESS));
那里一切都很好。 现在,如果我尝试这样做:
progress.SetRange(0, 100);
在普通WTL的SetRange()
实现中, SendMessage
上出现访问冲突异常。 我一直在搜寻,发现的可能是“ 使用旧版ATL组件的应用程序中可能遇到的一些问题”,因为我使用的是最新的ATL和WTL,它与DEP可能不会真正发生冲突。 (Visual Studio 2010和WTL 8.1 )。 即使使用WTL 8.0,我也会遇到相同的问题。
HWND有效,因此可以完成子分类。 有任何想法吗?
WTL :: CProgressBarCtrl m_Progress; <〜使用它来附加进度条,而不是CContainedWindow。
如果将窗口子类化,则应为此子类控件实现消息映射。 这包括将成员变量连接到构造ALT_MSG_MAP
中的消息映射,将ALT_MSG_MAP
添加到类消息映射。 你在做这个吗? 我想你不会。
首先需要这个吗? 要仅发送不需要子类化的消息,只需将实际HWND
附加到CProgressBarCtrl
实例:
WTL::CProgressBarCtrl m_ProgressBar;
// ...
m_ProgressBar = GetDlgItem(IDC_PROGRESS);
m_ProgressBar.SetRange(...
HWND有效,因此可以完成子分类
不,那不行。 您钩了窗口,但没有提供WindowProc。 因此,问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.