MFC中禁掉一个对话框中的所有控件

要点

  • 用EnumChildWindows()对所有控件执行某个操作。
  • 用GetClassName()获取控件的名称,用于做特殊处理。

示例

把对话框中的所有控件都Disable掉,——除了OK&Cancel。或者,不处理Button(包括普通的Button、Radio Button、Check Button等)、Edit。

在对话框中(凌乱地)放了一些控件,如下:

MFC中禁掉一个对话框中的所有控件_第1张图片

第一种情况:禁掉所有的控件(除了OK、Cancel,否则没法关掉窗口了)

MFC中禁掉一个对话框中的所有控件_第2张图片

第二种情况:对Edit、Button特殊处理,不Disable它们。

MFC中禁掉一个对话框中的所有控件_第3张图片

示例代码

头文件:

private:
    static BOOL CALLBACK DisableControl(HWND hwnd, LPARAM lParam);
    void DisableAllControls();

实现文件:

BOOL CALLBACK CTab_indexDlg::DisableControl(HWND hwnd, LPARAM lParam)
{
    BOOL disableAllControls = (BOOL)lParam;
    char className[256];
    ::GetClassName(hwnd, className, 256);
    TRACE("%s\n", className);

    if ((FALSE == disableAllControls)
        && ((_stricmp(className, "Edit") == 0) || (_stricmp(className, "Button") == 0))) {
        return TRUE;
    }

    ::EnableWindow(hwnd, FALSE);
    return TRUE;
}

void CTab_indexDlg::DisableAllControls()
{
    ::EnumChildWindows(m_hWnd, &CTab_indexDlg::DisableControl, (LPARAM)m_bDisableAllControls);

    GetDlgItem(IDCANCEL)->EnableWindow(TRUE);
    GetDlgItem(IDOK)->EnableWindow(TRUE);
}

对于最下面的checkbox的DDX等就省掉了。

你可能感兴趣的:(Windows,MFC,mfc)