Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

277 lines
6.4 KiB

/*++
Copyright (c) 1994 Microsoft Corporation
Module Name:
WinUtils.C
Abstract:
Windows utility functions
Author:
Bob Watson (a-robw)
Revision History:
24 Jun 94 Written
--*/
//
// Windows Include Files
//
#include <windows.h>
#include <stdio.h>
#include <malloc.h>
#include <tchar.h> // unicode macros
#include <stdlib.h> // string to number conversions
#include <shellapi.h> // for common about box function
//
// app include files
//
#include "otnboot.h"
#include "otnbtdlg.h"
BOOL
Dlg_WM_SYSCOMMAND (
IN HWND hwndDlg,
IN WPARAM wParam,
IN LPARAM lParam
)
/*++
Routine Description:
Processes system command (e.g. from system menu) messages sent to
dialog boxes:
SC_CLOSE: closes the application
SC_MINIMIZE: saves the dlg caption, set's the window
caption to the app name, then minimizes the dlg.
SC_RESTORE: resets the dlg caption to the store name and
restores the dlg window
NCDU_ID_ABOUT: displays the appropriate about box
Arguments:
Std. Window message args
Return Value:
TRUE if message is processed by this routine
FALSE if not
--*/
{
LPTSTR szWindowName;
BOOL bSpecial;
static TCHAR szLastDlgTitle[MAX_PATH];
switch (wParam & 0x0000FFF0) {
case SC_CLOSE:
PostMessage (GetParent(hwndDlg), NCDU_SHOW_EXIT_MESSAGE_DLG, 0, 0);
SetCursor(LoadCursor(NULL, IDC_WAIT));
return TRUE; // done
case SC_MINIMIZE:
SetSysMenuMinimizeEntryState (hwndDlg, FALSE); // disable minimize
// save dialog title for restoration
GetWindowText (hwndDlg, szLastDlgTitle, MAX_PATH);
// set title to app name
szWindowName = (LPTSTR)GlobalAlloc(GPTR, MAX_PATH_BYTES);
if (szWindowName != NULL) {
if (LoadString (
(HINSTANCE)GetWindowLong (hwndDlg, GWL_HINSTANCE),
STRING_BASE,
szWindowName,
MAX_PATH) > 0) {
SetWindowText (hwndDlg, szWindowName);
}
FREE_IF_ALLOC (szWindowName);
}
// minimize window
ShowWindow (hwndDlg, SW_MINIMIZE);
return TRUE;
case SC_RESTORE:
SetSysMenuMinimizeEntryState (hwndDlg, TRUE); // enable minimize
if (szLastDlgTitle[0] != 0) SetWindowText (hwndDlg, szLastDlgTitle);
szLastDlgTitle[0] = 0; // clear buffer
ShowWindow (hwndDlg, SW_RESTORE);
return ERROR_SUCCESS;
case NCDU_ID_ABOUT:
bSpecial = (BOOL)((GetKeyState(VK_SHIFT) & 0x8000) && (GetKeyState(VK_CONTROL) & 0x8000));
if (bSpecial) {
DialogBox (
(HINSTANCE)GetWindowLong (hwndDlg, GWL_HINSTANCE),
MAKEINTRESOURCE (NCDU_SPECIAL_ABOUT_DLG),
hwndDlg,
AboutDlgProc);
} else {
lstrcpy (szLastDlgTitle, GetStringResource (CSZ_ABOUT_TITLE));
lstrcat (szLastDlgTitle, cszPoundSign);
ShellAbout (hwndDlg,
szLastDlgTitle,
GetStringResource (SZ_APP_TITLE),
LoadIcon (
(HINSTANCE)GetWindowLong (hwndDlg, GWL_HINSTANCE),
MAKEINTRESOURCE (NCDU_APP_ICON)));
szLastDlgTitle[0] = 0;
}
return TRUE;
default:
return FALSE;
}
}
LRESULT
Dlg_WM_MOVE (
IN HWND hwndDlg,
IN WPARAM wParam,
IN LPARAM lParam
)
/*++
Routine Description:
updates the current position of the window, whenever the window
is moved so the next window (dialog) can be position in the same
location.
Arguments:
IN HWND hwndDlg
Handle to dialog window
IN WPARAM wParam
Not used
IN LPARAM lParam
Not used
Return Value:
ERROR_SUCCESS
--*/
{
RECT rWnd;
GetWindowRect(hwndDlg, &rWnd);
PostMessage (GetParent(hwndDlg), NCDU_UPDATE_WINDOW_POS,
(WPARAM)rWnd.left, (LPARAM)rWnd.top);
return (LRESULT)ERROR_SUCCESS;
}
BOOL
Dlg_WM_PAINT (
IN HWND hwndDlg,
IN WPARAM wParam,
IN LPARAM lParam
)
/*++
Routine Description:
paints app icon in minimized dialog box window.
Arguments:
Std. Window message arguments
Return Value:
TRUE if message is processed by this routine
FALSE if not.
--*/
{
PAINTSTRUCT ps;
if (IsIconic(hwndDlg)) {
BeginPaint (hwndDlg, &ps);
DrawIcon (ps.hdc, 0, 0,
LoadIcon((HINSTANCE)GetWindowLong(GetParent(hwndDlg), GWL_HINSTANCE),
MAKEINTRESOURCE(NCDU_APP_ICON)));
EndPaint (hwndDlg, &ps);
return TRUE;
} else {
return FALSE;
}
}
BOOL
CenterWindow (
HWND hwndChild,
HWND hwndParent
)
/*++
Routine Description:
Centers the child window in the Parent window
Arguments:
HWND hwndChild,
handle of child window to center
HWND hwndParent
handle of parent window to center child window in
ReturnValue:
Return value of SetWindowPos
--*/
{
RECT rChild, rParent;
LONG wChild, hChild, wParent, hParent;
LONG wScreen, hScreen, xNew, yNew;
HDC hdc;
// Get the Height and Width of the child window
GetWindowRect (hwndChild, &rChild);
wChild = rChild.right - rChild.left;
hChild = rChild.bottom - rChild.top;
// Get the Height and Width of the parent window
GetWindowRect (hwndParent, &rParent);
wParent = rParent.right - rParent.left;
hParent = rParent.bottom - rParent.top;
// Get the display limits
hdc = GetDC (hwndChild);
wScreen = GetDeviceCaps (hdc, HORZRES);
hScreen = GetDeviceCaps (hdc, VERTRES);
ReleaseDC (hwndChild, hdc);
// Calculate new X position, then adjust for screen
xNew = rParent.left + ((wParent - wChild) /2);
if (xNew < 0) {
xNew = 0;
} else if ((xNew+wChild) > wScreen) {
xNew = wScreen - wChild;
}
// Calculate new Y position, then adjust for screen
yNew = rParent.top + ((hParent - hChild) /2);
if (yNew < 0) {
yNew = 0;
} else if ((yNew+hChild) > hScreen) {
yNew = hScreen - hChild;
}
// Set it, and return
return SetWindowPos (hwndChild, NULL,
(int)xNew, (int)yNew, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
}