Информация об изменениях

Сообщение cannot convert from 'ATL::CWindow' to 'WTL::CButtonT<ATL::CW от 04.07.2022 2:02

Изменено 04.07.2022 2:03 Marty

cannot convert from 'ATL::CWindow' to 'WTL::CButtonT<ATL::CWindow>'
..Здравствуйте!

Давно не брал я в руки шашек, и решил тут пописать на 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 студии. Попросило проапдейтить, и собралось без вопросов. Вот тут я не совсем понял, а как так?

Есть идеи, куда поковырять?
cannot convert from 'ATL::CWindow' to 'WTL::CButtonT<ATL::CW
Здравствуйте!

Давно не брал я в руки шашек, и решил тут пописать на 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 студии. Попросило проапдейтить, и собралось без вопросов. Вот тут я не совсем понял, а как так?

Есть идеи, куда поковырять?