home *** CD-ROM | disk | FTP | other *** search
- // ************************************************************************
- //
- // Microsoft Developer Support
- // Copyright (c) 1992, 1993 Microsoft Corporation
- //
- // **************************************************************************
- // MODULE : MdiPad.C
- // PURPOSE : A Small Win16/Win32 MdiPad Application Template
- // FUNCTIONS :
- // WinMain() - initializes the main window, dispatches messages
- // MainWndProc() - processes messages
- // AboutDlgProc() - processes messages for "About" dialog box
- // ErrorBox() - displays and error box when called
- // **************************************************************************
- #ifndef WIN32S
- #define UNICODE // make the application unicode complient
- #endif
- #define STRICT // strict type checking enabled
- #include <Windows.H> // required for all Windows applications
- #include <Time.H>
-
- #include "Port.H" // macros for 16/32 bit application creation
- #include "MdiPad.H" // specific to this program
- #include "ToolBar.H"
-
- #ifdef DEBUG
- #define DebugOut( str ) OutputDebugString (__FILE__ ": " str "\n")
- #else
- #define DebugOut( str )
- #endif
-
- //-- global data
- HWND hWndMain; // Main window handle
- HWND hWndMdiClient; // MDI client windows handle
- HINSTANCE hInstance; // current instance
- TCHAR szAppName[32]; // name of the application
- TCHAR szShortAppName[16]; // short name of the application
- UINT cMdiChild = 0; // Count of number of MDI children created
-
- LPCTSTR lpszMdiChildClassName = (LPCTSTR) "MdiChildClass";
-
- HWND hWndMenuField, hWndTimeField, hWndOvrField, hWndBogusField, hWndCapsField, hWndNumField;
- HWND hWndLabel1, hWndCombo1, hWndCombo2;
- HWND hWndButton1, hWndButton2, hWndButton3, hWndButton4;
- HWND hWndButton5, hWndButton6, hWndButton7;
-
- HMENU hSysMenuMain = (HMENU) NULL;
- HMENU hFileMenu = (HMENU) NULL;
- HMENU hHelpMenu = (HMENU) NULL;
- HMENU hSysMenuAdv = (HMENU) NULL;
- HMENU hMenu = (HMENU) NULL;
-
- //-- internal function prototypes
- LRESULT CALLBACK MainWndProc ( HWND, UINT, WPARAM, LPARAM );
- LRESULT CALLBACK MdiChildWndProc ( HWND, UINT, WPARAM, LPARAM );
- LRESULT CALLBACK AboutDlgProc ( HWND, UINT, WPARAM, LPARAM );
- BOOL ErrorMessageBox ( LPCTSTR, LPCTSTR, LPCTSTR, INT );
- HWND WINAPI CreateMdiChildWindow( LPCTSTR );
- VOID WINAPI CloseAllMdiChildren( VOID );
- BOOL WINAPI QueryCloseMdiChild( HWND );
-
- BOOL FillFontNameComboBox( HWND, int );
- BOOL FillFontSizeComboBox( HWND, int );
-
- // **************************************************************************
- // FUNCTION : WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
- // PURPOSE : Calls initialization function, processes message loop
- // COMMENTS :
- // **************************************************************************
- int PASCAL
- WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow )
- {
- MSG msg;
- HACCEL hAccel;
- LPCTSTR lpszClassName = TEXT( "MdiPadClass" );
- LPCTSTR lpszMenuName = TEXT( "MdiPadMenu" );
- LPCTSTR lpszIconName = TEXT( "MdiPadIcon" );
- LPCTSTR lpszAccelName = TEXT( "MdiPadAccel" );
-
- LPCTSTR lpszMdiChildIconName = TEXT( "MdiChildIcon" );
-
- UNREFERENCED_PARAMETER( lpCmdLine ); // avoid the warning
-
- hInstance = hInst;
-
- //-- Other instances of app running? If not...
- if( !hPrevInst ) {
- WNDCLASS wndclass;
-
- // Register the frame class
- wndclass.style = CS_VREDRAW;
- wndclass.lpfnWndProc = (WNDPROC) MainWndProc;
- wndclass.cbClsExtra = 0;
- wndclass.cbWndExtra = 0;
- wndclass.hInstance = hInstance;
- wndclass.hIcon = LoadIcon( hInstance, lpszIconName );
- wndclass.hCursor = LoadCursor( NULL, IDC_ARROW );
- wndclass.hbrBackground = (HBRUSH) (COLOR_APPWORKSPACE+1);
- wndclass.lpszMenuName = lpszMenuName;
- wndclass.lpszClassName = lpszClassName;
-
- if( !RegisterClass(&wndclass) ) {
- ErrorMessageBox( TEXT("Failed!"), TEXT("RegisterClass()"), (LPCTSTR) __FILE__, __LINE__ );
- return( FALSE );
- }
-
- // Register the MDI child class
- wndclass.style = 0;
- wndclass.lpfnWndProc = (WNDPROC) MdiChildWndProc;
- wndclass.cbClsExtra = 0;
- wndclass.cbWndExtra = 0;
- wndclass.hInstance = hInstance;
- wndclass.hIcon = LoadIcon( hInstance, lpszMdiChildIconName );
- wndclass.hCursor = LoadCursor( NULL, IDC_IBEAM );
- wndclass.hbrBackground = (HBRUSH) (COLOR_APPWORKSPACE+1);
- wndclass.lpszMenuName = (LPCTSTR) NULL;
- wndclass.lpszClassName = lpszMdiChildClassName;
-
- if( !RegisterClass(&wndclass) ) {
- ErrorMessageBox( TEXT("Failed!"), TEXT("RegisterClass()"), (LPCTSTR) __FILE__, __LINE__ );
- return( FALSE );
- }
- }
-
- //-- Load resource strings
- if( !LoadString( hInstance, IDS_APPNAME, szAppName, sizeof(szAppName) ) )
- ErrorMessageBox( TEXT("Failed!"), TEXT("LoadString()"), (LPCTSTR) __FILE__, __LINE__ );
- if( !LoadString( hInstance, IDS_SHORT_APPNAME, szShortAppName,
- sizeof(szShortAppName) ) )
- ErrorMessageBox( TEXT("Failed!"), TEXT("LoadString()"), (LPCTSTR) __FILE__, __LINE__ );
-
- //-- initialize the tool bar
- if( !InitToolBar(hInst) ) {
- DebugOut( "InitToolBar Failed" );
- return FALSE;
- }
-
- //-- initialize the statis bar
- if( !InitStatusBar(hInst) ) {
- DebugOut( "InitStatusBar Failed" );
- return FALSE;
- }
-
- //-- Create the main window
- hWndMain = CreateWindow(
- lpszClassName, // See RegisterClass() call
- szAppName, // Text for window title bar
- WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, // Window style
- CW_USEDEFAULT, // Default horizontal position
- CW_USEDEFAULT, // Default vertical position
- CW_USEDEFAULT, // Default width
- CW_USEDEFAULT, // Default height
- NULL, // Overlapped windows have no parent
- NULL, // Use the window class menu
- hInstance, // This instance owns this window
- NULL ); // Pointer not needed
-
- //-- If window could not be created, return "failure"
- if( !hWndMain ) {
- ErrorMessageBox( TEXT("Failed!"), TEXT("CreateWindow()"), (LPCTSTR) __FILE__, __LINE__ );
- return( FALSE );
- }
-
-
-
-
- //-- Get handles to the various menus. Some of these we will use later
- // to display menu descriptions in the status bar
- hSysMenuMain = GetSystemMenu( hWndMain, FALSE );
- if( !hSysMenuMain )
- DebugOut( "No System Menu" );
- hMenu = GetMenu( hWndMain );
- if( hMenu ) {
- hFileMenu = GetSubMenu( hMenu, 0 );
- hHelpMenu = GetSubMenu( hMenu, 1 );
- }
- else {
- DebugOut( "No Menu Bar" );
- }
-
- //-- Create the ToolBar
- DebugOut( "Call CreateToolBar" );
- if( CreateToolBar( hWndMain, hInstance, ID_TOOLBAR ) ) {
- DebugOut( "CreateToolBar Succeeded" );
- hWndLabel1 = AddToolLabel( hInstance, 0, TEXT( "Font:" ), 0, SS_RIGHT );
- AddToolSpace (6, 0);
- hWndCombo1 = AddToolCombo( hInstance, ID_COMBO1, -25, CBS_DROPDOWN | WS_VSCROLL );
- FillFontNameComboBox( hWndCombo1, 0 );
- AddToolSpace (10, 0);
- hWndCombo2 = AddToolCombo( hInstance, ID_COMBO2, -10, CBS_DROPDOWN | WS_VSCROLL );
- FillFontSizeComboBox( hWndCombo2, 0 );
- AddToolSpace (25, 0);
- hWndButton1 = AddToolButton( hInstance, ID_BOLD, TEXT( "Bold" ), 26, 0, BS_OWNERDRAW );
- AddToolSpace (-1, 0);
- hWndButton2 = AddToolButton( hInstance, ID_ITALIC, TEXT( "Italic" ), 26, 0, BS_OWNERDRAW );
- AddToolSpace (-1, 0);
- hWndButton3 = AddToolButton( hInstance, ID_UNDER, TEXT( "Under" ), 26, 0, BS_OWNERDRAW );
- AddToolSpace (10, 0);
- hWndButton4 = AddToolButton( hInstance, ID_LEFT, TEXT( "Left" ), 26, 0, BS_OWNERDRAW );
- AddToolSpace (-1, 0);
- hWndButton5 = AddToolButton( hInstance, ID_CENTER, TEXT( "Center" ), 26, 0, BS_OWNERDRAW );
- AddToolSpace (-1, 0);
- hWndButton6 = AddToolButton( hInstance, ID_RIGHT, TEXT( "Right" ), 26, 0, BS_OWNERDRAW );
- AddToolSpace (-1, 0);
- hWndButton7 = AddToolButton( hInstance, ID_JUST, TEXT( "Just" ), 26, 0, BS_OWNERDRAW );
- AddToolSpace (-1, 0);
- }
- else {
- DebugOut( "CreateToolBar Failed" );
- return FALSE;
- }
-
- //-- Create the StatusBar
- DebugOut( "Call CreateStatusBar" );
- if( CreateStatusBar(hWndMain, hInstance, ID_STATUSBAR) ) {
- DebugOut( "CreateStatusBar Succeeded" );
- hWndMenuField = AddStatusField( hInstance, ID_MENUFIELD, 100, 0, FALSE);
- hWndTimeField = AddStatusField( hInstance, ID_TIMEFIELD, -12, -12, TRUE);
- if( hWndTimeField ) {
- SetTimer( hWndMain, 1, 1000, NULL );
- }
- hWndOvrField = AddStatusField( hInstance, ID_OVRFIELD, -6, -6, TRUE );
- hWndBogusField = AddStatusField( hInstance, ID_SCROLLFIELD, -6, -6, FALSE );
- hWndCapsField = AddStatusField( hInstance, ID_CAPSFIELD, -6, -6, FALSE );
- hWndNumField = AddStatusField( hInstance, ID_NUMFIELD, -6, -6, FALSE );
- }
- else {
- DebugOut( "CreateStatusBar Failed" );
- return FALSE;
- }
-
- //-- Load main menu accelerators
- if( !(hAccel = LoadAccelerators( hInstance, lpszAccelName) ) ) {
- ErrorMessageBox( TEXT("Failed!"), TEXT("LoadAccelerators()"), (LPCTSTR) __FILE__, __LINE__ );
- return( FALSE );
- }
-
- //-- Create an MDI clint window
- {
- CLIENTCREATESTRUCT ccs;
-
- // Find window menu where children will be listed
- ccs.hWindowMenu = GetSubMenu( GetMenu(hWndMain), WINDOWMENU );
- ccs.idFirstChild = IDM_FIRSTCHILD;
-
- hWndMdiClient = CreateWindow(
- TEXT( "MdiClient" ),
- NULL,
- WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS |
- WS_HSCROLL | WS_VSCROLL,
- 0, 0, 0, 0,
- hWndMain,
- (HMENU) NULL,
- hInstance,
- (LPSTR) &ccs );
-
- }
- //-- If window could not be created, return "failure"
- if( !hWndMdiClient ) {
- ErrorMessageBox( TEXT("Failed!"), TEXT("CreateWindow()"), (LPCTSTR) __FILE__, __LINE__ );
- return( FALSE );
- }
-
- ShowWindow( hWndMdiClient, SW_SHOW );
- //-- Make the window visible; update its client area; and return "success"
- ShowWindow( hWndMain, nCmdShow ); // Show the window
- UpdateWindow( hWndMain ); // Sends WM_PAINT message
-
- //-- Acquire and dispatch messages until a WM_QUIT message is received.
- while( GetMessage( &msg, NULL, 0, 0 ) ) {
- if( !TranslateMDISysAccel( hWndMdiClient, &msg ) ) {
- if( !TranslateAccelerator( hWndMain, hAccel, &msg ) ) {
- TranslateMessage( &msg ); // Translates virtual key codes
- DispatchMessage( &msg ); // Dispatches message to window
- }
- }
- }
-
- return( msg.wParam ); // Returns the value from PostQuitMessage
- }
-
-
- // **************************************************************************
- // FUNCTION : MainWndProc( HWND, UINT, WPARAM, LPARAM )
- // PURPOSE : Processes messages
- // MESSAGES :
- // WM_COMMAND - application menu
- // IDM_FILE_EXIT - exit the application
- // IDM_HELP_ABOUT - About Dialog Box
- // ...
- // WM_CREATE - window initialization
- // WM_SIZE - saves window width and height when resized
- // WM_CLOSE - handles cleanup
- // WM_DESTROY - destroys window
- // **************************************************************************
- LRESULT CALLBACK
- MainWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
- {
- static INT idMenuSelect;
-
- time_t lTime;
- struct tm *datetime;
-
- #define HOUR (datetime->tm_hour)
- #define MIN (datetime->tm_min)
- #define SEC (datetime->tm_sec)
-
- TCHAR szTime[20];
- INT tmp;
- INT wmMenuCmd, wmFlags;
- HMENU wmhMenu;
- TCHAR szMsg[80] = TEXT( "" );
-
- switch( uMsg ) {
-
- case WM_COMMAND: { // message: command from application menu
-
- switch( LOWORD( wParam ) ) {
-
- case IDM_FILE_NEW: {
- // Create a new MDI child window
- TCHAR MdiChildName[64];
-
- wsprintf( MdiChildName, TEXT( "MDI Child #%d" ), ++cMdiChild );
- CreateMdiChildWindow( MdiChildName );
- return( FALSE );
- }
-
- case IDM_FILE_OPEN:
- MessageBeep( (UINT) -1 );
- return( FALSE );
-
- case IDM_FILE_EXIT:
- SendMessage( hWnd, WM_CLOSE, 0, 0 );
- return( FALSE );
-
- case IDM_WINDOW_CASCADE:
- // Cascade MDI windows
- SendMessage( hWndMdiClient, WM_MDICASCADE, 0, 0L );
- return( FALSE );
-
- case IDM_WINDOW_TILE_HORZ:
- // Tile MDI windows
- SendMessage( hWndMdiClient, WM_MDITILE, MDITILE_HORIZONTAL, 0L );
- return( FALSE );
-
- case IDM_WINDOW_TILE_VERT:
- // Tile MDI windows
- SendMessage( hWndMdiClient, WM_MDITILE, MDITILE_VERTICAL, 0L );
- return( FALSE );
-
- case IDM_WINDOW_ARRANGEICONS:
- // Auto - arrange MDI icons
- SendMessage( hWndMdiClient, WM_MDIICONARRANGE, 0, 0L );
- return( FALSE );
-
- case IDM_WINDOW_CLOSEALL:
- CloseAllMdiChildren();
- cMdiChild = 0;
- return( FALSE );
-
- case IDM_HELP_ABOUT: {
- DLGPROC lpfnAboutDlgProc; // pointer to the "About" function
- LPTSTR lpszAboutSample = TEXT("AboutDlgBox");
-
- lpfnAboutDlgProc = (DLGPROC) MakeProcInstance( (FARPROC) AboutDlgProc, hInstance );
- if( DialogBox( hInstance, lpszAboutSample, hWnd, lpfnAboutDlgProc ) == -1)
- ErrorMessageBox( TEXT("Failed!"), TEXT("DialogBox()"), (LPCTSTR) __FILE__, __LINE__ );
- FreeProcInstance( (FARPROC) lpfnAboutDlgProc );
- return( FALSE );
- }
-
- default:
- // This is essential, since there are frame WM_COMMANDS generated
- // by the MDI system for activating child windows via the
- // window menu.
- return( DefFrameProc( hWnd, hWndMdiClient, uMsg, wParam, lParam ) );
- }
- }
-
- case WM_WINDOWPOSCHANGING: {
- LPWINDOWPOS lpWinPos = (LPWINDOWPOS) lParam;
-
- lpWinPos->x = 64;
- lpWinPos->y = 64;
- return( DefFrameProc( hWnd, hWndMdiClient, uMsg, wParam, lParam ) );
- }
-
- //-- handle the WM_SIZE message ourselves so we can resize the
- // the MDI client windows to exclude the toolbar and the
- // status bar
- case WM_SIZE: {
- RECT rect;
-
- AdjustToolBar( hWnd );
- AdjustStatusBar( hWnd );
- GetClientRect (hWnd, &rect);
- SetWindowPos( hWndMdiClient, NULL,
- 0, (ToolBarHeight( hWnd )+1),
- rect.right - rect.left, rect.bottom
- - (ToolBarHeight( NULL )+1) - (StatusBarHeight( NULL )+1),
- SWP_SHOWWINDOW );
-
- return( FALSE );
- // return( DefFrameProc( hWnd, hWndMdiClient, uMsg, wParam, lParam ) );
- }
-
- case WM_TIMER:
- #ifndef WIN32
- SetWindowText (hWndTimeField, TEXT("No Time") );
- #else
- time (&lTime);
- datetime = localtime (&lTime);
- wsprintf(
- szTime,
- TEXT( "%02d:%02d:%02d %s" ),
- (HOUR%12?HOUR%12:12), MIN, SEC,
- (LPTSTR) ( HOUR/12 ? TEXT("PM"):TEXT("AM") ) );
- SetWindowText (hWndTimeField, szTime);
- #endif
- if (GetKeyState (VK_NUMLOCK)&1)
- SetWindowText (hWndNumField, TEXT( "NUM" ) );
- else
- SetWindowText (hWndNumField, TEXT( "" ) );
-
- if (GetKeyState (VK_CAPITAL)&1)
- SetWindowText (hWndCapsField, TEXT( "CAPS" ) );
- else
- SetWindowText (hWndCapsField, TEXT( "" ) );
-
- if (GetKeyState (VK_INSERT)&1)
- SetWindowText (hWndOvrField, TEXT( "OVR" ) );
- else
- SetWindowText (hWndOvrField, TEXT( "" ) );
-
- break;
-
- case WM_KEYUP:
- case WM_KEYDOWN:
- if (GetKeyState (VK_NUMLOCK)&1)
- SetWindowText (hWndNumField, TEXT( "NUM" ) );
- else
- SetWindowText (hWndNumField, TEXT( "" ) );
-
- if (GetKeyState (VK_CAPITAL)&1)
- SetWindowText (hWndCapsField, TEXT( "CAPS" ) );
- else
- SetWindowText (hWndCapsField, TEXT( "" ) );
-
- if (GetKeyState (VK_INSERT)&1)
- SetWindowText (hWndOvrField, TEXT( "OVR" ) );
- else
- SetWindowText (hWndOvrField, TEXT( "" ) );
-
- #define VK_OEM_SCROLL 0x91 // This isn't in WINDOWS.H, will it always work?
-
- if (GetKeyState (VK_OEM_SCROLL)&1)
- SetWindowText (hWndBogusField, TEXT( "SCROLL" ) );
- else
- SetWindowText (hWndBogusField, TEXT( "" ) );
-
- return DefWindowProc (hWnd, uMsg, wParam, lParam);
- break;
-
- case WM_CHAR:
- switch (wParam) {
- case VK_F10:
- wParam = VK_MENU;
- return DefWindowProc (hWnd, uMsg, wParam, lParam);
- break;
- }
- break;
-
- case WM_MENUSELECT:
- /* A menu item is hilited, get description text for status bar */
- tmp = idMenuSelect;
-
- #if defined (WIN32)
- wmMenuCmd = LOWORD( wParam );
- wmFlags = HIWORD( wParam );
- wmhMenu = (HMENU) lParam;
- #elif defined (WIN16)
- wmMenuCmd = wParam;
- wmFlags = LOWORD( lParam );
- wmhMenu = (HMENU) HIWORD( lParam );
- #endif
-
- if( (wmhMenu == 0) && (wmFlags = -1) ) {
- tmp = idMenuSelect = 0;
- SetWindowText(hWndMenuField, TEXT( "Ready..." ) );
- }
- else if(wmhMenu == 0) {
- /* don't do anything for this */
- } else if(wmFlags & MF_POPUP) {
- if( (HMENU) wmMenuCmd == hSysMenuMain )
- idMenuSelect = IDM_SYSMENU;
- else if( (HMENU) wmMenuCmd == hFileMenu )
- idMenuSelect = IDM_FILE;
- else if( (HMENU) wmMenuCmd == hHelpMenu )
- idMenuSelect = IDM_HELP;
- }
- else {
- if(wmMenuCmd != 0) { /* separators have wparam of 0 */
- idMenuSelect = wmMenuCmd;
- }
- }
-
- if( idMenuSelect != tmp ) {
- if( !LoadString( hInstance, (int) idMenuSelect, szMsg, sizeof(szMsg) ) ) {
- if( idMenuSelect != (WORD) -1 ){
- wsprintf( (LPTSTR) szMsg, TEXT( "Unable to load menu string #%u" ), idMenuSelect );
- }
- else {
- lstrcpy(szMsg, TEXT( "Unsupported Function" ) );
- }
- }
- SetWindowText( hWndMenuField, szMsg );
- }
- break;
-
- case WM_CLOSE: {
- DestroyWindow( hWnd );
- return( FALSE );
- }
-
- case WM_DESTROY: // message: window being destroyed
- PostQuitMessage( 0 );
- return( FALSE );
-
- default: // Passes it on if unproccessed
- return( DefFrameProc( hWnd, hWndMdiClient, uMsg, wParam, lParam ) );
- }
-
- return( FALSE );
- }
-
-
- // **************************************************************************
- // FUNCTION : MdiChildWndProc( HWND, UINT, WPARAM, LPARAM )
- // PURPOSE : Processes messages for the MDI Child windows
- // MESSAGES :
- // **************************************************************************
- LRESULT CALLBACK
- MdiChildWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
- {
- switch( uMsg ) {
-
- case WM_CREATE: {
- HWND hWndEdit;
-
- /* Create an edit control */
- hWndEdit = CreateWindow( TEXT( "Edit" ), NULL,
- WS_CHILD | WS_MAXIMIZE | WS_VISIBLE |
- WS_HSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | ES_AUTOVSCROLL |
- ES_MULTILINE,
- 0, 0, 0, 0,
- hWnd,
- (HMENU) NULL,
- hInstance,
- NULL );
-
- SetFocus( hWndEdit );
- break;
- }
-
- case WM_CLOSE:
- if( QueryCloseMdiChild( hWnd ) ) {
- SendMessage( hWndMdiClient, WM_MDIDESTROY, (WPARAM) hWnd, 0L );
- return DefMDIChildProc( hWnd, uMsg, wParam, lParam );
- }
- break;
-
- default:
- return DefMDIChildProc( hWnd, uMsg, wParam, lParam );
-
- }
-
- return( FALSE );
- }
-
-
- // **************************************************************************
- // FUNCTION : AboutDlgProc( HWND, UINT, WPARAM, LPARAM )
- // PURPOSE : Processes messages for "About" dialog box
- // MESSAGES :
- // WM_INITDIALOG - initialize dialog box
- // WM_COMMAND - Input received
- // IDOK - OK button selected
- // IDCANCEL - Cancel button selected
- // COMMENTS:
- // No initialization is needed for this particular dialog box.
- // In this case, TRUE must be returned to Windows.
- // Wait for user to click on "Ok" button, then close the dialog box.
- // **************************************************************************
- LRESULT CALLBACK
- AboutDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
- {
- UNREFERENCED_PARAMETER( lParam );
-
- switch( uMsg ) {
-
- case WM_COMMAND:
- switch( wParam ) {
-
- case IDOK:
- EndDialog( hDlg, TRUE );
- return( TRUE );
-
- case IDCANCEL:
- EndDialog( hDlg, FALSE );
- return( FALSE );
- }
- break;
-
- case WM_INITDIALOG:
- return( TRUE );
-
- case WM_CLOSE:
- return( TRUE );
-
- }
-
- return( FALSE );
- }
-
-
- // ************************************************************************
- // FUNCTION : CreateMdiChildWindow( LPCTSTR )
- // PURPOSE :
- // COMMENTS :
- // ************************************************************************
- HWND WINAPI
- CreateMdiChildWindow( LPCTSTR MdiChildName )
- {
- HWND hWndMdiChild;
- MDICREATESTRUCT mcs;
-
- if( !MdiChildName )
- mcs.szTitle = TEXT( "Untitled" );
- else
- mcs.szTitle = MdiChildName;
-
- mcs.szClass = lpszMdiChildClassName;
- mcs.hOwner = hInstance;
- mcs.x = mcs.cx = (UINT) CW_USEDEFAULT; // Use the default size for the window
- mcs.y = mcs.cy = (UINT) CW_USEDEFAULT;
- mcs.style = WS_CHILD | WS_CLIPSIBLINGS | WS_SYSMENU | WS_CAPTION |
- WS_THICKFRAME | WS_MAXIMIZEBOX | WS_MINIMIZEBOX;
-
- // tell the MDI Client to create the child
- hWndMdiChild = (HWND) SendMessage ( hWndMdiClient, WM_MDICREATE, 0,
- (LPARAM) (LPMDICREATESTRUCT) &mcs );
-
- return( hWndMdiChild );
- }
-
- // ************************************************************************
- // FUNCTION : QueryCloseMdiChild( HWND )
- // PURPOSE :
- // COMMENTS :
- // ************************************************************************
- BOOL WINAPI
- QueryCloseMdiChild( HWND hWndMdiChild )
- {
- TCHAR Buffer[256] = TEXT( "" );
-
- GetWindowText( hWndMdiChild, (LPTSTR) &Buffer, 256 );
- switch( MessageBox( hWndMain,
- TEXT( "Save contents before closing this window?" ),
- Buffer, MB_YESNOCANCEL | MB_ICONQUESTION ) ) {
-
- case IDYES:
- // SaveFile();
- return( TRUE );
-
- case IDNO:
- return( TRUE );
-
- default:
- return( FALSE );
-
- }
-
- return( FALSE );
- }
-
-
- // ************************************************************************
- // FUNCTION : CloseAllMdiChildren( VOID )
- // PURPOSE :
- // COMMENTS :
- // ************************************************************************
- VOID WINAPI
- CloseAllMdiChildren( VOID )
- {
- HWND hWndMdiChild;
-
- // hide the MDI client window to avoid multiple repaints
- // ShowWindow( hWndMdiClient,SW_HIDE );
-
- // As long as the MDI client has a child, destroy it
- while ( hWndMdiChild = GetWindow (hWndMdiClient, GW_CHILD) ) {
-
- // Skip the icon title windows
- while( hWndMdiChild && GetWindow( hWndMdiChild, GW_OWNER ) )
- hWndMdiChild = GetWindow( hWndMdiChild, GW_HWNDNEXT );
- if( hWndMdiChild )
- SendMessage( hWndMdiChild, WM_CLOSE, 0, 0L );
- //QueryCloseMdiChild( hWndMdiChild );
- else
- break;
-
- }
- // ShowWindow( hWndMdiClient, SW_SHOW );
- }
-
-
- // ************************************************************************
- // FUNCTION : ErrorMessageBox( LPCTSTR, LPCTSTR, LPCTSTR, INT )
- // PURPOSE : Displays an error message box with GetLastError information
- // and allows the user to terminate or continue the process.
- // COMMENTS :
- // ************************************************************************
- BOOL
- ErrorMessageBox( LPCTSTR lpszText, LPCTSTR lpszTitle, LPCTSTR lpszFile, INT Line )
- {
- #define ERROR_BUFFER_SIZE 512
-
- static TCHAR Format[] =
- TEXT( "%s\n\n" )
- TEXT( "--Error Information--\n\n" )
- TEXT( "File : %s\n" )
- TEXT( "Line : %d\n" )
- TEXT( "Error Number : %d\n" )
- #ifdef WIN32
- TEXT( "Error Message : %s\n" )
- #endif
- TEXT( "Press OK to terminate this application." );
-
- HLOCAL hMessageBoxBuffer;
- LPVOID lpMessageBoxBuffer;
-
- #ifdef WIN32
- LPVOID lpMessageBuffer;
- #endif
- DWORD dwError;
-
- //-- perform a simple check on the needed buffer size
- if( lstrlen(lpszText) > (ERROR_BUFFER_SIZE - lstrlen(Format)) )
- return( FALSE );
-
- //-- allocate the message box buffer
- hMessageBoxBuffer = LocalAlloc( LMEM_FIXED, ERROR_BUFFER_SIZE );
- lpMessageBoxBuffer = LocalLock( hMessageBoxBuffer );
-
- #ifdef WIN32
- //-- get the sytem error message
- FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
- NULL, dwError = GetLastError(), LANG_USER_DEFAULT,
- (LPTSTR) &lpMessageBuffer, 0, NULL );
- #endif
-
- //-- format the error messge box string
- wsprintf( lpMessageBoxBuffer, Format, lpszText, lpszFile, Line, dwError
- #ifdef WIN32
- , lpMessageBuffer
- #endif
- );
-
- // -- display the error and allow the user to terminate or continue
- if( MessageBox( NULL, lpMessageBoxBuffer, lpszTitle, MB_OKCANCEL ) == IDOK )
- ExitProcess( 0 );
-
- //-- free all buffers
- #ifdef WIN32
- LocalFree( (HLOCAL) lpMessageBuffer );
- #endif
- LocalFree( (HLOCAL) hMessageBoxBuffer );
-
- return( TRUE );
- }
-
-
- // *************************************************************************
- // FUNCTION: FillFontNameComboBox( HWND, int )
- // PURPOSE: Fills a ComboBox
- // COMMENTS: Returns TRUE
- // *************************************************************************
- BOOL
- FillFontNameComboBox (HWND hWnd, int focus)
- {
- int index = 0;
-
- SendMessage( hWnd, CB_ADDSTRING, 0, (LPARAM) TEXT( "Courier" ) );
- SendMessage( hWnd, CB_SETITEMDATA, index++, 1 );
-
- SendMessage( hWnd, CB_ADDSTRING, 0, (LPARAM) TEXT( "Helv" ) );
- SendMessage( hWnd, CB_SETITEMDATA, index++, 2 );
-
- SendMessage( hWnd, CB_ADDSTRING, 0, (LPARAM) TEXT( "Tms Rmn" ) );
- SendMessage( hWnd, CB_SETITEMDATA, index++, 3 );
-
- SendMessage( hWnd, CB_ADDSTRING, 0, (LPARAM) TEXT( "Modern" ) );
- SendMessage( hWnd, CB_SETITEMDATA, index++, 4 );
-
- SendMessage( hWnd, CB_ADDSTRING, 0, (LPARAM) TEXT( "Roman" ) );
- SendMessage( hWnd, CB_SETITEMDATA, index++, 5 );
-
- SendMessage( hWnd, CB_ADDSTRING, 0, (LPARAM) TEXT( "Script" ) );
- SendMessage( hWnd, CB_SETITEMDATA, index++, 6 );
-
- SendMessage( hWnd, CB_ADDSTRING, 0, (LPARAM) TEXT( "Symbol" ) );
- SendMessage( hWnd, CB_SETITEMDATA, index++, 7 );
-
- SendMessage( hWnd, CB_ADDSTRING, 0, (LPARAM) TEXT( "Zaph Dingbats" ) );
- SendMessage( hWnd, CB_SETITEMDATA, index++, 8 );
-
- SendMessage( hWnd, CB_SETCURSEL, focus, 0 );
-
- return( TRUE );
- }
-
-
- // *************************************************************************
- // FUNCTION: FillFontSizeComboBox( HWND, int )
- // PURPOSE: Fills a ComboBox
- // COMMENTS: Returns TRUE
- // *************************************************************************
- BOOL
- FillFontSizeComboBox (HWND hWnd, int focus)
- {
- int index = 0;
-
- SendMessage( hWnd, CB_ADDSTRING, 0, (LPARAM) TEXT( "6" ) );
- SendMessage( hWnd, CB_SETITEMDATA, index++, 6 );
-
- SendMessage( hWnd, CB_ADDSTRING, 0, (LPARAM) TEXT( "8" ) );
- SendMessage( hWnd, CB_SETITEMDATA, index++, 8 );
-
- SendMessage( hWnd, CB_ADDSTRING, 0, (LPARAM) TEXT( "10" ) );
- SendMessage( hWnd, CB_SETITEMDATA, index++, 10 );
-
- SendMessage( hWnd, CB_ADDSTRING, 0, (LPARAM) TEXT( "12" ) );
- SendMessage( hWnd, CB_SETITEMDATA, index++, 12 );
-
- SendMessage( hWnd, CB_ADDSTRING, 0, (LPARAM) TEXT( "14" ) );
- SendMessage( hWnd, CB_SETITEMDATA, index++, 14 );
-
- SendMessage( hWnd, CB_ADDSTRING, 0, (LPARAM) TEXT( "16" ) );
- SendMessage( hWnd, CB_SETITEMDATA, index++, 16 );
-
- SendMessage( hWnd, CB_ADDSTRING, 0, (LPARAM) TEXT( "18" ) );
- SendMessage( hWnd, CB_SETITEMDATA, index++, 18 );
-
- SendMessage( hWnd, CB_ADDSTRING, 0, (LPARAM) TEXT( "24" ) );
- SendMessage( hWnd, CB_SETITEMDATA, index++, 24 );
-
- SendMessage( hWnd, CB_SETCURSEL, focus, 0 );
-
- return( TRUE );
- }
-