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

Disabling (Greying out) multiple GUI Items in C++

问题: 我正在寻找一种在 MFC C++ 应用程序中禁用(灰色)mutiple 项的有效方法。根据用户登录的是 SQL 服务器还是 Oracle 帐户,我希望禁用一部分 GUI 项目。

我尝试过的: 我使用以下代码禁用了我的两个 "Create User" 按钮之一。

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.
}

.

这段代码工作完美,但它只禁用了按钮。我希望禁用任一组框中的所有项目。

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

我用这个:

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);

正如其他人所说,MFC 没有公开允许您 enable/disable 一组控件的方法。您需要编写自己的代码来执行此操作。

我遇到了完全相同的情况,并决定通过派生我自己的组框来处理它 class。在我的情况下,组框 enable/disable 功能与复选框的状态相关联,如下所示。

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

单击复选框将切换组框中 所有 控件的 enable/disable。没有什么可以阻止您为分组框派生自己的 class 并将可以调用的方法(而不是复选框)公开给 enable/disable 控件。这种方法的优点是,如果您以通用方式创建 class,则可以在组框是其他控件的 "parent" 的其他情况下重复使用它。