最近项目有需要,得到一个非自己实现的窗口控件对象。于是想起曾经做过类似功能。总结如下:

  调用EnumChildWindows(this->m_hWnd, EnumChildProc, NULL);遍历指定窗口的所有子窗口。这里就是遍历This->m_hWnd的所有子窗口。this从外部窗口继承,外部窗口上的控件就是我们需要查找的对象。

  实现BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam) 的窗口遍历回调函数,其中hwndChild为你指定的父窗口的各个子窗口。返回True或False,可以控制这个子窗口过程是否被继续调用,具体看MSDN,我代码返回是True,应该表示继续查找,不断调用回调函数。

  在EnumChildProc实现中可以用

  HWND EditNumHwnd = ::FindWindowEx(hwndChild,NULL,_T("Edit"),NULL);

  去查找某个Combobox控件的子Edit控件。然后用

  SendMessage(EditNumHwnd, WM_SETTEXT, (WPARAM)0, (LPARAM)(filterString.kACharPtr()));

  去设置字符串。

  用CWnd* pComBox = CWnd::FromHandle(hwndChild);
    CComboBox *pCCombox = (CComboBox *)pComBox;得到对应的Combobox类指针。

  接着就能调用AddString,DeleteString,SetCurSel这些函数了。