MultiLineCaptionEx.cpp
上传用户:kssdz899
上传日期:2007-01-08
资源大小:79k
文件大小:2k
源码类别:

钩子与API截获

开发平台:

Visual C++

  1. ////////////////////////////
  2. // An extended multi-line caption class with fixes for the Windows 95/NT caption
  3. // overwrite 'feature' that causes a normal window caption to be drawn
  4. // when non-client area mouse activity occurs after the system menu has been 
  5. // displayed.
  6. //
  7. // Author: Dave Lorde (dlorde@cix.compulink.co.uk)
  8. //
  9. //          Copyright January 2000
  10. //
  11. #include "StdAfx.h"
  12. #include "MultiLineCaptionEx.h"
  13. #include "SuppressStyle.h"
  14. #ifdef _DEBUG
  15. #define new DEBUG_NEW
  16. #undef THIS_FILE
  17. static char THIS_FILE[] = __FILE__;
  18. #endif
  19. IMPLEMENT_DYNAMIC(CMultiLineCaptionEx, CMultiLineCaption); 
  20. namespace {
  21. const int CaptionMouseClick = 0xF012;
  22. }
  23. CMultiLineCaptionEx::CMultiLineCaptionEx(int maxLines)
  24. :CMultiLineCaption(maxLines)
  25. {}
  26. LRESULT CMultiLineCaptionEx::WindowProc(UINT msg, WPARAM wp, LPARAM lp)
  27. {
  28. switch (msg) 
  29. {
  30. case WM_SETCURSOR:
  31. return OnSetCursor( (HWND)wp, LOWORD(lp), HIWORD(lp) );
  32. case WM_SYSCOMMAND:
  33. OnSysCommand(wp, lp );
  34. return 0;
  35. case WM_SIZE:
  36. OnSize((UINT)wp, LOWORD(lp), HIWORD(lp));
  37. return 0;
  38. case WM_INITMENUPOPUP:
  39. OnInitMenuPopup( CMenu::FromHandle((HMENU)wp), LOWORD(lp), HIWORD(lp));
  40. return 0;
  41. }
  42. // I don't handle it: pass along
  43. return CMultiLineCaption::WindowProc(msg, wp, lp);
  44. }
  45. void CMultiLineCaptionEx::OnSysCommand(UINT nID, LPARAM lp)
  46. {
  47. // I don't know why, but clicking on the caption triggers a SysCommand
  48. // with ID 0xf12. Unless the caption is painted before handling it,
  49. // the nasty caption line shows
  50. if (nID == CaptionMouseClick)
  51. PaintCaption();
  52. Default();
  53. }
  54. BOOL CMultiLineCaptionEx::OnSetCursor( HWND hWnd, UINT nHitTest, UINT message )
  55. {
  56. LRESULT res;
  57. {
  58. SuppressStyle ss(hWnd, WS_VISIBLE);
  59. res = Default();
  60. if (nHitTest != HTHSCROLL && nHitTest != HTVSCROLL && nHitTest != HTSYSMENU &&
  61.   nHitTest != HTTRANSPARENT  && nHitTest != HTNOWHERE && nHitTest != HTCLIENT)
  62. {
  63. PaintCaption();
  64. }
  65. }
  66. return res;
  67. }
  68. void CMultiLineCaptionEx::OnSize(UINT nType, int cx, int cy)
  69. {
  70. SuppressStyle ss(m_pWndHooked->m_hWnd, WS_VISIBLE);
  71. Default();
  72. PaintCaption();
  73. }
  74. void CMultiLineCaptionEx::OnInitMenuPopup(CMenu* pMenu, UINT nIndex, BOOL bSysMenu)
  75. {
  76. SuppressStyle ss(m_pWndHooked->m_hWnd, WS_VISIBLE);
  77. Default();
  78. PaintCaption();
  79. }