Это код, который я пытаюсь заставить работать прямо сейчас:
#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);
};
Как видите, это в основном базовая инициализация с картой сообщений и т. д. Однако теперь я хочу подключить свой CTrackBarCtrl к DDX_MAP.
Важная часть заключается в следующем:
BEGIN_DDX_MAP(MusicPlayerDialog)
DDX_CONTROL(IDC_TRACKSLIDER, m_trackSlider)
END_DDX_MAP()
Что здесь должно произойти, так это то, что m_trackSlider подключен к элементу управления с идентификатором IDC_TRACKSLIDER, поэтому я могу управлять им, манипулируя переменной.
Однако прямо сейчас я сталкиваюсь с этой ошибкой:
error C2039: 'SubclassWindow': Is No Element Of 'WTL::CTrackBarCtrlT<ATL::CWindow>'
Из-за отсутствия документации WTL я не могу понять, в чем проблема. Я читал о подклассах, но, в конце концов, я не вижу другого способа сделать это, кроме того, как я пытаюсь. Я также не думаю, что CTrackBarCtrl неверен, так как это, похоже, оболочка WTL для ползунков.
Любой совет?