Listing 3: The WinTerm, Run, and WinMain functions (wndmain.c)
#include "resource.h"
static void WinTerm( void )
{
/* Reset initial condition */
tFocus.posWnd = WIN_MENU;
tFocus.posCol = COL0;
tFocus.posRow = ROW0;
objWndApp.objWndMenu.m_bDirty = FALSE;
}
static void Run( UINT message, LPARAM lparam, PARAM wparam )
{
switch (message) {
case WM_CREATE:
/* Performing Functional Binding */
InitInstance();
/* Call the constructors for each of the foundation class objects */
Construct();
break;
case WM_ACTIVATE:
/* Set Position in the Navigation Grid */
tFocus.posWnd = IDW_MENU;
tFocus.posCol = COL2;
tFocus.posRow = ROW3;
/* Paint the Menu */
objWndApp.objWndMenu.m_bDirty = TRUE;
objWndApp.objWndMenu.Activate( &objWndApp.objWndMenu, message, lparam, wparam );
break;
case WM_DESTROY:
WinTerm();
break;
case WM_KEYDOWN:
switch (wparam) {
case WM_CMD_KEY_UP_ARROW:
if (tNavControlObjects[ tFocus.posWnd ][ tFocus.posRow - 1 ][ tFocus.posCol ] != ID_EMPTY) {
objWndApp.objWndMenu.Deactivate( &objWndApp.objWndMenu, message, lparam, wparam );
tFocus.posRow-;
}
break;
case WM_CMD_KEY_DOWN_ARROW:
if (tNavControlObjects[ tFocus.posWnd ][ tFocus.posRow + 1 ][ tFocus.posCol ] != ID_EMPTY) {
objWndApp.objWndMenu.Deactivate( &objWndApp.objWndMenu, message, lparam, wparam );
tFocus.posRow++;
}
break;
case WM_CMD_KEY_LEFT_ARROW:
if (tNavControlObjects[ tFocus.posWnd ][ tFocus.posRow ][ tFocus.posCol - 1 ] != ID_EMPTY) {
objWndApp.objWndMenu.Deactivate( &objWndApp.objWndMenu, message, lparam, wparam );
tFocus.posCol-;
}
break;
case WM_CMD_KEY_RIGHT_ARROW:
if (tNavControlObjects[ tFocus.posWnd ][ tFocus.posRow ][ tFocus.posCol + 1 ] != ID_EMPTY) {
objWndApp.objWndMenu.Deactivate( &objWndApp.objWndMenu, message, lparam, wparam );
tFocus.posCol++;
}
break;
default: /* Key Not Handled */
break;
}
objWndApp.objWndMenu.Activate( &objWndApp.objWndMenu, message, lparam, wparam );
break;
}
}
extern void WinMain( void )
{
UINT message = WM_NONE;
LPARAM lparam = 0;
WPARAM wparam = 0;
/* Receive Messages */
while (1) {
wparam = 0;
lparam = 0;
ReceiveMsg(&message);
ReadMsg(&message);
switch (message) {
case INITIALIZE:
message = WM_CREATE; wparam = WM_CMD_KEY_NONE; break;
case ACTIVATE:
message = WM_ACTIVATE; wparam = WM_CMD_KEY_NONE; break;
case DEINITIALIZE:
message = WM_DESTROY; wparam = WM_CMD_KEY_NONE; break;
case ACTION:
message = WM_KEYDOWN; wparam = WM_CMD_KEY_ACTION; break;
case ARROW_UP:
message = WM_KEYDOWN; wparam = WM_CMD_KEY_UP_ARROW; break;
case ARROW_DOWN:
message = WM_KEYDOWN; wparam = WM_CMD_KEY_DOWN_ARROW; break;
case ARROW_LEFT:
message = WM_KEYDOWN; wparam = WM_CMD_KEY_LEFT_ARROW; break;
case RROW_RIGHT:
message = WM_KEYDOWN; wparam = WM_CMD_KEY_RIGHT_ARROW; break;
}
Run( message, lparam, wparam );
}
}
|