Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

317 lines
6.6 KiB

/*++
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;
}