Управляющая переменная в мастере добавления члена-члена отключена. Зачем? - PullRequest
4 голосов
/ 22 июня 2010

У меня есть диалоговое окно MFC, полученное из CMyDialog (это CDialog), и я пытаюсь добавить элемент управления с помощью «мастера добавления переменной члена».Но флажок «переменная управления» неактивен.Любые идеи, в чем проблема?

Например: у меня есть элемент управления редактирования и хочу добавить переменную int с нижней и верхней границей (минимальное и максимальное значение).Мне нужно проверить «переменную управления» и установить значение «catagory».Но «управляющая переменная» недоступна.

Я также пытался управлять кнопками или списками, но «переменная управления» неактивна.

Ответы [ 4 ]

3 голосов
/ 29 ноября 2012

Чтобы добавить управляющую переменную с помощью мастера, , вы должны иметь перечисление IDD, определенное в заголовке класса, и использовать его в конструкторе .Например:

Заголовок:

class CMyDialog : public CDialog 
{
public:
  // Dialog Data
  enum { IDD = IDD_MYDIALOG };
  ⋮
};

Источник:

CMyDialog::CMyDialog(CWnd* pParent /*=NULL*/)
  : CDialog(CMyDialog::IDD, pParent)
{
    ⋮
}

С другой стороны, если вы используете идентификатор ресурса непосредственно в списке инициализации конструктора (вместо этогоиспользования перечисления IDD в заголовке), то вы не можете добавить переменную-член или использовать флажок «переменная управления» в IDE.

Источник:

CMyDialog::CMyDialog(CWnd* pParent /*=NULL*/)
  : CDialog(IDD_MYDIALOG, pParent)
{
    ⋮
}
0 голосов
/ 13 марта 2018

Андреас Белке прав.Мы столкнулись с той же проблемой.Также обратите внимание, что если у вас есть typedef для вашего диалогового класса, у вас будет та же проблема.

Следующий пример не работает (VS2015):

typedef CDialog         CBaseDialog;

class CMyDialog : public CBaseDialog
{
public:
  // Dialog Data
  enum { IDD = IDD_MYDIALOG };
  ⋮
};

CMyDialog::CMyDialog(CWnd* pParent /*=NULL*/)
  : CBaseDialog(IDD_MYDIALOG, pParent)
{
    ⋮
}
0 голосов
/ 21 октября 2013

У меня возникла та же проблема, но по причинам производительности мы отключили обновление Intellisense («Отключить автоматическое обновление базы данных = true»).Я полагаю, что MFC Wizzard использует Intellisense.Просто включите его или повторно просмотрите свое решение, и оно заработает.

0 голосов
/ 31 октября 2012

Может быть, какая-то ошибка в VS2008.Я сталкивался с подобной проблемой однажды.

Попробуйте добавить элемент управления и дважды щелкните его.У вас будет сгенерированный обработчик.Затем нажмите на элемент управления и добавьте переменную элемента управления.

Это сработало для меня.

...