问题: 我正在寻找一种有效的方法来禁用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.
}
此代码完美无缺,但它只会禁用该按钮。我希望禁用任何一个组框中的所有项目。
我是否需要为每个要禁用的项目创建一个CWnd*
对象?是否有更有效的方法,例如禁用组框中包含的所有项目的方法?
答案 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启用/禁用功能与复选框的状态相关联,如下所示。
(我已经从中删除了一些信息)。
点击该复选框将切换组框中所有控件的启用/禁用。没有什么可以阻止你为groupbox派生你自己的类并暴露一个可以被调用的方法(而不是一个复选框)来启用/禁用控件。这种方法的优点是,如果您以通用方式创建类,则可以在其他情况下重新使用它,其中groupbox是" parent"其他控制措施。