在C ++中禁用(灰显)多个GUI项

时间:2015-04-08 16:36:45

标签: c++ mfc

问题: 我正在寻找一种有效的方法来禁用MFC C ++应用程序中的(灰色)多个项目。根据用户是否已登录到SQL Server或Oracle帐户,我希望禁用GUI项的一部分。

我尝试了什么: 我使用以下代码禁用了我的两个“创建用户”按钮之一。

if(checkIsSQLServer())
{
    CWnd *oraCreateUser = GetDlgItem(BTN_ORA_CREATE);
    oraCreateUser->EnableWindow(false);  //Disable Oracle "Create User" button
}
else
{
    CWnd *sqlCreateLogin = GetDlgItem(BTN_SQL_CREATE); 
    sqlCreateLogin->EnableWindow(false);  //Disable SQL Server "Create User" button.
}

enter image description here

此代码完美无缺,但它只会禁用该按钮。我希望禁用任何一个组框中的所有项目。

我是否需要为每个要禁用的项目创建一个CWnd*对象?是否有更有效的方法,例如禁用组框中包含的所有项目的方法?

2 个答案:

答案 0 :(得分:3)

我用这个:

void EnableDlgItem (CWnd *dlg, int items[], BOOL bEnable)
{
  int i = 0, item ;

  while ((item = items[i++]) != 0)
  {
    CWnd *pControl = dlg->GetDlgItem(item) ;

    if (pControl != NULL)
      pControl->EnableWindow(bEnable) ;
  }
}

...

在某些CYourDialog::OnSomethingFunction()

static int ids[] = {IDOK, IDC_EDIT1, IDC_EDIT2, 0};
EnableDlgItem(this, ids, FALSE);

答案 1 :(得分:2)

正如其他人所说,MFC没有公开允许您启用/禁用一组控件的方法。您需要制作自己的代码才能做到这一点。

我遇到了同样的情况,并决定通过派生我自己的groupbox类来处理它。在我的情况下,groupbox启用/禁用功能与复选框的状态相关联,如下所示。

enter image description here

(我已经从中删除了一些信息)。

点击该复选框将切换组框中所有控件的启用/禁用。没有什么可以阻止你为groupbox派生你自己的类并暴露一个可以被调用的方法(而不是一个复选框)来启用/禁用控件。这种方法的优点是,如果您以通用方式创建类,则可以在其他情况下重新使用它,其中groupbox是" parent"其他控制措施。