/*++ Copyright (c) 1998 Microsoft Corporation Module Name: memdbe.c Abstract: main file for memdbe.exe, containing winmain(). this creates the application framework, and then the child window dialog which has the controls and displays. Author: Matthew Vanderzee (mvander) 13-Aug-1999 Revision History: --*/ #include "pch.h" #include "dbeditp.h" #include "dialogs.h" #define MAX_LOADSTRING 100 HWND g_hChildWindow = NULL; HMENU g_hMenuMain; #define DEFAULT_WINDOW_TITLE "MemDb Editor" #define DEFAULT_FILENAME "ntsetup.dat" LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); VOID HelpAndExit ( VOID ) { MessageBox ( NULL, "Command Line Syntax:\n\n" "\tmemdbe [database file]\n" "\n" "If no database file is specified, \"ntsetup.dat\" is opened if it exists.", "MemDb Editor", MB_OK|MB_ICONINFORMATION ); exit(1); } int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpPtr, int nCmdShow ) { HACCEL hAccel; static char AppName[] = "MemDbEdit"; MSG msg; HWND hwnd; WNDCLASSEX wndclass; RECT DialogRect; g_hInst = hInstance; wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW|CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon (NULL, MAKEINTRESOURCE(IDI_ICON_SPHERE)); wndclass.hCursor = LoadCursor (NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = AppName; wndclass.hIconSm = NULL; //LoadIcon (NULL, MAKEINTRESOURCE(IDI_ICON1)); RegisterClassEx (&wndclass); hwnd = CreateWindow ( AppName, DEFAULT_WINDOW_TITLE, WS_OVERLAPPEDWINDOW & (~WS_MAXIMIZEBOX) & (~WS_THICKFRAME), CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, lpPtr ); ShowWindow (hwnd, nCmdShow); UpdateWindow (hwnd); hAccel = LoadAccelerators (hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR)); // Main message loop: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator (hwnd, hAccel, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return msg.wParam; } VOID pInitializeSystemMenu ( HWND hwnd ) { HMENU hMenu; hMenu = GetSystemMenu (hwnd, FALSE); RemoveMenu (hMenu, SC_MAXIMIZE, MF_BYCOMMAND); RemoveMenu (hMenu, SC_SIZE, MF_BYCOMMAND); } BOOL pInitializeWindows ( HWND hwnd ) { RECT rect, rect2; g_hMenuMain = LoadMenu (g_hInst, MAKEINTRESOURCE(IDR_MENU_MAIN)); SetMenu (hwnd, g_hMenuMain); g_hChildWindow = CreateDialog ( g_hInst, MAKEINTRESOURCE(IDD_DIALOG_CHILD), hwnd, MainDlgProc ); if (!g_hChildWindow) { DEBUGMSG ((DBG_ERROR, "Could not create child window!")); } GetWindowRect(hwnd, &rect); GetWindowRect(g_hChildWindow, &rect2); MoveWindow ( hwnd, rect.left, rect.top, (rect2.right-rect2.left) + 2*GetSystemMetrics(SM_CXDLGFRAME), (rect2.bottom-rect2.top) + 2*GetSystemMetrics(SM_CYDLGFRAME) + GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYMENU), FALSE ); ShowWindow (g_hChildWindow, SW_SHOWNORMAL); return TRUE; } BOOL pDestroyWindows ( HWND hwnd ) { DestroyWindow (g_hChildWindow); DestroyMenu (GetMenu(hwnd)); return TRUE; } BOOL pUpdateWindowTitle ( HWND hwnd, LPSTR OpenFile, BOOL IsFileModified ) { char TempString[512]; if (OpenFile && (OpenFile[0] != '\0')) { StringCopyA (TempString, OpenFile); StringCatA (TempString, " - "); } else { TempString[0] = '\0'; } StringCatA (TempString, DEFAULT_WINDOW_TITLE); if (IsFileModified) { StringCatA (TempString, " *"); } SetWindowText (hwnd, TempString); return TRUE; } LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { BOOL b; LPSTR Ptr; POINT pt; HWND hChildWnd; static LPCREATESTRUCT pCS; if (WantProcess (message, wParam, lParam)) { // // if the dialog window message handler wants to process the message // send it to it (in MemdbInt.c) // return SendMessage (g_hChildWindow, message, wParam, lParam); } switch (message) { case WM_CREATE: pInitializeSystemMenu (hwnd); InitializeMemDb (hwnd); pInitializeWindows (hwnd); pUpdateWindowTitle (hwnd, "", FALSE); pCS = (LPCREATESTRUCT)lParam; Ptr = (LPSTR)pCS->lpCreateParams; if (_mbschr (Ptr, '?')) { HelpAndExit (); } if (Ptr[0]!='\0') { SendMessage (g_hChildWindow, WM_FILE_LOAD, (WPARAM)Ptr, 0); } else if (DoesFileExistA (DEFAULT_FILENAME)) { SendMessage (g_hChildWindow, WM_FILE_LOAD, (WPARAM)(DEFAULT_FILENAME), 0); } break; case WM_COMMAND: switch (LOWORD(wParam)) { case ID_HELP_ABOUT: AboutDialog (hwnd); break; case ID_FILE_QUIT: SendMessage (g_hChildWindow, WM_QUIT_CHECK, (WPARAM)&b, 0); if (b) { DestroyWindow(hwnd); } break; default: return DefWindowProc(hwnd, message, wParam, lParam); } break; case WM_SYSCOMMAND: switch (wParam) { case SC_CLOSE: SendMessage (g_hChildWindow, WM_QUIT_CHECK, (WPARAM)&b, 0); if (b) { DestroyWindow(hwnd); } break; default: return DefWindowProc(hwnd, message, wParam, lParam); } break; case WM_FILE_UPDATE: pUpdateWindowTitle (hwnd, (LPSTR)wParam, (BOOL)lParam); break; case WM_DESTROY: pDestroyWindows (hwnd); DestroyMemDb (); PostQuitMessage (0); break; default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; }