7050|15

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

OnCtlColor函数好像只在初始化的时候改变控件的颜色,后来好像就不起作用了 [复制链接]

evc的OnCtlColor函数好像只在初始化的时候改变控件的颜色,后来好像就不起作用了,我在OnCtlColor改变控件的背景色,只有在初始化时可以改变一次,以后再也不变了。Invalidate(),RedrawWindow(),UpdateWindow()函数都试过了,就是不管用。
请教大家遇到过没有,怎么解决?

最新回复

只有在MoveWindow,CenterWindow等函数,而且确实窗口被移动了,才触发CtlColor。 建议自绘  详情 回复 发表于 2007-10-24 13:37
点赞 关注

回复
举报

66

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
代码贴出来,我做的是可以的.
 
 

回复

92

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
用OnEraseBkgnd
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
HBRUSH CMonitorDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
       
        // TODO: Change any attributes of the DC here
        if   (pWnd->GetDlgCtrlID() == IDC_PICALARM || pWnd->GetDlgCtrlID() ==                   IDC_STATICNET||pWnd->GetDlgCtrlID() == IDC_STATICLABA)   
        {   
                HBRUSH hbrN = CreateSolidBrush(m_clrBack);
                pDC->SetBkMode(TRANSPARENT);
                return hbrN;
        }  
        // TODO: Return a different brush if the default is not desired
        return hbr;
}

程序中有三个picture,我想在三个picture中加载三个ico图像。动态改变picture的背景。
在程序中改变m_clrBack值,然后Invalidate,没有反应。程序是基于对话框的。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

5
 
to:1982pc
把你可以的代码给我看看也可以阿。这个问题困扰我好久了
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

6
 
用Invalidate(TRUE);刷新看看呢?!
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

7
 
BOOL Invalidate(
BOOL bErase = TRUE);
默认是true阿。
还是不管用。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

8
 
GetDlgItem(IDC_STATICLABA)->MoveWindow(520,1,22,22);
把Picture移动一下就可以,背景变了,调用OnCtlColor函数了。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

9
 
你那里发送执行Invalidate(TRUE);没有执行OnCtlColor函数?

不行的话直接发消息,看看呢
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

10
 
       
在想改变颜色的时候 加这2句就可以了        IDC_STATIC_CmdContent 控件名
GetDlgItem(IDC_STATIC_CmdContent)->Invalidate();
GetDlgItem(IDC_STATIC_CmdContent)->UpdateWindow();
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

11
 
HBRUSH CBtnColor::CtlColor(CDC* pDC, UINT nCtlColor)


用这个试试 可能行
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

12
 
将HBRUSH   hbrN   =   CreateSolidBrush(m_clrBack); 放在OnCtlColor()中我没试过,通常的做法是在OnInitDialog()中创建画刷,m_brush   =   CreateSolidBrush(颜色);,你可以试试在程序中重新用不同的颜色创建画刷以对m_brush重新赋值: m_brush   =   CreateSolidBrush(其他颜色),然后调用Invalidate(); 应该是可以的。如果还不行的话,你可以在程序中设置一些标志,然后调用Invalidate(); 以控制OnCtlColor()函数中的执行代码的流程。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

13
 
顶楼上的,HBRUSH   hbrN   =   CreateSolidBrush(m_clrBack); 要在初始化里创建
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

14
 
HBRUSH   hbrN;
应该是个全局变量。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

15
 
一般自绘控件都采用owner-drawn 方式,或者做subclass也行。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

16
 
只有在MoveWindow,CenterWindow等函数,而且确实窗口被移动了,才触发CtlColor。

建议自绘
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表