关于用updatedata()重绘对话框

backwinds 2010-04-20 03:43:47
//定义颜色主题
void CCheckViewDlg::GetColorTheme(const int& m_themenum)
{
switch (m_themenum)
{
case 0:
m_mainbgcolor=RGB(0,0,0);
m_staticcolor=RGB(51,143,221);
m_btncolor=RGB(51,143,221);
m_selectbtncolor=RGB(97,61,212);
m_textcolor=RGB(255,255,255);
break;
case 1:
m_mainbgcolor=RGB(235,235,235);
m_staticcolor=RGB(67,110,238);
m_btncolor=RGB(67,110,238);
m_selectbtncolor=RGB(69,139,116);
m_textcolor=RGB(255,255,255);
break;
case 2:
m_mainbgcolor=RGB(235,235,235);
m_staticcolor=RGB(221,160,221);
m_btncolor=RGB(216,191,216);
m_selectbtncolor=RGB(217,112,214);
m_textcolor=RGB(255,255,255);
break;
}

}

控件都是自制的,以上是我预设的颜色主题,想通过themenun的变化来改变对话框的颜色主题,网上查到用updatedata()函数可以重绘对话框,但是我找了半天也不知道该如何用updatedata()函数,特来请教各位大侠。

//这是初始化对话框函数中初始化实例
m_thirdLevel2.SetSpeTextCaption( TEXT("2400") );
m_thirdLevel2.SetSpeBackgroundColor( m_staticcolor );
m_thirdLevel2.SetSpeTextColor( m_textcolor );
m_thirdLevel2.SetSpeTextFontPointSize( 150 );
最好给出个实例
...全文
215 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
backwinds 2010-04-21
  • 打赏
  • 举报
回复
非常感谢各位的帮助,那个颜色重绘已基本上完成,原因是我的程序ONpaint函数是在自制的控件类中定义,所以不能直接重绘,导致无效果产生。现在不满意的地方就是重绘时控件的变化,不是一下子完成,得按顺序来,不怎么美观,怎么样可以做到重绘时在肉眼范围内分辨不出来啊?
xueer8835 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liumenghappy 的回复:]
引用 1 楼 kier2 的回复:

updatedata()是用来刷新空间对应的变量显示的,不是重绘对话框,可以用invalidate()试试

UpdateData(true);//用于将屏幕上控件中的数据交换到变量中。
UpdateData(false);//用于将数据在屏幕中对应控件中显示出来。
重绘函数:
Invalidate(false)不擦除背景,直接画(详细程序-图形……
[/Quote]

留个记号
backwinds 2010-04-21
  • 打赏
  • 举报
回复
你这么说,我只是通过m_themenum的变值把RGB的值改变了下,并没有相应的处理,我应该怎么映射值的变化来达到重绘的效果呢? 在初始化的时候我的m_themenum默认设置为0,通过控件修改后,值是变了,但是应该怎么处理?可否给点建议
zxdlms 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 backwinds 的回复:]
引用 10 楼 zxdlms 的回复:
GetColorTheme(m_themenum);
Invalidate();
GetColorTheme后这些设置的值传给谁用啊,在OnPaint消息里面是怎么处理的?


GetColorTheme第一次调用时在初始化中调用,那个可以执行。
但是在修改过m_themenum后确实没有进行值的传递,我以为重绘可以。
请问我要怎么传递值给O……
[/Quote]
不是要传值给OnPaint,而是你在重绘的时候是否对你那些参数的改变做了相应的处理。
向立天 2010-04-20
  • 打赏
  • 举报
回复
Invalidate就是激活OnPaint的
backwinds 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zxdlms 的回复:]
GetColorTheme(m_themenum);
Invalidate();
GetColorTheme后这些设置的值传给谁用啊,在OnPaint消息里面是怎么处理的?
[/Quote]

GetColorTheme第一次调用时在初始化中调用,那个可以执行。
但是在修改过m_themenum后确实没有进行值的传递,我以为重绘可以。
请问我要怎么传递值给OnPaint?
ILoveThisSite 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liumenghappy 的回复:]
引用 1 楼 kier2 的回复:

updatedata()是用来刷新空间对应的变量显示的,不是重绘对话框,可以用invalidate()试试

UpdateData(true);//用于将屏幕上控件中的数据交换到变量中。
UpdateData(false);//用于将数据在屏幕中对应控件中显示出来。
重绘函数:
Invalidate(false)不擦除背景,直接画(详细程序-图形……
[/Quote]

用Invalidate就行了
zxdlms 2010-04-20
  • 打赏
  • 举报
回复
GetColorTheme(m_themenum);
Invalidate();

GetColorTheme后这些设置的值传给谁用啊,在OnPaint消息里面是怎么处理的?
backwinds 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xianglitian 的回复:]
你初始的主题能显示出来么?
更改主题后最小化窗口在最大话主题能换过来么?
[/Quote]

我是开发wince的应用程序,直接设置的是全屏的,没有最大化最小化框
backwinds 2010-04-20
  • 打赏
  • 举报
回复
eleven 部长 :
case IDS_UT_BASE_MATERIAL:
m_themenum++;
GetColorTheme(m_themenum);
Invalidate();
break;
这个是我的控制函数,程序的开发环境是EVC,我现在感觉只是获取到这些颜色的值,但是并没有对对话框进行重绘操作。如果在不改变m_themenum值已经变化的情况下,再初始化下对话框是不是可以实现?请您指教下,谢谢
向立天 2010-04-20
  • 打赏
  • 举报
回复
你初始的主题能显示出来么?
更改主题后最小化窗口在最大话主题能换过来么?
Eleven 2010-04-20
  • 打赏
  • 举报
回复
Invaldiate();
backwinds 2010-04-20
  • 打赏
  • 举报
回复
invalidate()添加了貌似不管用,我是添加在getcolortheme()函数的最后面得,不知道位置对不!
backwinds 2010-04-20
  • 打赏
  • 举报
回复
好的,谢谢各位帮忙,我马上去试试。
liumenghappy 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kier2 的回复:]

updatedata()是用来刷新空间对应的变量显示的,不是重绘对话框,可以用invalidate()试试
[/Quote]
UpdateData(true);//用于将屏幕上控件中的数据交换到变量中。
UpdateData(false);//用于将数据在屏幕中对应控件中显示出来。
重绘函数:
Invalidate(false)不擦除背景,直接画(详细程序-图形仿真curve,滑块控件的使用)
Invalidate(true)擦除背景(一般用这个)
InvalidateRect只是增加重绘区域,在下次WM_PAINT的时候才生效
UpdateWindow()只向窗体发送WM_PAINT消息,在发送之前判断GetUpdateRect(hWnd,NULL,TRUE)看有无可绘制的客户区域,如果没有,则不发送WM_PAINT
z8y8x 2010-04-20
  • 打赏
  • 举报
回复
updatedata是读/写变量的吧,得绘的话有很多的,InvalidateRect/Invalidate/UpdateWindow 等等,可以查下MSDN
kier2 2010-04-20
  • 打赏
  • 举报
回复
updatedata()是用来刷新空间对应的变量显示的,不是重绘对话框,可以用invalidate()试试

15,979

社区成员

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

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