要点
- 用EnumChildWindows()对所有控件执行某个操作。
- 用GetClassName()获取控件的名称,用于做特殊处理。
示例
把对话框中的所有控件都Disable掉,——除了OK&Cancel。或者,不处理Button(包括普通的Button、Radio Button、Check Button等)、Edit。
在对话框中(凌乱地)放了一些控件,如下:
第一种情况:禁掉所有的控件(除了OK、Cancel,否则没法关掉窗口了)
第二种情况:对Edit、Button特殊处理,不Disable它们。
示例代码
头文件:
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等就省掉了。