尝试用DDX_control挂接控件时出错
Error when trying to hook up a control with DDX_CONTROL
这是我现在正试图开始工作的代码:
#pragma once
#include "stdafx.h"
#include "resource.h"
class MusicPlayerDialog : public CDialogImpl<MusicPlayerDialog>, public CWinDataExchange<MusicPlayerDialog>
{
public:
MusicPlayerDialog();
~MusicPlayerDialog();
enum { IDD = IDD_MAINDIALOG };
BEGIN_MSG_MAP_EX(MusicPlayerDialog)
MESSAGE_HANDLER(WM_CLOSE, OnClose)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
MESSAGE_HANDLER(WM_INITDIALOG, OnInit)
COMMAND_ID_HANDLER_EX(IDC_CLOSE, OnExitButtonClick)
END_MSG_MAP()
BEGIN_DDX_MAP(MusicPlayerDialog)
DDX_CONTROL(IDC_TRACKSLIDER, m_trackSlider)
END_DDX_MAP()
LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnInit(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
private:
CTrackBarCtrl m_trackSlider;
void OnExitButtonClick(UINT uCode, int nCtrlID, HWND hwndCtrl);
};
正如你所看到的,它主要是基本的初始化,带有消息映射等。然而,我现在想用DDX_map连接我的CTrackBarCtrl。
重要的部分是:
BEGIN_DDX_MAP(MusicPlayerDialog)
DDX_CONTROL(IDC_TRACKSLIDER, m_trackSlider)
END_DDX_MAP()
这里应该发生的是,m_trackSlider连接到Id为IDC_trackSlider的控件,因此我可以通过操纵变量来控制它。
然而,现在我面临这个错误:
error C2039: 'SubclassWindow': Is No Element Of 'WTL::CTrackBarCtrlT<ATL::CWindow>'
由于WTL缺少文档,我真的不知道问题出在哪里。我读了一些关于子类化的文章,但最终我看不到除了我尝试的方法之外的其他方法。我也不认为CTrackBarCtrl是错误的,因为它似乎是滑块的WTL包装器。
有什么建议吗?
请尝试使用"DDX_CONTROL_HANDLE"。看起来这个宏不需要"子类窗口"方法。
BEGIN_DDX_MAP(MusicPlayerDialog)
DDX_CONTROL_HANDLE(IDC_TRACKSLIDER, m_trackSlider)
END_DDX_MAP()
请参阅本线程的最后一个答案和代码项目文章中的解释:
WTL 7.1中添加的一个新功能是DDX_CONTROL_HANDLE宏。在WTL 7.0中,如果您想将一个纯窗口接口类(如CWindow、CListViewCtrl等)与DDX挂钩,则不能使用DDX_CONTROL,因为DDX_CONTROL只能与CWindowImpl派生类一起使用。除了不同的基类要求外,DDX_CONTROL_HANDLE的工作原理与DDX_CONTROL相同。
MFC程序员的WTL,第四部分-对话框和控件
相关文章:
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 在编译时,C++项目抛出错误 C2228,这是预期的,因为控件在运行时未达到该点
- 如何更改窗体上所有控件的标题?[C++生成器]
- 双击更改 mfc 中列表控件中的行的颜色
- 派生的 wxPanel 控件如何访问其中包含 wxDialog 中的数据?
- 如何从代码本身向 wxwidgets 中的文本控件插入字符?
- 如何在MFC中的静态文本控件上插入图标?
- 我的主窗口在创建时或单击更新区域时是否会收到编辑控件?
- 如何在Qt C++中向自定义控件添加属性?
- C/C++ 检测双击 TVItem 的常用控件
- 从C++标头中导入常量而不是硬编码它们:扩展 .net 控件?
- 控件不会在选择函数旁边移动
- MFC:我们能否扩展CEditView中存在的CEdit控件类行为
- 通过嵌入式 IWebBrowser2 控件中的链接打开 youtube 搜索失败
- 尝试导入快速控件时出错
- 将事件处理程序添加到任何控件都会导致 Visual Studio 中出错
- 尝试用DDX_control挂接控件时出错
- C++/MFC 访问控件变量时出错
- 编译时出错:控件可能到达非空函数的末端