This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/WATCOM/samples/win/datactl/testctl.c

261 lines
6.8 KiB
C
Raw Permalink Normal View History

#include <stdio.h>
#include <windows.h>
#include "testctl.h"
#include "ctltype.h" /* data control library stuff */
#include "dialog.h" /* control ids for the dialog */
#include "stddef.h" /* defines offsetof macro */
/*
* GetDcomboData: Data fetch routine for the dcombo control (dynamic combo box).
*
*/
char *GetDcomboData( int elt )
{
switch( elt ) { // index is always passed in 0 origin
case 0:
return( "This" );
case 1:
return( "is" );
case 2:
return( "a" );
case 3:
return( "Dynamic" );
case 4:
return( "Combo" );
case 5:
return( "Box" );
}
return( NULL );
}
typedef struct {
int list_1;
int list_2;
BOOL check;
int radio;
char text[100];
int number;
float value;
int list_3;
int range_num;
float range_value;
} dlg_data;
static dlg_data Data={
1, 0, TRUE, 1, "Bananas", 123, 123.456, 2, 10, -3
};
#include "testdata.h" // This file defines the Data control
static char TestCtlClass[32]="TestCtlClass";
static BOOL FirstInstance( HINSTANCE );
static BOOL AnyInstance( HINSTANCE, int, LPSTR );
long _EXPORT FAR PASCAL WindowProc( HWND, unsigned, UINT, LONG );
/*
* WinMain - initialization, message loop
*/
int PASCAL WinMain( HINSTANCE this_inst, HINSTANCE prev_inst, LPSTR cmdline,
int cmdshow )
{
MSG msg;
prev_inst = prev_inst;
#ifdef __WINDOWS_386__
sprintf( TestCtlClass,"TestCtlClass%d",this_inst );
#else
if( !prev_inst )
#endif
if( !FirstInstance( this_inst ) ) return( FALSE );
if( !AnyInstance( this_inst, cmdshow, cmdline ) ) return( FALSE );
while( GetMessage( &msg, (HWND)0, 0, 0 ) ) {
TranslateMessage( &msg );
DispatchMessage( &msg );
}
return( msg.wParam );
} /* WinMain */
/*
* FirstInstance - register window class for the application,
* and do any other application initialization
*/
static BOOL FirstInstance( HINSTANCE this_inst )
{
WNDCLASS wc;
BOOL rc;
/*
* set up and register window class
*/
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (LPVOID) WindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = this_inst;
wc.hIcon = LoadIcon( this_inst, IDI_APPLICATION );
wc.hCursor = LoadCursor( (HINSTANCE)0, IDC_ARROW );
wc.hbrBackground = GetStockObject( WHITE_BRUSH );
wc.lpszMenuName = "TestCtlMenu";
wc.lpszClassName = TestCtlClass;
rc = RegisterClass( &wc );
return( rc );
} /* FirstInstance */
/*
* AnyInstance - do work required for every instance of the application:
* create the window, initialize data
*/
static BOOL AnyInstance( HINSTANCE this_inst, int cmdshow, LPSTR cmdline )
{
HWND wind_handle;
cmdline = cmdline;
/*
* create main window
*/
wind_handle = CreateWindow(
TestCtlClass, /* class */
"Open Watcom Data Control Test Program", /* caption */
WS_OVERLAPPEDWINDOW, /* style */
CW_USEDEFAULT, /* init. x pos */
CW_USEDEFAULT, /* init. y pos */
CW_USEDEFAULT, /* init. x size */
CW_USEDEFAULT, /* init. y size */
(HWND)0, /* parent window */
(HMENU)0, /* menu handle */
this_inst, /* program handle */
NULL /* create parms */
);
if( !wind_handle ) return( FALSE );
/*
* display window
*/
ShowWindow( wind_handle, cmdshow );
UpdateWindow( wind_handle );
return( TRUE );
} /* AnyInstance */
/*
* AboutDlgProc - processes messages for the about dialogue.
*/
BOOL _EXPORT FAR PASCAL About( HWND window_handle, unsigned msg,
UINT wparam, LONG lparam )
{
lparam = lparam; /* turn off warning */
window_handle = window_handle;
switch( msg ) {
case WM_INITDIALOG:
return( TRUE );
case WM_COMMAND:
if( LOWORD( wparam ) == IDOK ) {
EndDialog( window_handle, TRUE );
return( TRUE );
}
break;
}
return( FALSE );
} /* AboutDlgProc */
/*
* DataCtlProc - processes messages for the Data Control Dialog
*/
BOOL _EXPORT FAR PASCAL DataCtlProc( HWND window_handle, unsigned msg,
UINT wparam, LONG lparam )
{
HINSTANCE hinst;
switch( msg ) {
case WM_INITDIALOG:
/* get the controls in the dialog initialized with the correct
settings based on the control data */
hinst = GET_HINST( window_handle );
ctl_dlg_init( hinst, window_handle, &Data, &CtlData );
return( TRUE ); // let WINDOWS set the input focus
case WM_COMMAND:
switch( LOWORD( wparam ) ) {
case IDOK:
hinst = GET_HINST( window_handle );
if( !ctl_dlg_done( hinst, window_handle, &Data, &CtlData ) ) {
/* some control on the dialog is set with invalid data...
must continue processing until they enter valid data */
return( TRUE );
}
/* DROP DOWN INTO THE IDCANCEL CASE when the dialog verifies ok */
case IDCANCEL:
EndDialog( window_handle, TRUE ); /* Exits the dialog box */
return( TRUE );
}
/* let the data control library look at the message to see if any
controls have been modified */
ctl_dlg_process( &CtlData, wparam, lparam );
}
return( FALSE );
} /* DataCtlProc */
/*
* WindowProc - handle messages for the main application window
*/
LONG _EXPORT FAR PASCAL WindowProc( HWND window_handle, unsigned msg,
UINT wparam, LONG lparam )
{
FARPROC proc;
HANDLE inst_handle;
switch( msg ) {
case WM_COMMAND:
switch( LOWORD( wparam ) ) {
case MENU_ABOUT:
inst_handle = GET_HINST( window_handle );
proc = MakeProcInstance( (FARPROC)About, inst_handle );
DialogBox( inst_handle,"AboutBox", window_handle, (DLGPROC)proc );
FreeProcInstance( proc );
break;
case MENU_DIALOG:
inst_handle = GET_HINST( window_handle );
proc = MakeProcInstance( (FARPROC)DataCtlProc, inst_handle );
DialogBox( inst_handle,"DATACTL", window_handle, (DLGPROC)proc );
FreeProcInstance( proc );
break;
}
break;
case WM_DESTROY:
PostQuitMessage( 0 );
break;
default:
return( DefWindowProc( window_handle, msg, wparam, lparam ) );
}
return( 0L );
} /* WindowProc */