如何设置动态创建的CButton背景颜色和字体颜色?

zzWind 2002-03-24 10:46:37
同上
...全文
1147 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
arte 2002-03-26
  • 打赏
  • 举报
回复
请教Tasehouny兄
如何不用onCtrlColor而改变控件的颜色,比如说,一个dialog上面有一个
edit control(idc_name)和一个button(idc_button1) ,我想当button1被
按下时,改变edit control的背景色,下面的代码为什么不对?

void CMyDialog::OnButton1()
{
// TODO: Add your control notification handler code here
CEdit* pEd=(CEdit*)GetDlgItem(IDC_name);
CDC *pDC;
pDC=pEd->GetDC();
pDC->SetBkColor(RGB(255, 0, 0));
GetDlgItem(IDC_name)->UpdateWindow();
}
zzWind 2002-03-24
  • 打赏
  • 举报
回复
to bluesea21(谢辉)
我重载了OnCtrlColor还是没有用。
Tasehouny 2002-03-24
  • 打赏
  • 举报
回复
WM_CTLCOLOR消息对下列五类控件是适用的:



1.Check box, radio button, push button:用选定的brush画出该控件所被放置的矩形区,控件的形状和文本再在其上画出;



2.Edit control:画出编辑区;



3.Group box:画出标题文本之下的矩形区域;



4.Scroll bar:画出滑块的轨迹;



5.List box:画出列表区域。



静态文本、边框和矩形不受该消息的影响。



还须注意的是,虽然WM-CTLCOLOR消息对Push button是适用的,但是从Windows 3.0及其以后的版本的系统中,加入了用户程序不能修改按钮外观颜色的限制,如果要达到您想要的效果的话,您需要使用owner-drawn button。



关于WM_CTLCOLORBTN的进一步的信息,您可以参考http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/buttons_0d4e.asp



关于owner-drawn button的进一步的信息,您可以参考:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/buttons_4jub.asp



- 微软全球技术中心 VC技术支持



本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。



为了为您创建更好的讨论环境,请参加我们的用户满意度调查


(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。

我觉得只能自己画!我就是这样做的!
bluesea21 2002-03-24
  • 打赏
  • 举报
回复
CDC *pDC;
pDC=GetDlgItem(IDC_BUTTON1)->GetDC();
pDC->SelectObject(pFont);
GetDlgItem(IDC_BUTTON)->UpDataWindow();
//字体颜色:CFont pFont.
背景须重载OnCtrlColor
zzWind 2002-03-24
  • 打赏
  • 举报
回复
to psusong(我心飞扬)
我是用你的方法就是Button颜色改变不了,Edit和Dlg都可以。
GoogleGeek 2002-03-24
  • 打赏
  • 举报
回复
那时因为你调用该函数的方法不对!具体的做法如下所示:
in .h
class CYourDlg:public CDialog{
private:
HBRUSH bkColor,dlgcolor;
CBrush brush,dglBrush;
};
in .cpp
CYourDlg::CYourDlg(CWnd* pParent /*=NULL*/)
: CDialog(CYourDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CShowMe)
brush.CreateSolidBrush (RGB(255,255,0));
dglBrush.CreateSolidBrush(RGB(83,200,255));
dlgcolor=(HBRUSH)dglBrush;
bkColor=(HBRUSH)brush;
}
映射消息函数:
HBRUSH CYourDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(nCtlColor==CTLCOLOR_EDIT)//设置编辑控件的颜色
{
pDC->SetBkColor (RGB(255,255,0));
return bkColor;
}
if(nCtlColor==CTLCOLOR_DLG)//设置对话框的背景色
{
pDC->SetBkColor (RGB(83,200,255));
return dlgcolor;
}
//设置其他的控件的方法相同,建议兄台看一下MSDN
}

南京扬子石化精细化工有限责任公司
QQ:81824475
Email:psu.song@163.com

1,658

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧