问题大致同上,我简单说下背景:
对话框上仅放一个组合框,组合框默认有输入焦点,这个输入焦点不仅仅是可以输入,要有提示用户输入的“黑色竖线”如图对话框上仅放一个浏览器控件的话,譬如打开百度首页,首页的输入框是有焦点的,意味浏览器控件有焦点。
把两个放在一个对话框上,打开对话框,去点组合框,组合框此时是可以输入的,但是没有那条黑色竖线,问题就是这样,感觉总怪怪的,求高手给个解决办法,重现我的黑线本是想着写个小浏览器,至少要有地址栏吧,就想到组合框,没有想到出这问题,真心求解决ComboBox对话框浏览器WebBrowser控件

解决方案 »

  1.   

    好像这是一个bug,网上也没有比较好的方法,好像可以通过给一个中间控件获得一个焦点然后再给编辑框焦点
      

  2.   


    你说的我大致尝试了一下,是应该可行的,但是我应该还差些什么我又加放一个编辑框上去,响应编辑框的EN_SetFocus消息,在里面添加 m_combox.SetFocus();
    点一次编辑框的时候,焦点可以看出已经到组合框上了(直接输入是在组合框里)但是没有那条黑色竖线,但是我点第二次编辑框,黑色竖线就出现了回复之前我还做了测试,如果响应组合框的 EN_SetFocus ,点到死都不出黑色竖线
    如果在编辑框的消息响应中重复写m_combox.SetFocus();还是需要点两次组合框才能有黑色竖线大神,请指点一下中间焦点传递的流程,怎样传递能正常,我程序:对话框,浏览器控件,组合框(想当成地址栏)就这两个控件其他都没有,我在线等呀,江湖救急
      

  3.   

    你看看这样行不行了
    BOOL CWebTestDlg::PreTranslateMessage(MSG* pMsg)
    {
        // TODO: Add your specialized code here and/or call the base class    switch(pMsg->message)
        {
        case WM_LBUTTONDOWN:
            {
                if(pMsg->hwnd == GetDlgItem(IDC_EDIT1)->m_hWnd)
                {
                    GetDlgItem(IDC_EDIT1)->SetFocus();
                    GetDlgItem(IDC_EDIT1)->ShowCaret();
                }
            }
            break;
        return CDialog::PreTranslateMessage(pMsg);
    }
      

  4.   


    请允许我膜拜一下
    如果对话框上有编辑框和浏览器控件,你上面那一段代码是非常有用的
    之后我换成组合框的控件ID,就出问题,我跟踪调试了一下,问题应该不算在代码上
    如果去掉判断直接这样,组合框是会显示 黑色竖线的
    GetDlgItem(IDC_COMBO1)->SetFocus();
    GetDlgItem(IDC_COMBO1)->ShowCaret();
    但是去掉判断就意味着,点击其他地方也是会让组合框获得焦点。跟踪调试问题就在那个判断语句上,换成组合框,我应该怎样写呀?
      

  5.   

    本帖最后由 VisualEleven 于 2013-08-21 15:40:46 编辑
      

  6.   


    写的一手好代码,新人膜拜呀,我基础太差了,程序都是百度着进行下去的,悲剧的是公司还只有我一个MFC程序员(新小公司慢慢招人)没有人交流,唉...
    结贴了,你去回复一下我这个帖子,我也给你30分:http://bbs.csdn.net/topics/390551525
    关于这个帖子,题目中的问题我还没有解决,但是下面追问的我已经解决了(选上SystemMenu最小化弹菜单的问题),是我自己代码的问题
    问题没有人回复,不想一直拖着了...
      

  7.   

    刚刚继续了解组合框的过程中,发现上面大哥的代码等价于这样,贴出来方便看到我帖子的朋友BOOL CBrowserDlg::PreTranslateMessage(MSG* pMsg)
    {
    // TODO: 在此添加专用代码和/或调用基类 switch(pMsg->message)
    {
    case WM_LBUTTONDOWN:
    {
    // 点击组合框不仅使组合框获得焦点
    // 也具有输入指示的 黑色竖线
    CComboBox *pBox1 = (CComboBox*)m_combox.GetWindow(GW_CHILD); if (pMsg->hwnd == pBox1->GetSafeHwnd())
    {
    GetDlgItem(IDC_COMBO)->SetFocus();
    GetDlgItem(IDC_COMBO)->ShowCaret();
    }
    }
    break;
    }

    return CDialogEx::PreTranslateMessage(pMsg);
    }