-
问题内容:怎么让某个控件永远得不到焦点
- 原讨论链接: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)