微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我想在组合框中添加可见的窗口标题.这是我的来源:

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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐