Здравствуйте!
Давно не брал я в руки шашек, и решил тут пописать на WTL. Так как студия у меня 2019ая, решил скачать WTL поновее — 10.
Взял пример BmpView, вставил сорцы в свой проект, собираю — ошибка:
1>\props.h(195,1): error C2440: 'initializing': cannot convert from 'ATL::CWindow' to 'WTL::CButtonT<ATL::CWindow>'
1>\props.h(195,21): message : No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Код такой (props.h):
| Скрытый текст |
| CPropertySheetWindow sheet = GetPropertySheet();
sheet.CancelToClose();
RECT rect;
//CButton btnCancel = sheet.GetDlgItem(IDCANCEL); // !!!
ATL::CWindow btnCancel = sheet.GetDlgItem(IDCANCEL);
btnCancel.GetWindowRect(&rect);
sheet.ScreenToClient(&rect);
btnCancel.ShowWindow(SW_HIDE);
|
| |
Строчка !!! — не собирается. Ну, я переделал, вроде собирается.
Глянул CButtonT — это
| Скрытый текст |
| typedef CButtonT<ATL::CWindow> CButton;
|
| |
Которое есть
| Скрытый текст |
| template <class TBase>
class CButtonT : public TBase
{
public:
// Constructors
CButtonT(HWND hWnd = NULL) : TBase(hWnd)
{ }
CButtonT< TBase >& operator =(HWND hWnd)
{
this->m_hWnd = hWnd;
return *this;
}
//...
|
| |
CPropertySheetWindow.GetDlgItem возвращает ATL::CWindow. Ну, вроде бы логично, конструктора подходящего нет. Хотя, по идее, ATL::CWindow должен иметь operator HWND, и тогда должно вроде бы работать.
Ладно. Попробовал в 2019 студии открыть идущий в комплекте с примером проект для 2010 студии. Попросило проапдейтить, и собралось без вопросов. Вот тут я не совсем понял, а как так?
Есть идеи, куда поковырять?
Здравствуйте, Marty, Вы писали:
M>Здравствуйте!
M>Давно не брал я в руки шашек, и решил тут пописать на WTL. Так как студия у меня 2019ая, решил скачать WTL поновее — 10.
M>Взял пример BmpView, вставил сорцы в свой проект, собираю — ошибка:
M>1>>\props.h(195,1): error C2440: 'initializing': cannot convert from 'ATL::CWindow' to 'WTL::CButtonT<ATL::CWindow>'
1>>\props.h(195,21): message : No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
M>Код такой (props.h):
M> | Скрытый текст |
| M>M> CPropertySheetWindow sheet = GetPropertySheet();
M> sheet.CancelToClose();
M> RECT rect;
M> //CButton btnCancel = sheet.GetDlgItem(IDCANCEL); // !!!
M> ATL::CWindow btnCancel = sheet.GetDlgItem(IDCANCEL);
M> btnCancel.GetWindowRect(&rect);
M> sheet.ScreenToClient(&rect);
M> btnCancel.ShowWindow(SW_HIDE);
M>
|
| |
M>Строчка !!! — не собирается. Ну, я переделал, вроде собирается.
...
M>CPropertySheetWindow.GetDlgItem возвращает ATL::CWindow. Ну, вроде бы логично, конструктора подходящего нет. Хотя, по идее, ATL::CWindow должен иметь operator HWND, и тогда должно вроде бы работать.
M>Ладно. Попробовал в 2019 студии открыть идущий в комплекте с примером проект для 2010 студии. Попросило проапдейтить, и собралось без вопросов. Вот тут я не совсем понял, а как так?
M>Есть идеи, куда поковырять?
Может быть в проекте куда добавлялись исходники подключен header atlwin.h от старой версии ATL?
Студия 2019 в atlwin.h в CWindow есть operator HWND, он и вызывается
operator HWND() const throw()
{
return m_hWnd;
}