MFC如何设置控件的背景颜色啊

xiao452159568 2010-12-12 12:48:30
在OnCtlColor(CDC*pDC,CWnd*pWnd,UINT nCtlColor)里面
if(pWnd->GetDlgCtrlID()==IDC_STATIC||pWnd->GetDlgCtrlID()==IDC_MFCLINK1)
{
pDC->SetTextColor(RGB(0,0,255));
pDC->SetBkMode(OPAQUE);
pDC->SetBkColor(RGB(14*16,15*16+15,15*16+15));
}我这样可以把那个静态控件的背景颜色改掉,可是其他两个控件(MFC link ctrl,check box)还是白色背景,求各位前辈指点一下啊,有什么办法没啊。(因为我已经把对话框的背景颜色改了,可是控件的背景颜色还是白色的,所以一定得改掉,太难看了)
...全文
1566 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
goforhelp 2011-07-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xiao452159568 的回复:]
问题解决。换了一种方法,这种不知道问题出在哪里。有兴趣的来讨论一下这个问题哈
ClistctrlDlg dlg;
m_pMainWnd = &dlg;//这里把他注释了竟然没影响
INT_PTR nResponse = dlg.DoModal();
如果是这样就会引起中断
ClistctrlDlg dlg;
INT_PTR nResponse = dlg.DoModal();
……
[/Quote]

第二种情况
m_pMainWnd = &dlg; dlg此时的确被注销掉了,指针m_pMainWnd必须指定一个具体的地址,所以会出现异常
lijianli9 2010-12-14
  • 打赏
  • 举报
回复
OnCtrlColor
zzw820626 2010-12-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 healer_kx 的回复:]

OnCtrlColor
[/Quote]
+
yys9587241 2010-12-14
  • 打赏
  • 举报
回复
同意楼上看法。
pjl1119 2010-12-14
  • 打赏
  • 举报
回复
OnCtlColor()中只用创建画笔和画刷,必须返回一个刷子句柄,该刷子将被用于画出控件的背景,该刷子的使用是在对应的OnPaint()或OnDraw中
pjl1119 2010-12-14
  • 打赏
  • 举报
回复
nCtlColor代表的是控件ID,利用它来区分各个控件就可以了,

HBRUSH CControlEditDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
*CFont * cfont=new CFont;
cfont->CreateFont(16,0,0,0,FW_SEMIBOLD,FALSE,FALSE,0,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH&FF_SWISS,FONT1);*/
switch(nCtlColor)
{
case CTLCOLOR_STATIC: //静态文本控件
{
pDC->SetBkMode(TRANSPARENT);
//pDC->SetTextColor(RGB(255,255,0)); //设置字体颜色
//pWnd->SetFont(cfont); //设置字体
HBRUSH B = CreateSolidBrush(RGB(125,125,255)); //创建画刷
return (HBRUSH) B;
}
case CTLCOLOR_BTN: //按钮控件
{
pDC->SetBkMode(TRANSPARENT);
/* pDC->SetTextColor(RGB(255,255,0));
pWnd->SetFont(cfont); */
HBRUSH B = CreateSolidBrush(RGB(125,125,255));
return (HBRUSH) B;
}
}
return hbr;
}
cfans_2011 2010-12-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 healer_kx 的回复:]
OnCtrlColor
[/Quote]

帮顶。。。
xiao452159568 2010-12-12
  • 打赏
  • 举报
回复
问题解决。换了一种方法,这种不知道问题出在哪里。有兴趣的来讨论一下这个问题哈
ClistctrlDlg dlg;
m_pMainWnd = &dlg;//这里把他注释了竟然没影响
INT_PTR nResponse = dlg.DoModal();
如果是这样就会引起中断
ClistctrlDlg dlg;
INT_PTR nResponse = dlg.DoModal();
m_pMainWnd = &dlg;
感觉是这样的domadal后dlg就被注销了,所以m_pMainWnd终究会成为NULL,去查m_pMainWnd没看出个什么名堂
healer_kx 2010-12-12
  • 打赏
  • 举报
回复
OnCtrlColor
xiao452159568 2010-12-12
  • 打赏
  • 举报
回复
楼上的各位,怎么没人帮我指出问题所在啊,我当然知道网上有例子,我这就是在网上找的啊!!
muyouniao 2010-12-12
  • 打赏
  • 举报
回复
网上很多例子的
qianlizhima 2010-12-12
  • 打赏
  • 举报
回复
BOOL ModifyStyle(
DWORD dwRemove,//Specifies window styles to be removed during style modification.
DWORD dwAdd,//Specifies window styles to be added during style modification.
UINT nFlags = 0 /*Flags to be passed to SetWindowPos, or zero if SetWindowPos should not be called. The default is zero. See the Remarks section for a list of preset flags.
*/
);

GetDlgItem(IDC_STATIC)->ModifyStyle(0,SS_BLACKFRAME/*黑色背景*/,0);
其他可选的背景颜色还有呢SS_WHITEFRAME(白色),SS_GRAYFRAME(灰色)
const001 2010-12-12
  • 打赏
  • 举报
回复
孙鑫视频中有介绍,大概是在第九课吧 呵呵
yihandrensunyong 2010-12-12
  • 打赏
  • 举报
回复
参考http://topic.csdn.net/t/20030305/21/1496190.html

另外楼主可以百度搜索 MFC设置控件颜色 有很多资料

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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