WEB开发网
开发学院软件开发VC Visual C++实现定制标题栏 阅读

Visual C++实现定制标题栏

 2008-11-14 19:33:30 来源:WEB开发网   
核心提示:要想用VC编写出一个漂亮的界面通常是比较费时的,主要原因有两个,Visual C++实现定制标题栏,一是VC中自带的组件少而不亮,二是无法进行可视化设计,总会先调用 CallWndProc;如果设置为 WH_CALLWNDPROCRET 则顺序刚好相反g_hCallWndProc为一内存共享变量,其它定义的方法如下所示

要想用VC编写出一个漂亮的界面通常是比较费时的,主要原因有两个,一是VC中自带的组件少而不亮,二是无法进行可视化设计。不过,这些都只是针对常用的方法罢了,如果你采用子类化,钩子等技术,可以完全改变这处局面,甚至比Delphi等RAD工具还要快.本文中就将介绍如何编写一个DLL,如何来轻松的定制标题栏。

为了使每个窗体的标题栏都能定制,并且不用为每一个窗体类编码,所以本方法采用钩子技术,其核心思想是监控 Windows 消息,处理需要重缓标题的消息,以达到定制标题栏的思想。

本文件介绍的方法将在应用程序中安装 WH_CALLWNDPROC 钩子,具体的代码如下所示:

在应用程序启动时安装钩子的代码:

extern "C" BOOL __declspec(dllexport) InstallCallWndHook()
{
 g_hCallWndProc = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, AfxGetInstanceHandle(),GetCurrentThreadId());
 if (NULL == g_hCallWndProc)
  return FALSE;
 else
  return TRUE;
}

InstallCallWndHook() 函数定义为出口函数,在需要定制标题的程序中将调用它,由于安装的是 WH_CALLWNDPROC 钩子,所以在应用程序调用自己的窗体过程之前,总会先调用 CallWndProc;如果设置为 WH_CALLWNDPROCRET 则顺序刚好相反

g_hCallWndProc为一内存共享变量,其它定义的方法如下所示:

#pragma data_seg("Shared")
static HHOOK g_hCallWndProc;
#pragma data_seg()

当然你也可以定义为其它形式,比如直接采用共享内存API创建方式。

在应用程序退出时安装卸载钩子的代码:

extern "C" void __declspec(dllexport) UnInstallCallWndHook()
{
 if (g_hCallWndProc != NULL)
 {
  UnhookWindowsHookEx(g_hCallWndProc);
  g_hCallWndProc = NULL;
 }
}

1 2 3  下一页

Tags:Visual 实现 定制

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