禁用/启用特定的静态文本控件?

时间:2016-04-26 10:48:27

标签: mfc dialog visual-studio-2015

我的对话框上有 STATIC 文本控件:

Static Text control

现在,我知道我可以将控件重命名为 IDC_STATIC_STYLE ,然后我可以将其映射到 CStatic 对象并禁用/启用该方式,或者我可以将CWnd GetDlgCtrlID 与它进行比较并走这条路。

我的问题是,我看到我是否可以避免重命名控件(因此不会影响我的资源DLL文件中的现有翻译)。有没有其他方法来找到这个特定的控件?我注意到在IDE中它有(名称)的灰色输入 IDC_STATIC51

如果必须,我会重命名,但如果按原样使用,我都感兴趣!

谢谢!

3 个答案:

答案 0 :(得分:1)

  1. UI中的名称只是一个内部ID,与资源没有任何关系。
  2. 只需使用Z顺序(如果定义正确)。这是在某些情况下这样做的方法。只需使用输入(在您的情况下为组合框)确定控件,然后使用GetWindow和GW_HWNDPREV。并且您在组合框之前有窗口的句柄。

答案 1 :(得分:0)

我相信在给出文本的情况下获得静态控件的更好方法是:

HWND hStyle = ::FindWindowEx(m_hWnd, 0, 0, L"Style");
::SetWindowText(hStyle, L"This is a test");

答案 2 :(得分:-1)

参考this

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