C++ 切换主题 与字体

showjun 2009-04-22 03:40:00
是这样的,我是否可以对当前系统的主题和字体进行备份后在还原?因为涉及到应用当前设置,所以光光修改注册表是没有用的。

桌面背景是可以更改的比如:http://www.xiaozhou.net/ReadNews.asp?NewsID=851
...全文
152 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
showjun 2009-04-24
  • 打赏
  • 举报
回复
这个问题真的很复杂, 有版主能出来表个态么。。。:)
showjun 2009-04-23
  • 打赏
  • 举报
回复
目前有两种思路,
1、是否能有API函数能直接使用 C:\WINDOWS\Resources\Themes\Luna.theme
并且能应用上。
因为如果需要还原,我们可以将之前的注册表记录信息 提取出来。就知道改用哪套theme

2、下面几个API 函数看起来是可以使用的,但是。。。本人初学C++,在写了些简单测试代码发现行不通呢。
OpenThemeFile()
ApplyTheme()
SetWindowTheme()

if (SUCCEEDED (OpenThemeFile (themeFileName, colorName, sizeName,
&hTheme, 0)))
{
ApplyTheme (hTheme, b, NULL);
CloseThemeFile (hTheme);
}
else
{
ApplyTheme (NULL, b, NULL);
}


是否有高人能够帮忙,分不够在加~:)
liliangbao 2009-04-22
  • 打赏
  • 举报
回复
帮顶~
showjun 2009-04-22
  • 打赏
  • 举报
回复
上面的做法的确也调试成功了,但是我们需要兼容多个操作系统,多种语言,那这种方式就没有任何意义。。
希望能有朋友能帮忙给出比较好的方案,谢谢!
showjun 2009-04-22
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20050310/10/3839216.html
有人可以做到呢,不过是window 2000下,我们在XP,和vista 及 window7 上,好像调试都不成功,
这个方法如下:

利用SendMessage,在2000中测试成功,但只是一个原理
// TODO: Add your control notification handler code here
UINT k=WinExec("rundll32.exe shell32.dll,Control_RunDLL desk.cpl",SW_SHOW);
if(k<32)
{
CString x;
x.Format("%d",k);
MessageBox(x); // 要在error后返回,下同
}
HWND wd=::FindWindow(NULL,"显示 属性");
if (wd==NULL)
MessageBox("Error1");
::ShowWindow(wd,SW_HIDE);

HWND wtd=FindWindowEx(wd,NULL,"SysTabControl32",NULL);
if (wtd==NULL)
MessageBox("Error2");

TabCtrl_SetCurFocus(wtd,2);

HWND wd1=FindWindowEx(wd,NULL,NULL,"外观");
if (wd1==NULL)
MessageBox("Error3");
HWND cb1=FindWindowEx(wd1,NULL,"ComboBox",NULL);
if (cb1==NULL)
MessageBox("Error4");
::SendMessage(cb1,CB_SELECTSTRING,-1,(long)"淡绿色");
long id=::GetDlgCtrlID(cb1);
::SendMessage(wd1,WM_COMMAND, MAKELONG(id,CBN_SELCHANGE),(long)cb1);
HWND cb2=FindWindowEx(wd1,cb1,"ComboBox",NULL);
if (cb2==NULL)
MessageBox("Error5");

//同上可在这修改项目
// 或其它属性
HWND bb1=FindWindowEx(wd,NULL,NULL,"确定");
if (bb1==NULL)
MessageBox("Error6");
id=::GetDlgCtrlID(bb1);
::SendMessage(wd,WM_COMMAND, MAKELONG(id,BN_CLICKED),(long)bb1);
mengde007 2009-04-22
  • 打赏
  • 举报
回复
路过,帮顶;

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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