我想将可见的窗口标题添加到组合框。这是我的来源:
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);
关于c++ - 将可见窗口标题添加到组合框 MFC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15311708/