知识大全 关于如何换肤、子类化的解决方案

Posted 过程

篇首语:努力尽今夕,少年犹可夸。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 关于如何换肤、子类化的解决方案相关的知识,希望对你有一定的参考价值。

  关于如何换肤 子类化的解决方案                   

  对于应用程序的换肤及子类化 下面是我尝试过一些方法 以在CAboutDlg中子类化其中的Button为例           第一种 直接用现成的类           自己写一个类class CButtonXP : public CButton/* */          用MessageMap处理感兴趣的消息            用CButtonXP代替CButton来声明变量m_btn;           在void CAboutDlg:DoDataExchange(CDataExchange* pDX)中加上一句

  DDX_Control(pDX IDB_BUTTON m_edit);

  或者在 InitDialog() 中加上

  m_btn SubclassDlgItem(IDB_BUTTON this);

  这两种效果差不多的           第二种 在 Hook 中使用现成的类           自己写一个类 class CButtonXP : public CButton/* */          用 MessageMap 处理感兴趣的消息            使用 SetWindowsHookEx 安装一个钩子

  g_hWndProcHook = ::SetWindowsHookEx(WH_CALLWNDPROC WndProcHook NULL ::GetCurrentThreadId());

   在 WndProcHook 中处理窗口创建和销毁的消息

  LRESULT CALLBACK WndProcHook(int code WPARAM wParam LPARAM lParam) if (code == HC_ACTION) switch (((CWPSTRUCT*) lParam) >message) case WM_CREATE: BeginSubclassing(((CWPSTRUCT*) lParam) >hwnd); break; case WM_NCDESTROY: // TODO: clear subclass info EndSubclassing(((CWPSTRUCT*) lParam) >hwnd); break; default: break; return CallNextHookEx(g_hWndProcHook code wParam lParam);

在 BeginSubclassing 中用 GetClassName 得到类名 例如 "Button" 然后用 CButtonXP       类进行子类化

  CButtonXP pButton = new CButtonXP;VERIFY(pButton >SubclassWindow(hWnd));

  第三种 在Hook中使用窗口过程           自己写一个按钮的窗口过程

  WNDPROC oldProc;LRESULT CALLBACK ProcButton(HWND hWnd UINT uMsg WPARAM wParam LPARAM lParam) ASSERT(oldProc != ); if (oldProc == ) return TRUE; switch (uMsg) case WM_ERASEBKGND: break; // default: break; return CallWindowProc(oldProc hWnd uMsg wParam lParam);

同第二种      同第二种           在 BeginSubclassing 中得到类名后 用 SetWindowLong 的方式子类化

  oldProc = (WNDPROC) GetWindowLong(hWnd GWL_WNDPROC);SetWindowLong(hWnd GWL_WNDPROC (LONG) ProcButton);

第四种 不用 Hook          在一个对话框的 OnInitDialog 中枚举它的所有子窗体 例如用下面两句来实现

  hWnd=GetWindow(hDlg GW_CHILD); hWnd=GetWindow(hWnd GW_HWNDNEXT);

  对每个子窗体进行子类化处理 处理过程同第二种与第三种

第五种 如果是在XP下运行 可以使用manifest 也就是如下的一个XML文件      

  <?xml version=" " encoding="UTF " standalone="yes"?> <assembly xmlns="urn:schemas microsoft :asm v " manifestVersion=" "> <assemblyIdentity name=Microsoft Windows XXXX                   processorArchitecture="x "                   version=" "                   type=win /> <description>Windows Shell</description> <dependency> <dependentAssembly> <assemblyIdentity type=win                   name=Microsoft Windows Common Controls                   version=" "                   processorArchitecture="x "                   publicKeyToken=" b ccf df"                   language="*"/> </dependentAssembly> </dependency> </assembly>

  把它存为应用程序名       manifest 放到和应用程序对应的目录下 或者把它作为资源类型为 的资源编译进应用程序中 这样程序在XP下就自动拥有了XP的风格            第六种 使用第三方的库Skin++()实现换肤           第七种 用第三方应用程序给整个windows换肤(windowblinds)            以上七种方式各有优缺点 我在使用过程中也遇到不少问题 现在一一道来 希望和大家共同解决问题 先排除几种不准备深入探讨的方式 cha138/Article/program/c/201401/30250

相关参考

知识大全 爪哇语言单态创立性模式介绍(下)

  登记式单态类  登记式单态类是GoF为了克服饿汉式单态类及懒汉式式单态类均不可继承的缺点而设计的作者把他们的例子翻译为爪哇语言并将它自己实例化的方式从懒汉式改为饿汉式只是它的子类实例化的方式只能是

疤痕换肤技术

疤痕换肤技术是近期比较先进的一种疤痕整形技术,应用自体潜能细胞培植来消除疤痕的高新技术。疤痕换肤的医学目标是通过激活和调动自体潜能细胞,直接再生修复治疗疤痕组织,达到治疗和修复疤痕的目的。因其方法科学

疤痕换肤技术

疤痕换肤技术是近期比较先进的一种疤痕整形技术,应用自体潜能细胞培植来消除疤痕的高新技术。疤痕换肤的医学目标是通过激活和调动自体潜能细胞,直接再生修复治疗疤痕组织,达到治疗和修复疤痕的目的。因其方法科学

知识大全 给数据访问层添加参数化的方法

  给数据访问层添加参数化的方法  至此ProductsTableAdapter只有一个方法GetProducts()它返回数据库里的所有产品能够操作所有的产品当然有用但很多时候我们想要获取关于一个指

知识大全 电子类学生英文自我介绍

电子类学生英文自我介绍Goodmorning!Itisreallymyhonortohavethisopportunityforainterview,Ihopeicanmakeagoodperform

知识大全 泛型类型的子类及通配符的使用

  本文讲述以下几个方面的内容试图说明泛型类型的子类及通配符的使用  ()   子类及替换原则  ()   使用extends关键字的通配符

知识大全 Java Thread类如何在子类中实现run

JavaThread类如何在子类中实现run  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Ja

知识大全 关于人生感悟的美文

关于人生感悟的美文车过人往,穿流不息,不段的忙碌,沉迷在欲望的旋涡,这是现代人的生活。那样匆忙,看似那样繁华,却那样的沉重。不同的人却同样为各种生活各种理想打拼,希望在这个依然金钱化的社会拥有属于自己

有什么药可以治疗痤疮

有什么药可以治疗痤疮?外用药物:对于轻度的粉刺、丘疹脓疱,可以选择粉刺挤挑,配合中药面膜进行治疗,每周一次,也能收到良好的效果化学换肤。有什么药可以治疗痤疮?对于毛孔不通畅的患者,可以采用果酸换肤使其

有什么药可以治疗痤疮

有什么药可以治疗痤疮?外用药物:对于轻度的粉刺、丘疹脓疱,可以选择粉刺挤挑,配合中药面膜进行治疗,每周一次,也能收到良好的效果化学换肤。有什么药可以治疗痤疮?对于毛孔不通畅的患者,可以采用果酸换肤使其