加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读