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.
 
 
 
 
 
 

529 lines
11 KiB

/**********************************************************************/
/** Microsoft Windows NT **/
/** Copyright(c) Microsoft Corp., 1995 **/
/**********************************************************************/
/*
client.c
This file contains routines for managing the client window.
*/
#include "gopherp.h"
#pragma hdrstop
//
// Private constants.
//
//
// Private types.
//
//
// Private globals.
//
//
// Private prototypes.
//
LRESULT
CALLBACK
Client_WndProc(
HWND hwnd,
UINT nMessage,
WPARAM wParam,
LPARAM lParam
);
BOOL
Client_OnCreate(
HWND hwnd,
CREATESTRUCT FAR * pCreateStruct
);
VOID
Client_OnDestroy(
HWND hwnd
);
VOID
Client_OnCommand(
HWND hwnd,
INT id,
HWND hwndCtl,
UINT codeNotify
);
VOID
Client_OnPaint(
HWND hwnd
);
VOID
Client_OnSize(
HWND hwnd,
UINT state,
INT dx,
INT dy
);
VOID
Client_OnSetFocus(
HWND hwnd,
HWND hwndOldFocus
);
INT
Client_OnVkeyToItem(
HWND hwnd,
UINT vk,
HWND hwndListbox,
INT iCaret
);
INT
Client_OnCharToItem(
HWND hwnd,
UINT ch,
HWND hwndListbox,
INT iCaret
);
VOID
Client_OnDrawItem(
HWND hWnd,
const DRAWITEMSTRUCT * pdis
);
VOID
Client_OnMeasureItem(
HWND hWnd,
MEASUREITEMSTRUCT * pmis
);
INT
Client_OnCompareItem(
HWND hWnd,
const COMPAREITEMSTRUCT * pcis
);
VOID
Client_OnDeleteItem(
HWND hWnd,
const DELETEITEMSTRUCT * pdis
);
//
// Public functions.
//
/*******************************************************************
NAME: Client_WndProc
SYNOPSIS: Client window procedure.
ENTRY: hwnd - Window handle.
nMessage - The message.
wParam - The first message parameter.
lParam - The second message parameter.
RETURNS: LRESULT - Depends on the actual message.
********************************************************************/
LRESULT
CALLBACK
Client_WndProc(
HWND hwnd,
UINT nMessage,
WPARAM wParam,
LPARAM lParam
)
{
switch( nMessage )
{
HANDLE_MSG( hwnd, WM_CREATE, Client_OnCreate );
HANDLE_MSG( hwnd, WM_DESTROY, Client_OnDestroy );
HANDLE_MSG( hwnd, WM_PAINT, Client_OnPaint );
HANDLE_MSG( hwnd, WM_COMMAND, Client_OnCommand );
HANDLE_MSG( hwnd, WM_SIZE, Client_OnSize );
HANDLE_MSG( hwnd, WM_SETFOCUS, Client_OnSetFocus );
HANDLE_MSG( hwnd, WM_VKEYTOITEM, Client_OnVkeyToItem );
HANDLE_MSG( hwnd, WM_CHARTOITEM, Client_OnCharToItem );
HANDLE_MSG( hwnd, WM_DRAWITEM, Client_OnDrawItem );
HANDLE_MSG( hwnd, WM_MEASUREITEM, Client_OnMeasureItem );
HANDLE_MSG( hwnd, WM_COMPAREITEM, Client_OnCompareItem );
HANDLE_MSG( hwnd, WM_DELETEITEM, Client_OnDeleteItem );
}
return DefWindowProc( hwnd, nMessage, wParam, lParam );
} // Client_WndProc
//
// Private functions.
//
/*******************************************************************
NAME: Client_OnCreate
SYNOPSIS: Handles WM_CREATE messages.
ENTRY: hwnd - Window handle.
pCreateStruct - Contains window creation parameters.
RETURNS: BOOL - TRUE if window created OK, FALSE otherwise.
********************************************************************/
BOOL
Client_OnCreate(
HWND hwnd,
CREATESTRUCT FAR * pCreateStruct
)
{
//
// Create the listbox.
//
if( !Listbox_Create( hwnd ) )
{
return FALSE;
}
return TRUE;
} // Client_OnCreate
/*******************************************************************
NAME: Client_OnDestroy
SYNOPSIS: Handles WM_DESTROY messages.
ENTRY: hwnd - Window handle.
********************************************************************/
VOID
Client_OnDestroy(
HWND hwnd
)
{
//
// Kill the listbox.
//
Listbox_Destroy();
} // Client_OnDestroy
/*******************************************************************
NAME: Client_OnPaint
SYNOPSIS: Handles WM_PAINT messages.
ENTRY: hwnd - Window handle.
********************************************************************/
VOID
Client_OnPaint(
HWND hwnd
)
{
PAINTSTRUCT psPaint;
HPEN hpenGrey;
HPEN hpenWhite;
HPEN hpenOld;
RECT rect;
HDC hdc;
//
// Just draw the "3D" look around the boarders of the client area.
//
hdc = BeginPaint( hwnd, &psPaint );
hpenGrey = CreatePen( PS_SOLID, 0, RGB( 128, 128, 128 ) );
hpenWhite = CreatePen( PS_SOLID, 0, RGB( 255, 255, 255 ) );
GetClientRect( hwnd, &rect );
hpenOld = SelectPen( hdc, hpenGrey );
MoveToEx( hdc, rect.left+10, rect.bottom-10, NULL );
LineTo( hdc, rect.left+10, rect.top+10 );
LineTo( hdc, rect.right-10, rect.top+10 );
SelectPen( hdc, hpenWhite );
LineTo( hdc, rect.right-10, rect.bottom-10 );
LineTo( hdc, rect.left+10, rect.bottom-10 );
SelectPen( hdc, hpenOld );
DeletePen( hpenGrey );
DeletePen( hpenWhite );
EndPaint( hwnd, &psPaint );
} // Client_OnPaint
/*******************************************************************
NAME: Client_OnCommand
SYNOPSIS: Handles WM_COMMAND messages.
ENTRY: hwnd - Window handle.
id - Identifies the menu/control/accelerator.
hwndCtl - Identifies the control sending the command.
codeNotify - A notification code. Will be zero for
menus, one for accelerators.
********************************************************************/
VOID
Client_OnCommand(
HWND hwnd,
INT id,
HWND hwndCtl,
UINT codeNotify
)
{
if( codeNotify == LBN_DBLCLK )
{
Listbox_DoubleClick();
}
} // Client_OnCommand
/*******************************************************************
NAME: Client_OnSize
SYNOPSIS: Handles WM_SIZE messages.
ENTRY: hwnd - Window handle.
state - A SIZE_* flag indicating the new window state.
dx - The new window width (in pixels).
dy - The new window height (in pixels).
********************************************************************/
VOID
Client_OnSize(
HWND hwnd,
UINT state,
INT dx,
INT dy
)
{
RECT rect;
GetClientRect( hwnd, &rect );
dx = rect.right - rect.left;
dy = rect.bottom - rect.top;
Listbox_Move( 11,
11,
dx - 21,
dy - 21 );
} // Client_OnSize
/*******************************************************************
NAME: Client_OnSetFocus
SYNOPSIS: Handles WM_SETFOCUS messages.
ENTRY: hwnd - Window handle.
hwndOldFocus - Handle of window losing the focus.
********************************************************************/
VOID
Client_OnSetFocus(
HWND hwnd,
HWND hwndOldFocus
)
{
Listbox_ClaimFocus();
} // Client_OnSetFocus
/*******************************************************************
NAME: Client_OnVkeyToItem
SYNOPSIS: Handles WM_VKEYTOITEM messages.
ENTRY: hwnd - Window handle.
vk - Virtual-key code.
iCaret - Caret position.
hwndListbox - Listbox window handle.
RETURNS: INT - Action code:
-2 = App handled all aspects of item selection.
-1 = Listbox should perform default processing.
>=0 = Index of listbox item to select.
********************************************************************/
INT
Client_OnVkeyToItem(
HWND hwnd,
UINT vk,
HWND hwndListbox,
INT iCaret
)
{
if( vk == VK_RETURN )
{
Listbox_DoubleClick();
}
return -1;
} // Client_OnVkeyToItem
/*******************************************************************
NAME: Client_OnCharToItem
SYNOPSIS: Handles WM_CHARTOITEM messages.
ENTRY: hwnd - Window handle.
ch - Input character.
iCaret - Caret position.
hwndListbox - Listbox window handle.
RETURNS: INT - Action code:
-2 = App handled all aspects of item selection.
-1 = Listbox should perform default processing.
>=0 = Index of listbox item to select.
********************************************************************/
INT
Client_OnCharToItem(
HWND hwnd,
UINT ch,
HWND hwndListbox,
INT iCaret
)
{
return Listbox_CharToItem( (CHAR)ch, iCaret );
} // Client_OnCharToItem
/*******************************************************************
NAME: Client_OnDrawItem
SYNOPSIS: Handles WM_DRAWITEM messages.
ENTRY: hwnd - Window handle.
pdis - Pointer to DRAWITEMSTRUCT containing the
draw parameters.
********************************************************************/
VOID
Client_OnDrawItem(
HWND hwnd,
const DRAWITEMSTRUCT * pdis
)
{
Listbox_DrawItem( pdis );
} // Client_OnDrawItem
/*******************************************************************
NAME: Client_OnMeasureItem
SYNOPSIS: Handles WM_MEASUREITEM messages.
ENTRY: hwnd - Window handle.
pmis - Pointer to MEASUREITEMSTRUCT containing the
measurement parameters.
********************************************************************/
VOID
Client_OnMeasureItem(
HWND hwnd,
MEASUREITEMSTRUCT * pmis
)
{
Listbox_MeasureItem( pmis );
} // Client_OnMeasureItem
/*******************************************************************
NAME: Client_OnCompareItem
SYNOPSIS: Handles WM_COMPAREITEM messages.
ENTRY: hwnd - Window handle.
pcis - Pointer to the COMPAREITEMSTRUCT containing the
compare parameters.
********************************************************************/
INT
Client_OnCompareItem(
HWND hwnd,
const COMPAREITEMSTRUCT * pcis
)
{
return Listbox_CompareItems( pcis );
} // Client_OnCompareItem
/*******************************************************************
NAME: Client_OnDeleteItem
SYNOPSIS: Handles WM_DELETEITEM messages.
ENTRY: hwnd - Window handle.
pdis - Pointer to the DELETEITEMSTRUCT containing the
delete parameters.
********************************************************************/
VOID
Client_OnDeleteItem(
HWND hwnd,
const DELETEITEMSTRUCT * pdis
)
{
Listbox_DeleteItem( pdis );
} // Client_OnDeleteItem