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

23 篇文章 0 订阅

要点

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

示例

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

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

original dialog

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

Disable All Controls

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

Special Controls

示例代码

头文件:

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等就省掉了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值