博客日历
2025年06月 | ||||||
一 | 二 | 三 | 四 | 五 | 六 | 七 |
26 | 27 | 28 | 29 | 30 | 31 | 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
存档
2025年03月 2024年
03月 04月 05月 2021年
01月 02月 11月 12月 2020年
02月 03月 04月 05月 06月 07月
09月 2018年
09月 2017年
01月 02月 07月 2016年
01月 04月 07月 08月 11月 12月
2015年
01月 02月 03月 05月 09月 10月
11月 2014年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2013年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2012年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2011年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2010年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2009年
03月 04月 05月 06月 07月 08月
09月 10月 11月 12月
MFC学习笔记之12:用窗口过程WH_CALLWNDPROC钩子+子类化实现皮肤功能
实现方法:
1.定义自己的控件类,比如CButtonEx:public CButton,实现自绘。
2.安装WH_CALLWNDPROC钩子
a.定义HHOOK全局变量
HHOOK g_WndProcHook=NULL;
b.在CXXAPP ::InitInstance()中安装钩子
g_WndProcHook=SetWindowsHookEx(
WH_CALLWNDPROC,
(HOOKPROC)CallWndProc,
NULL,
GetCurrentThreadId());
c.在CXXAPP::ExitInstance()中删除钩子
UnhookWindowsHookEx(g_WndProcHook);
d.在CallWndProc中子类化控件
LRESULT CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if (HC_ACTION==nCode)
{
CWPSTRUCT* lpCWPSTRUCT=(CWPSTRUCT*) lParam;
HWND hWnd=lpCWPSTRUCT->hwnd;
char szClassName[512];
::GetClassName(hWnd,szClassName,512);
switch (lpCWPSTRUCT->message)
{
case WM_Create:
{
if (strcmp(szClassName,"Button")==0)
{
//在这里开始子类化
CButtonEx*pBtn=newCButtonEx();
pBtn->SubclassWindow(hWnd);
}
break;
}
case WM_NCDESTROY:
{
//取消子类化
//pBtn->UnsubclassWindow();
//pBtn->UnsubclassWindow();
break;
}
default:
break;
}
}
return CallNextHookEx(g_WndProcHook,nCode,wParam,lParam);
}
上一篇: 2009年07月22日日全食观测全攻略
下一篇: CListCtrl使用技巧[转]
分类:Win32/C++ 查看次数:11291 发布时间:2009/7/16 19:45:02