利用钩子实现菜单阴影效果
2008-01-19 20:25:26 来源:WEB开发网下面是处理清理工作了: void CMenuWndHook::OnNcDestroy()
... ..., 好狠哦! 嘿嘿!
{
delete this; // 错误!
}
void CMenuWndHook::OnShowWindow(BOOL bShow)
{
if (!bShow)
{
delete this; // 错误2!
}
}
扫尾工作还由是~CMenuWndHook它老人家做, 在delete自己的时候会自动调用它的: CMenuWndHook::~CMenuWndHook()
这个类基本上写完了,如果我还有什么没讲清的地方,你就再去看看我的源代码吧。我们可以在APP类里面调用它:
{
WNDPROC oldWndProc = (WNDPROC)::GetProp(m_hWnd, CoolMenu_oldProc);
if (oldWndProc != NULL)
{
::SetWindowLong(m_hWnd, GWL_WNDPROC,(DWORD)(ULONG)oldWndProc);
::RemoveProp(m_hWnd, CoolMenu_oldProc);
}
m_WndMenuMap.RemoveKey(m_hWnd);
if (m_bmpBack.m_hObject != NULL)
{
m_bmpBack.DeleteObject();
}
}............
使用这个类,再加上一个自绘菜单类,你一定可以做出一个非常的精美的菜单来。看看我做的最后成品的截图:
#include "MenuWndHook.h"
...........
BOOL CNewmenuApp::InitInstance()
{
.......
CMenuWndHook::InstallHook();
}
int CNewmenuApp::ExitInstance()
{
CMenuWndHook::UnInstallHook();
return CWinApp::ExitInstance();
}
我时常听见人说 Delhpi 程序界面比VC程序的界面如何如何好? 如果是说默认的那些控件的外观,VC确实不如Delphi,(微软也真小气,自已产品的界面做得那么"华丽"(像Office XP/2003, Windows XP,VS.NET...), 而给我们用的这些控件的外观却这么"老土")...总之真正的精美的有个性的界面是大家自已做出来的,这正是我钟爱VC的理由之一。呵呵。
更多精彩
赞助商链接