home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Windoware
/
WINDOWARE_1_6.iso
/
source
/
cdbw
/
sample.c
< prev
next >
Wrap
Text File
|
1991-05-16
|
10KB
|
338 lines
/*
* SAMPLE.C
*
* This module contains the WinMain, WndProc, and initialization functions
* for SAMPLE.EXE
*
* Copyright (C) 1991 by Daytris. All rights reserved.
*/
#include <windows.h>
#include <stdio.h>
#include "dbmgr.h"
#include "sampledb.h"
#include "sample.h"
/************************************************
* Function Declarations
************************************************/
int PASCAL WinMain( HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpCmdLine,
int nCmdShow);
BOOL InitApplication( HANDLE hInstance);
HWND InitInstance( HANDLE hInstance, short nCmdShow);
static BOOL InitDatabase( HWND hParentWnd);
long FAR PASCAL WndProc( HWND hWnd, unsigned uMessage, WORD wParam,
LONG lParam);
static void InitMainWindow( HWND hWnd);
/************************************************
* Local Data
************************************************/
static char szAppName[] = "Sample"; /* Class name */
/************************************************
* Global Data
************************************************/
HANDLE hInst; /* Instance handle */
HANDLE hDb; /* Database handle */
HWND hWndClientLB; /* Client listbox handle */
SETUP setup; /* Setup record */
BOOL bSortByNumber = TRUE; /* Client listbox sort seq */
/***************************************************************************
* Function : WinMain
*
* Purpose : This function is the entry function for SAMPLE.EXE.
*
* Returns : FALSE - error in initialization
* MSG.wParam
***************************************************************************/
int PASCAL WinMain( HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpCmdLine,
int nCmdShow)
{
HANDLE hWnd;
MSG msg;
if( ! hPrevInstance)
{
if( ! InitApplication( hInstance))
return FALSE;
}
if( ! (hWnd = InitInstance( hInstance, nCmdShow)) )
return FALSE;
/* Initialize the database */
if( ! InitDatabase( hWnd))
return FALSE;
/* Load the client listbox */
LoadClientListBox( hWnd);
while( GetMessage( &msg, NULL, NULL, NULL))
{
TranslateMessage( &msg);
DispatchMessage( &msg);
}
return msg.wParam;
}
/***************************************************************************
* Function : InitApplication
*
* Purpose : This function registers the SAMPLE class.
*
* Returns : RegisterClass return value
***************************************************************************/
BOOL InitApplication( HANDLE hInstance)
{
WNDCLASS wc;
wc.style = NULL;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = DLGWINDOWEXTRA;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon( NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor( NULL, IDC_ARROW);
wc.hbrBackground = GetStockObject( WHITE_BRUSH);
wc.lpszMenuName = (LPSTR)"SAMPLE";
wc.lpszClassName = (LPSTR)szAppName;
return( RegisterClass( &wc));
}
/***************************************************************************
* Function : InitInstance
*
* Purpose : The function initializes the instance creating a main
* window.
*
* Returns : >0 - window handle
* NULL - window not created
***************************************************************************/
HWND InitInstance( HANDLE hInstance, short nCmdShow)
{
HWND hWnd;
/* Save the instance handle globally */
hInst = hInstance;
/* Create the main window */
hWnd = CreateWindow( szAppName,
"CDB Sample Program (Client List)",
WS_OVERLAPPED | WS_BORDER | WS_CAPTION | WS_SYSMENU |
WS_MINIMIZEBOX | WS_THICKFRAME,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
if( ! hWnd)
return NULL;
/* Display the window */
ShowWindow( hWnd, nCmdShow);
UpdateWindow( hWnd);
return hWnd;
}
/***************************************************************************
* Function : InitDatabase
*
* Purpose : This function opens SAMPLEDB.DBD and retrieves the setup
* record. If no setup record exists, one is created. Only
* one setup record is used in SAMPLE.EXE.
*
* Returns : TRUE - database initialized
* FALSE - database not initialized
***************************************************************************/
static BOOL InitDatabase( HWND hParentWnd)
{
DWORD dwStatus;
/* Open the sample database. Use the current directory for database
file creation and retrieval */
if( dwStatus = DbOpen( hParentWnd, ".\\", "sampledb.dbd", &hDb))
{
DbError( hParentWnd, dwStatus, __FILE__, __LINE__);
return FALSE;
}
/* Get the setup record. If it does not exist, create one. */
dwStatus = XDbRecordGetFirst( hDb, "setup", "lNextClientNbr", &setup,
sizeof( SETUP));
if( dwStatus == E_NOTFOUND)
{
/* Starting client number is 1000. Add record. */
setup.lNextClientNbr = 1000L;
dwStatus = XDbRecordAdd( hDb, "setup", &setup, sizeof( SETUP));
}
if( dwStatus)
{
DbError( hParentWnd, dwStatus, __FILE__, __LINE__);
DbClose( hDb);
return FALSE;
}
/* Flush the setup record to disk */
DbFlush( hDb);
return TRUE;
}
/***************************************************************************
* Function : WndProc
*
* Purpose : This function is the window procedure for SAMPLE.EXE
*
* Returns : 0L - message processed by function
* DefWndProc value
***************************************************************************/
long FAR PASCAL WndProc( HWND hWnd, unsigned uMessage, WORD wParam,
LONG lParam)
{
HANDLE hMenu;
switch( uMessage)
{
case WM_CREATE:
InitMainWindow( hWnd);
return 0L;
case WM_SETFOCUS:
SetFocus( hWndClientLB);
return 0L;
case WM_COMMAND:
switch( wParam)
{
case IDC_CLIENT_LISTBOX:
if( HIWORD( lParam) == LBN_DBLCLK)
SendMessage( hWnd, WM_COMMAND, IDM_UPDATE, 0L);
break;
case IDM_ADD:
AddClientDlg( hWnd);
break;
case IDM_UPDATE:
UpdateClientDlg( hWnd);
break;
case IDM_DELETE:
DeleteClientDlg( hWnd);
break;
case IDM_SORT_BY_NUMBER:
if( bSortByNumber)
break;
hMenu = GetMenu( hWnd);
CheckMenuItem( hMenu, IDM_SORT_BY_NAME, MF_UNCHECKED);
CheckMenuItem( hMenu, IDM_SORT_BY_NUMBER, MF_CHECKED);
bSortByNumber = TRUE;
LoadClientListBox( hWnd);
break;
case IDM_SORT_BY_NAME:
if( ! bSortByNumber)
break;
hMenu = GetMenu( hWnd);
CheckMenuItem( hMenu, IDM_SORT_BY_NUMBER, MF_UNCHECKED);
CheckMenuItem( hMenu, IDM_SORT_BY_NAME, MF_CHECKED);
bSortByNumber = FALSE;
LoadClientListBox( hWnd);
break;
case IDM_ABOUT:
AboutDlg( hWnd);
break;
case IDM_EXIT:
PostMessage( hWnd, WM_DESTROY, 0, 0L);
break;
}
return 0L;
case WM_DESTROY:
{
DWORD dwStatus;
if( dwStatus = DbClose( hDb))
DbError( hWnd, dwStatus, __FILE__, __LINE__);
PostQuitMessage( 0);
return 0L;
}
}
return( DefWindowProc( hWnd, uMessage, wParam, lParam));
}
/***************************************************************************
* Function : InitMainWindow
*
* Purpose : This function sizes the main window and creates a client
* listbox window.
*
* Returns : n/a
***************************************************************************/
static void InitMainWindow( HWND hWnd)
{
short xChar, yChar;
HDC hDC;
TEXTMETRIC tm;
RECT rect;
/* Get the default window parameters */
hDC = GetDC( hWnd);
GetTextMetrics( hDC, &tm);
ReleaseDC( hWnd, hDC);
GetWindowRect( hWnd, &rect);
xChar = tm.tmAveCharWidth;
yChar = tm.tmHeight + tm.tmExternalLeading;
/* Size the window */
MoveWindow( hWnd,
rect.left,
rect.top,
xChar * WINDOW_WIDTH + (GetSystemMetrics( SM_CXFRAME) * 2),
(yChar * (LISTBOX_Y + 1)) + (tm.tmHeight * LISTBOX_LENGTH) +
GetSystemMetrics( SM_CYCAPTION) + GetSystemMetrics( SM_CYMENU),
FALSE);
/* Create the listbox */
GetClientRect( hWnd, &rect);
hWndClientLB = CreateWindow( "listbox",
NULL,
WS_CHILD | WS_VISIBLE | LBS_STANDARD,
rect.left + (xChar * LISTBOX_X),
rect.top + (yChar * LISTBOX_Y),
xChar * LISTBOX_WIDTH,
tm.tmHeight * LISTBOX_LENGTH,
hWnd,
IDC_CLIENT_LISTBOX,
hInst,
NULL);
/* Set listbox font to fixed size */
SendMessage( hWndClientLB, WM_SETFONT, GetStockObject( SYSTEM_FIXED_FONT),
0L);
}