WEB开发网
开发学院软件开发VC 关于如何换肤、子类化的解决方案 阅读

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

 2010-06-23 20:40:47 来源:WEB开发网   
核心提示:第三种 在Hook中使用窗口过程1、自己写一个按钮的窗口过程WNDPROC oldProc;LRESULT CALLBACK ProcButton(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ ASSERT(oldProc != 0); if (oldProc

第三种 在Hook中使用窗口过程

1、自己写一个按钮的窗口过程

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

   return CallWindowProc(oldProc, hWnd, uMsg, wParam, lParam);
}

2、同第二种

3、同第二种

4、在 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="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="Microsoft.Windows.XXXX" processorArchitecture="x86" version="5.1.0.0" type="win32"/>
<description>Windows Shell</description>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0"
processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly>
</dependency>
</assembly>

把它存为应用程序名 .manifest,放到和应用程序对应的目录下,或者把它作为资源类型为24的资源编译进应用程序中。这样程序在XP下就自动拥有了XP的风格。

上一页  1 2 3 4 5 6  下一页

Tags:关于 如何 子类

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接