WEB开发网
开发学院软件开发VC 利用钩子实现菜单阴影效果 阅读

利用钩子实现菜单阴影效果

 2008-01-19 20:25:26 来源:WEB开发网   
核心提示:下面是处理清理工作了: void CMenuWndHook::OnNcDestroy(){delete this; // 错误!}void CMenuWndHook::OnShowWindow(BOOL bShow){if (!bShow){delete this; // 错误2!}}... ..., 好狠哦! 嘿嘿!

下面是处理清理工作了: void CMenuWndHook::OnNcDestroy()
{
  delete this; // 错误!
}
void CMenuWndHook::OnShowWindow(BOOL bShow)
{
  if (!bShow)
  {
    delete this; // 错误2!
  }
}
... ..., 好狠哦! 嘿嘿!

扫尾工作还由是~CMenuWndHook它老人家做, 在delete自己的时候会自动调用它的: CMenuWndHook::~CMenuWndHook()
{
  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();
  }
}
这个类基本上写完了,如果我还有什么没讲清的地方,你就再去看看我的源代码吧。我们可以在APP类里面调用它: ............
#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的理由之一。呵呵。

上一页  1 2 3 4 5 

Tags:利用 钩子 实现

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