CSDN=>FAQ=>FAQ 展示
  • 问题内容:怎么让某个控件永远得不到焦点
  • 原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=5090575
  • 所属论坛:基础类     审核组:VC/MFC
  • 提问者:weasea     解决者:rabo
  • 感谢:ripyu bobob
  • 关键字:VC/MFC 控件 基础类 true pdc 只读 重载 cedit 不变 pedit 灰色 benable
  • 答案:

    有个Picture控件,设置为不可见的
    在这上面创建了一个自己的控件

    现在我想让这个控件永远得不到焦点
    怎么做
    ---------------------------------------------------------------

    disable
    ---------------------------------------------------------------

    响应得到焦点消息,处理代码为失去焦点
    ---------------------------------------------------------------

    看了你的短信,回答如下:

    使禁用控件中的文字不变成灰色,可以使用如下方法.
    要分控件分别操作.如果是edit控件.那么可以用以下方法.

    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
    if(NULL != pEdit)
    {
        pEdit->EnableWindow(TRUE);
        pEdit->SetReadOnly(TRUE);
    }

    如果是Combo控件.那么就得继承CCombo类,比如为CReadOnlyComboBox
    在里面重载WM_ENABLE消息
    并实现如下

    void CReadOnlyComboBox::OnEnable(BOOL bEnable) 
    {
    CComboBox::OnEnable(bEnable);

    CEdit* pEdit = (CEdit*)GetWindow(GW_CHILD);
    if(NULL != pEdit)
    {
    pEdit->EnableWindow(TRUE);
    pEdit->SetReadOnly(!bEnable);
    }
    }

    这里特别要注意ComboBox的属性要选dropdown,而不是droplist.

    这是能实现的不变灰色的方法.

    如果你的贴子只是为了让控件只读,那么可以给分了.

    ^o^

    还有,如果你要控件的背景也是白色的,那么重载WM_CTLCOLOR消息就行了.

    例如:
    HBRUSH Cchildren::OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor )
    {
    HBRUSH hbr = Cfather::OnCtlColor(  pDC,  pWnd, nCtlColor );
    COLORREF COLOR = RGB(255,255,255);
    pDC->SetBkColor(COLOR);
    return  hbr;
    }

    当然我觉得不变白色最好.还是灰色背景和黑色字比较好.

  • 评价: 有价值 给朵鲜花(33) 无价值 扔个鸡蛋(12)
相关FAQ
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo