mirror of https://github.com/lianthony/NT4.0
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
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
|
|
|