wdlg.c

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 240 行

C
240
字号
#include <windows.h>
#include <stdio.h>
#include "watzee.h"


/*
 * AboutDlgProc -- About Box dialog
 */

extern BOOL _EXPORT FAR PASCAL AboutDialogProc( HWND hdlg, WORD message,
                                                WORD wparam, LONG lparam )
/************************************************************************/
{
    lparam = lparam;            /* shut compiler up */
    switch( message ) {
    case WM_INITDIALOG :
        return( TRUE );
    case WM_CLOSE :
        EndDialog( hdlg, 0 );
        return( TRUE );
    case WM_COMMAND :
        switch( wparam ) {
        case IDD_OK :
            EndDialog( hdlg, 0 );
            return( TRUE );
        }
        break;
    }
    return( FALSE );
}



/*
 * GetNumPlayersDlgProc -- dialog box to get the number of players
 */

extern BOOL _EXPORT FAR PASCAL GetNumPlayersDialogProc( HWND hdlg,
                                                        WORD message,
                                                        WORD wparam,
                                                        LONG lparam )
/********************************************************************/
{

    lparam = lparam;    /* shut compiler up*/

    switch( message ) {
    case WM_INITDIALOG :
        return( TRUE );
    case WM_COMMAND :
        if( wparam >= '1' && wparam <= '5' ) {
            NumberOfPlayers = (short) (wparam - '0');
            EndDialog( hdlg, 0 );
            return( TRUE );
        }
    }
    return( FALSE );
}



/*
 * GetInitialsDialogProc -- dialog box to get the players' initials
 */

extern BOOL _EXPORT FAR PASCAL GetInitialsDialogProc( HWND hdlg,
                                                       WORD message,
                                                       WORD wparam,
                                                       LONG lparam )
/******************************************************************/
{
    static short        player;
    static short        initial;
    static RECT         rect;
    char                numberstring[4];
    PAINTSTRUCT         ps;
    HDC                 hdc;

    lparam = lparam;    /* shut compiler up*/
    switch( message ) {
    case WM_INITDIALOG :
        EnableWindow( GetDlgItem( hdlg, IDD_OK ), FALSE );
        player = 0;
        initial = 0;
        rect.top = 8 * SysHeight / 3 + 2;
        rect.bottom = rect.top + SysHeight + SysHeight / 2 - 4;
        rect.left = CharWidth * 10;
        rect.right = rect.left + CharWidth * 5;
        SetFocus( hdlg );
        return( TRUE );
    case WM_COMMAND :
        hdc = GetDC( hdlg );
        SelectObject( hdc, GetStockObject( SYSTEM_FONT ) );
        if( wparam >= 'A' && wparam <= 'Z' ) {
            EnableWindow( GetDlgItem( hdlg, IDD_OK ), TRUE );
            EnableWindow( GetDlgItem( hdlg, IDD_PC ), FALSE );
            PlayerName[player][initial] = (char) wparam;
            if( initial < 2 ) {
                initial++;
                PlayerName[player][initial] = NULL;
            }
            Rectangle( hdc, rect.left, rect.top-2, rect.right, rect.bottom );
            DrawText( hdc,PlayerName[player],-1,&rect,DT_CENTER|DT_VCENTER );
        } else {
            switch( wparam ) {
            case IDD_CLEAR :
                EnableWindow( GetDlgItem( hdlg, IDD_OK ), FALSE );
                EnableWindow( GetDlgItem( hdlg, IDD_PC), TRUE );
                sprintf( PlayerName[player], "   " );
                initial = 0;
                Rectangle( hdc,rect.left,rect.top-2,rect.right,rect.bottom );
                break;
            case IDD_PC :
                EnableWindow( GetDlgItem( hdlg, IDD_OK ), TRUE );
                sprintf( PlayerName[player], "PC" );
                Player[player][IS_COMPUTER] = TRUE;
                DrawText( hdc, "PC", 2, &rect, DT_CENTER|DT_VCENTER );
                SendMessage( hdlg, WM_COMMAND, IDD_OK, 0 );
                break;
            case IDD_OK :
                if( player+1 == NumberOfPlayers ) {
                    EndDialog( hdlg, 0 );
                } else {
                    EnableWindow( GetDlgItem( hdlg, IDD_OK ), FALSE );
                    EnableWindow( GetDlgItem( hdlg, IDD_PC ), TRUE );
                    if( LOWORD( GetTextExtent( hdc, PlayerName[player],
                                               initial ) ) > 24 ) {
                        PlayerName[player][1] = PlayerName[player][2];
                        PlayerName[player][2] = NULL;
                    }
                    player++;
                    initial = 0;
                    sprintf( numberstring, "%d :", player+1 );
                    TextOut(hdc, 17*CharWidth/2, 11*SysHeight/4,
                            numberstring, 3);
                    Rectangle(hdc,rect.left,rect.top-2,rect.right,rect.bottom);
                }
                SetFocus( hdlg );
                break;
            default :
                return( FALSE );
            }
        }
        ReleaseDC( hdlg, hdc );
        return( TRUE );
    case WM_PAINT :
        hdc = BeginPaint( hdlg, &ps );
        SelectObject( hdc, GetStockObject( SYSTEM_FONT ) );
        sprintf( numberstring, "%d :", player+1 );
        TextOut( hdc, 17*CharWidth/2, 11*SysHeight/4, numberstring, 3 );
        Rectangle( hdc, rect.left, rect.top-2, rect.right, rect.bottom );
        DrawText( hdc, PlayerName[player], -1, &rect, DT_CENTER|DT_VCENTER );
        EndPaint( hdlg, &ps );
        return( TRUE );
    }
    return( FALSE );
}



/*
 * HelpDialogProc -- dialog to display the scoring rules
 */

extern BOOL _EXPORT FAR PASCAL HelpDialogProc( HWND hdlg, WORD message,
                                               WORD wparam, LONG lparam )
/***********************************************************************/
{
    lparam = lparam;    /* shut compiler up*/
    switch( message ) {
    case WM_INITDIALOG :
        return( TRUE );
    case WM_CLOSE :
        EndDialog( hdlg, 0 );
        return( TRUE );
    case WM_COMMAND :
        switch( wparam ) {
        case IDD_OK :
            EndDialog( hdlg, 0 );
            return( TRUE );
        }
        break;
    }
    return( FALSE );
}



/*
 * OptionsDialogProc -- options dialog box
 */

extern BOOL _EXPORT FAR PASCAL OptionsDialogProc( HWND hdlg, WORD message,
                                                 WORD wparam, LONG lparam )
/*************************************************************************/
{
    static BOOL old_diecheck;
    static BOOL old_resetdiechecks;

    lparam = lparam;    /* shut compiler up*/
    switch( message ) {
    case WM_INITDIALOG :
        old_diecheck = DieCheckMeansRoll;
        old_resetdiechecks = ResetDieChecks;
        if( DieCheckMeansRoll ) {
            CheckRadioButton( hdlg, IDD_ROLL, IDD_KEEP, IDD_ROLL );
        } else {
            CheckRadioButton( hdlg, IDD_ROLL, IDD_KEEP, IDD_KEEP );
        }
        CheckDlgButton( hdlg, IDD_RESET, (WORD) ResetDieChecks );
        return( TRUE );
    case WM_CLOSE :
        SendMessage( hdlg, WM_COMMAND, IDD_CANCEL, 0 );
        return( 0 );
    case WM_COMMAND :
        switch( wparam ) {
        case IDD_CANCEL :
            DieCheckMeansRoll = old_diecheck;
            ResetDieChecks = old_resetdiechecks;        // fall through
        case IDD_OK :
            EndDialog( hdlg, 0 );
            return( TRUE );
        case IDD_ROLL :
            DieCheckMeansRoll = TRUE;
            CheckRadioButton( hdlg, IDD_ROLL, IDD_KEEP, wparam );
            return( TRUE );
        case IDD_KEEP :
            DieCheckMeansRoll = FALSE;
            CheckRadioButton( hdlg, IDD_ROLL, IDD_KEEP, wparam );
            return( TRUE );
        case IDD_RESET :
            ResetDieChecks = !ResetDieChecks;
            CheckDlgButton( hdlg, IDD_RESET, (WORD) ResetDieChecks );
            return( TRUE );
        }
        return( FALSE );
    }
    return( FALSE );
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?