HiddenWindow.cpp
上传用户:glass0516
上传日期:2010-01-11
资源大小:104k
文件大小:4k
源码类别:

传真(Fax)编程

开发平台:

Visual C++

  1. /*****************************************************************************
  2. * RelayFax Open Source Project
  3. * Copyright 1996-2004 Alt-N Technologies, Ltd.
  4. * All rights reserved.
  5. *
  6. * Redistribution and use in source and binary forms, with or without
  7. * modification, are permitted only as authorized by the RelayFax Open 
  8. * Source License.  A copy of this license is available in file LICENSE 
  9. * in the top-level directory of the distribution.
  10. *
  11. * RelayFax is a registered trademark of Alt-N Technologies, Ltd.
  12. *
  13. * Individual files and/or contributed packages may be copyright by
  14. * other parties and subject to additional restrictions.
  15. *****************************************************************************/
  16. #include "stdafx.h"
  17. #include "HiddenWindow.h"
  18. #include "excepthandler.h"
  19. ATOM CHiddenWindow::s_WindowClassAtom = 0;
  20. char* CHiddenWindow::s_WindowClass = "RelayFax Hidden Window";
  21. HINSTANCE CHiddenWindow::s_hInstance = NULL;
  22. //////////////////////////////////////////////////////////////////////
  23. // Construction/Destruction
  24. //////////////////////////////////////////////////////////////////////
  25. CHiddenWindow::CHiddenWindow()
  26. {
  27. }
  28. CHiddenWindow::~CHiddenWindow()
  29. {
  30. }
  31. //////////////////////////////////////////////////////////////////////
  32. // RegisterWindowClass
  33. //////////////////////////////////////////////////////////////////////
  34. void CHiddenWindow::RegisterWindowClass( HINSTANCE hInstance )
  35. {
  36. WNDCLASS   wc;
  37. ZeroMemory( &wc, sizeof(wc) );
  38. wc.hCursor        = NULL;    // this window never shown, so no
  39. wc.hIcon          = NULL;    // cursor or icon are necessary
  40. wc.lpszMenuName   = NULL;
  41. wc.lpszClassName  = s_WindowClass;
  42. wc.hbrBackground  = (HBRUSH)(COLOR_WINDOW + 1);
  43. wc.hInstance      = hInstance;
  44. wc.style          = CS_GLOBALCLASS;
  45. wc.lpfnWndProc    = WndProc;
  46. wc.cbWndExtra     = sizeof(CHiddenWindow*);
  47. wc.cbClsExtra     = 0;
  48. s_WindowClassAtom = RegisterClass( &wc );
  49. s_hInstance = hInstance;
  50. }
  51. //////////////////////////////////////////////////////////////////////
  52. // UnRegisterWindowClass
  53. //////////////////////////////////////////////////////////////////////
  54. void CHiddenWindow::UnRegisterWindowClass( void )
  55. {
  56. UnregisterClass( s_WindowClass, s_hInstance );
  57. }
  58. //////////////////////////////////////////////////////////////////////
  59. // Hidden Window Procedure
  60. //////////////////////////////////////////////////////////////////////
  61. LRESULT CALLBACK CHiddenWindow::WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
  62. {
  63. CHiddenWindow* pWnd = (CHiddenWindow*) GetWindowLong( hwnd, 0 );
  64. // char szMsg[80];
  65. // wsprintf( szMsg, "CHiddenWindow::WndProc: 0x%xn", msg ); 
  66. // OutputDebugString( szMsg );
  67. // __try
  68. {
  69. if( pWnd )
  70. {
  71. return pWnd->HandleMsg( msg, wParam, lParam );
  72. }
  73. }
  74. // __except ( ExceptionHandler( GetExceptionInformation(), "Any", "HandleMsg" ) )
  75. {
  76. //LOG( LOG_SYSTEM, "%s: Unhandled exception in OnStartup()", m_sThreadName.c_str() );
  77. }
  78. return TRUE;
  79. }
  80. //////////////////////////////////////////////////////////////////////
  81. // InitWindow
  82. //////////////////////////////////////////////////////////////////////
  83. void CHiddenWindow::InitWindow(void)
  84. {
  85. m_hwnd = CreateWindow( s_WindowClass, s_WindowClass, 0, 
  86.    CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 
  87.                    NULL, NULL, s_hInstance, NULL );
  88. DWORD dwError = GetLastError();
  89. SetWindowLong( m_hwnd, 0, (LONG)this ); 
  90. }
  91. //////////////////////////////////////////////////////////////////////
  92. // ShutdownWindow
  93. //////////////////////////////////////////////////////////////////////
  94. void CHiddenWindow::ShutdownWindow(void)
  95. {
  96. DestroyWindow( m_hwnd );
  97. }
  98. //////////////////////////////////////////////////////////////////////
  99. // HandleMsg
  100. //////////////////////////////////////////////////////////////////////
  101. LRESULT CHiddenWindow::HandleMsg( UINT msg, WPARAM wParam, LPARAM lParam )
  102. {
  103. return DefWindowProc( m_hwnd, msg, wParam, lParam );
  104. }
  105. void CHiddenWindow::PostMessage( UINT msg, WPARAM wParam, LPARAM lParam )
  106. {
  107. ::PostMessage( m_hwnd, msg, wParam, lParam );
  108. }