gpt4 book ai didi

c++ - 将可见窗口标题添加到组合框 MFC

转载 作者:太空狗 更新时间:2023-10-29 20:14:47 28 4
gpt4 key购买 nike

我想将可见的窗口标题添加到组合框。这是我的来源:

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com