#ifndef __VAPPLICATION_HPP #define __VAPPLICATION_HPP #ifndef VWCL_WRAP_WINDOWS_ONLY #include "vPtrArray.hpp" #endif #include "vSimpleString.hpp" // VDOC> class VApplication { public: VApplication() { // Initialize m_hInstance = NULL; m_hResource = NULL; #ifdef VWCL_INIT_OLE m_hrOleInitialize = E_UNEXPECTED; #endif #ifndef _CONSOLE #ifndef VWCL_WRAP_WINDOWS_ONLY m_nCommandShow = 0; m_nLastKnownMapIndex = -1; ZeroMemory(&m_CurrentMessage, sizeof(m_CurrentMessage)); #endif m_hIcon = NULL; m_pMainWindow = NULL; #endif } virtual ~VApplication() { // Verify all allocated maps are gone #ifndef _CONSOLE #ifndef VWCL_WRAP_WINDOWS_ONLY while ( m_listWindowMaps.Size() ) FreeWindowMap((LPVWCL_WINDOW_MAP)m_listWindowMaps[0]); #endif #endif // Free OLE #ifdef VWCL_INIT_OLE if ( SUCCEEDED(m_hrOleInitialize) ) OleUninitialize(); #endif } #ifndef _CONSOLE #ifndef VWCL_WRAP_WINDOWS_ONLY // Allocate and initialize a window map object and add to list of maps LPVWCL_WINDOW_MAP AllocWindowMap(VWindow* pWindow, HWND hWnd = NULL); #endif #endif // Get / Set the title for this application LPCTSTR AppTitle(LPCTSTR lpszAppTitle) { m_strAppTitle.String(lpszAppTitle); return m_strAppTitle.String(); } LPCTSTR AppTitle() { return m_strAppTitle.String(); } // Get / Set the current open file LPCTSTR CurrentFile() { return m_strCurrentFile.String(); } LPCTSTR CurrentFile(LPCTSTR lpszFileName, BOOL bUpdateCaption = TRUE); #ifndef _CONSOLE #ifndef VWCL_WRAP_WINDOWS_ONLY // Setup mappings of VWindow object to Windows window handle, and subclass non-VWCL class windows BOOL Attach(VWindow* pWindow, HWND hWnd); // Remove any subclassing from the VWindow object, but do not destroy the window. // This function has no effect on VWCL registered and instantiated windows void Detach(VWindow* pWindow); // Free a window map object and remove from list of maps void FreeWindowMap(LPVWCL_WINDOW_MAP lpMap); #endif // Get command show param (the ShowWindow() API SW_xxx Constant) int GetCommandShow() { return m_nCommandShow; } #ifndef VWCL_WRAP_WINDOWS_ONLY // Get the message currently being processed LPMSG GetCurrentMessage() { return &m_CurrentMessage; } #endif #endif // Get instance handle HINSTANCE GetInstanceHandle() { assert(m_hInstance); return m_hInstance; } #ifndef _CONSOLE #ifndef VWCL_WRAP_WINDOWS_ONLY // Return the global WindowProc() procedure used by all VWCL windows WNDPROC GetWindowProc() { return WindowProc; } #endif // Get / Set icon HICON Icon() { return m_hIcon; } HICON Icon(HICON hIcon) { m_hIcon = hIcon; return m_hIcon; } #endif // Initialize class library, application startup, and register window classes // The icon and menu names will be used only for main window objects. You can optionally // provide a background color to use for registered window classes. One function is provided // for when windowing applications are being built, and others for when a console app is #ifndef _CONSOLE BOOL Initialize(HINSTANCE hInstance, int nCommandShow, UINT nIDMenu, UINT nIDIcon, HBRUSH hBackgroundBrush = (HBRUSH)(COLOR_WINDOW + 1)); #else BOOL Initialize(HINSTANCE hInstance) { assert(hInstance); // Global application object should be uninitialized, you are walking on it! assert(m_hInstance == NULL); m_hInstance = hInstance; // Initialize Component Object Model #ifdef VWCL_INIT_OLE m_hrOleInitialize = OleInitialize(NULL); if ( FAILED(m_hrOleInitialize) ) return FALSE; #endif return TRUE; } #endif // Returns TRUE if class library has been initialized (Instance handle set) BOOL IsInitialized() { return (m_hInstance) ? TRUE : FALSE; } #ifndef _CONSOLE // Get / Set main window pointer VWindow* MainWindow() { return m_pMainWindow; } VWindow* MainWindow(VWindow* pWindow) { m_pMainWindow = pWindow; return m_pMainWindow; } #endif // / Get / Set the resource handle. By default this is the same as instance HINSTANCE ResourceHandle() { assert(m_hResource); return m_hResource; } HINSTANCE ResourceHandle(HINSTANCE hResource) { assert(hResource); m_hResource = hResource; return m_hResource; } #ifndef _CONSOLE #ifndef VWCL_WRAP_WINDOWS_ONLY // Create a window using specified CREATESTRUCT and call Attach() // to attach it to a VWindow object, and add to map. All memory // allocations (AllocWindowMap) will be done for calling code BOOL VCreateWindow(VWindow* pWindow, LPCREATESTRUCT lpCreateStruct, BOOL bDontCallPostCreateWindow = FALSE); // Get a VWindow pointer when a HWND is known. Returns NULL on failure VWindow* VWindowFromHandle(HWND hWnd); #endif #endif protected: #ifndef _CONSOLE #ifndef VWCL_WRAP_WINDOWS_ONLY // Resolves hWnd to VWindow objects and dispatches message LRESULT HandleMessage(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam); // Shared window procedure by all VWindow and derived objects. This function // simply resolves the global application object and calls VWindow object to handle message static LRESULT CALLBACK WindowProc(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam); #endif #endif private: // Embedded Members HINSTANCE m_hInstance; HINSTANCE m_hResource; VSimpleString m_strAppTitle; VSimpleString m_strCurrentFile; #ifdef VWCL_INIT_OLE HRESULT m_hrOleInitialize; #endif #ifndef _CONSOLE HICON m_hIcon; int m_nCommandShow; VWindow* m_pMainWindow; #ifndef VWCL_WRAP_WINDOWS_ONLY MSG m_CurrentMessage; VPtrArray m_listWindowMaps; int m_nLastKnownMapIndex; #endif #endif }; #endif // __VAPPLICATION_HPP