MFC怎么设置静态控件区域的颜色
图1图2图一是一个静态文本区域与一个CStatic类对象关联了。也设置了区域的大小。图二是对话框程序的主界面。也就是主程序的背景。我在静态文本类CStatic的OnCtl...
图1
图2
图一是一个静态文本区域与一个CStatic类对象关联了。也设置了区域的大小。
图二是对话框程序的主界面。也就是主程序的背景。
我在静态文本类CStatic的OnCtlColor函数里设置了背景模式为透明,但是每次刷新文本区域时都会闪屏显示出图二的颜色。请问这个问题怎么解决?或者直接把静态文本区域背景色改黑色能解决不闪出图二颜色吗?
我现在只能靠把图2的颜色改为黑色才能投机解决闪屏的问题。
请问有没有好的方法解决?
这是OnCtlColor函数函数定义
HBRUSH CLinkStatic::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CStatic::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
pDC->SetBkMode(TRANSPARENT); //设置背景模式为透明
pDC->SetTextColor(RGB(0,0,0));
// TODO: Return a different brush if the default is not desired
return hbr;
} 展开
图2
图一是一个静态文本区域与一个CStatic类对象关联了。也设置了区域的大小。
图二是对话框程序的主界面。也就是主程序的背景。
我在静态文本类CStatic的OnCtlColor函数里设置了背景模式为透明,但是每次刷新文本区域时都会闪屏显示出图二的颜色。请问这个问题怎么解决?或者直接把静态文本区域背景色改黑色能解决不闪出图二颜色吗?
我现在只能靠把图2的颜色改为黑色才能投机解决闪屏的问题。
请问有没有好的方法解决?
这是OnCtlColor函数函数定义
HBRUSH CLinkStatic::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CStatic::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
pDC->SetBkMode(TRANSPARENT); //设置背景模式为透明
pDC->SetTextColor(RGB(0,0,0));
// TODO: Return a different brush if the default is not desired
return hbr;
} 展开
5个回答
展开全部
设置背景透明后,控件的重绘会触发父窗口的背景重绘,因此会出现闪烁。
这个优化起来会比较困难,其实都设置为黑色背景也没什么问题,这样就不会触发二次重绘了。可以在绘图区域再套一个静态框,背景黑色。
例如:新建基于对话框的mfc程序。
添加一个static标签控件,ID为:IDC_STATIC_DEMO
在CXXXDlg类中添加一个类型为CBrush的成员变量m_brs;
m_brs.CreateSolidBrush(RGB(0,0,55));//需要程序使用的背景画刷
并且在CXXXDlg的构造函数中添加一行代码
在CXXXDlg中添加WM_CTLCOLOR消息处理函数
然后在OnCtlColor中写下面的代码:
if(IDC_STATIC_DEMO==pWnd->GetDlgCtrlID())//判断正在绘制的是不是我们需要改变的控件
{
pDC->SetBkMode(TRANSPARENT);//设置透明输出
pDC->SetTextColor(RGB(255,0,0));//设置文字颜色
return m_brs;//用自定义的画刷去绘制背景
}
这个优化起来会比较困难,其实都设置为黑色背景也没什么问题,这样就不会触发二次重绘了。可以在绘图区域再套一个静态框,背景黑色。
例如:新建基于对话框的mfc程序。
添加一个static标签控件,ID为:IDC_STATIC_DEMO
在CXXXDlg类中添加一个类型为CBrush的成员变量m_brs;
m_brs.CreateSolidBrush(RGB(0,0,55));//需要程序使用的背景画刷
并且在CXXXDlg的构造函数中添加一行代码
在CXXXDlg中添加WM_CTLCOLOR消息处理函数
然后在OnCtlColor中写下面的代码:
if(IDC_STATIC_DEMO==pWnd->GetDlgCtrlID())//判断正在绘制的是不是我们需要改变的控件
{
pDC->SetBkMode(TRANSPARENT);//设置透明输出
pDC->SetTextColor(RGB(255,0,0));//设置文字颜色
return m_brs;//用自定义的画刷去绘制背景
}
展开全部
HBRUSH CTestDlg1Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
// 判断下是不是你要改的控件ID
if( pWnd->GetDlgCtrlID() == IDC_STATIC_MAX )
{
pDC->SetTextColor(RGB(255,0,0)); //字体颜色
pDC->SetBkColor(RGB(0, 0, 255)); //字体背景色
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
// 判断下是不是你要改的控件ID
if( pWnd->GetDlgCtrlID() == IDC_STATIC_MAX )
{
pDC->SetTextColor(RGB(255,0,0)); //字体颜色
pDC->SetBkColor(RGB(0, 0, 255)); //字体背景色
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
设置背景透明后,控件的重绘会触发父窗口的背景重绘,因此会出现闪烁。
这个优化起来会比较困难,其实你都设置为黑色背景也没什么问题吧,这样就不会触发二次重绘了。
这个优化起来会比较困难,其实你都设置为黑色背景也没什么问题吧,这样就不会触发二次重绘了。
追问
如果我把主对话框的背景设置为黑色的话菜单栏项目的一些对话框也会变成黑色,这样那些项目对话框里的文字就看不到了。
追答
可以在绘图区域再套一个静态框,背景黑色。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我有写博客,里面阐述了如何制作CStatic的自绘皮肤,希望可以给你些参考:
CStatic模仿IPhone泡泡:
http://blog.csdn.net/renstarone/article/details/11491195
CStatic模仿IPhone泡泡:
http://blog.csdn.net/renstarone/article/details/11491195
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
轻轻的飘过 飘过。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询