windows-nt/Source/XPSP1/NT/base/fs/utils/dfrg/inc/vapplication.hpp
2020-09-26 16:20:57 +08:00

210 lines
5.9 KiB
C++

#ifndef __VAPPLICATION_HPP
#define __VAPPLICATION_HPP
#ifndef VWCL_WRAP_WINDOWS_ONLY
#include "vPtrArray.hpp"
#endif
#include "vSimpleString.hpp"
// <VDOC<CLASS=VApplication><DESC=Encapsulation of startup code, window handling logic, and support for internationalization><FAMILY=VWCL Core><AUTHOR=Todd Osborne (todd.osborne@poboxes.com)>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