c – 将可见窗口标题添加到组合框MFC
发布时间:2020-12-16 09:43:02 所属栏目:百科 来源:网络整理
导读:我想在组合框中添加可见的窗口标题.这是我的来源: BOOL CALLBACK EnumWindowsProc(HWND hWnd,long lParam) { TCHAR buff[255]; CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_PROCESS); if (IsWindowVisible(hWnd)) { GetWindowText(hWnd,buff,
我想在组合框中添加可见的窗口标题.这是我的来源:
BOOL CALLBACK EnumWindowsProc(HWND hWnd,long lParam) { TCHAR buff[255]; CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_PROCESS); if (IsWindowVisible(hWnd)) { GetWindowText(hWnd,buff,254); pComboBox->AddString(buff); } return TRUE; } void CFindProcess::OnDropdownComboProcess() { EnumWindows(EnumWindowsProc,0); } 但我得到错误: error C2660: 'GetDlgItem' : function does not take 1 arguments 60 我怎样才能正确添加标题到组合? 解决方法
MFC对象是线程敏感的,GetDlgItem在创建对象的线程中运行良好,可能是主UI线程.函数EnumWindows可能会创建一个工作线程来访问回调函数,这就是GetDlgItem无法获得组合框的有效句柄的原因.
要在另一个线程中正确访问组合框,您必须使用静态函数:CWnd :: FromHandle与组合框对象的原始句柄,如下所示: BOOL CALLBACK EnumWindowsProc(HWND hWnd,long lParam) { if (IsWindowVisible(hWnd)) { TCHAR szBuffer[255]; INT nLength = GetWindowText(hWnd,szBuffer,254); if (nLength>0) { // only add windows that has a caption CComboBox *pComboBox = (CComboBox*)CWnd::FromHandle((HWND)lParam); pComboBox->AddString(szBuffer); } } return TRUE; } // call EnumWindows -------------------- CComboBox *pComboBox = (CComboBox *)GetDlgItem(IDC_COMBO1); // passing the raw handle of the combobox as parameter EnumWindows(EnumWindowsProc,(LPARAM)pComboBox->m_hWnd); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |