添加成员变量向导中的控制变量已禁用。为什么?

时间:2010-06-22 11:03:16

标签: visual-studio-2008 mfc wizard

我有一个从CMyDialog派生的MFC对话框(是一个CDialog)并尝试使用“添加成员变量向导”添加一个控件。但是复选框“控制变量”显示为灰色。任何想法是什么问题?

例如: 我有一个编辑控件,并希望添加一个带有下边框和上边框(最小值和最大值)的int变量。我需要检查“控制变量”并将“catagory”设置为值。但“控制变量”显示为灰色。

我也试过按钮或列表控件,但“控制变量”显示为灰色。

4 个答案:

答案 0 :(得分:3)

为了使用向导添加控制变量,必须在类标题中定义IDD枚举,并在构造函数中使用它。例如:

部首:

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

来源:

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

另一方面,如果您在构造函数的初始化列表中直接使用资源ID(而不是在标头中使用IDD枚举),那么您无法添加成员变量或使用“控件” IDE中的“变量”复选框。

来源:

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

答案 1 :(得分:0)

VS2008中可能存在一些错误。我曾经遇到过类似的问题。

尝试添加控件并双击它。您将生成一个处理程序。然后单击控件并添加控制变量。

这对我有用。

答案 2 :(得分:0)

我在这里遇到了同样的问题,但由于性能原因,我们禁用了Intellisense更新('Disable Database Auto Updates = true')。我想MFC wizzard使用Intellisense。只需重新启用它或重新扫描您的解决方案即可。

答案 3 :(得分:0)

安德烈亚斯贝尔克是对的。我们面临同样的问题。另请注意,如果某个对话框类有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)
{
    ⋮
}