commdlg.c

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

C
289
字号
/****************************************************************************
*
*                            Open Watcom Project
*
*    Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
*
*  ========================================================================
*
*    This file contains Original Code and/or Modifications of Original
*    Code as defined in and that are subject to the Sybase Open Watcom
*    Public License version 1.0 (the 'License'). You may not use this file
*    except in compliance with the License. BY USING THIS FILE YOU AGREE TO
*    ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
*    provided with the Original Code and Modifications, and is also
*    available at www.sybase.com/developer/opensource.
*
*    The Original Code and all software distributed under the License are
*    distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
*    EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
*    ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
*    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
*    NON-INFRINGEMENT. Please see the License for the specific language
*    governing rights and limitations under the License.
*
*  ========================================================================
*
* Description:  Covers for commdlg.dll functions.
*
****************************************************************************/


#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include <dos.h>
#include <windows.h>
#include <commdlg.h>
#include "stubs.h"

#pragma aux BackPatch_commdlg parm [ax];
extern LPVOID FAR BackPatch_commdlg( char *str );

static BOOL  (FAR PASCAL *commdlgChooseColor)(LPCHOOSECOLOR);
static HWND  (FAR PASCAL *commdlgReplaceText)(LPFINDREPLACE);
static HWND  (FAR PASCAL *commdlgFindText)(LPFINDREPLACE);
static BOOL  (FAR PASCAL *commdlgChooseFont)(LPCHOOSEFONT);
static BOOL  (FAR PASCAL *commdlgGetOpenFileName)(LPOPENFILENAME);
static BOOL  (FAR PASCAL *commdlgGetSaveFileName)(LPOPENFILENAME);
static BOOL  (FAR PASCAL *commdlgPrintDlg)(LPPRINTDLG);

/*
 * __ChooseColor - cover for common dialog ChooseColor
 */
BOOL  FAR PASCAL __ChooseColor( LPCHOOSECOLOR pcc )
{
    BOOL        rc;
    LPVOID      psave;
    LPVOID      pnew;

    if( commdlgChooseColor == NULL ) {
        commdlgChooseColor = BackPatch_commdlg( "ChooseColor" );
        if( commdlgChooseColor == NULL ) return( 0 );
    }
    pnew = psave = pcc->lpCustColors;
    GetAlias( &pnew );
    pcc->lpCustColors = pnew;
    rc = commdlgChooseColor( pcc );
    ReleaseAlias( psave, pnew );
    pcc->lpCustColors = psave;

    return( rc );

} /* ChooseColor */

/*
 * __ReplaceText - cover for common dialog ReplaceText
 */
HWND FAR PASCAL __ReplaceText( LPFINDREPLACE pfr )
{
    HWND        rc;
    LPVOID      psave1,psave2,psave3;
    LPVOID      pnew1,pnew2,pnew3;

    if( commdlgReplaceText == NULL ) {
        commdlgReplaceText = BackPatch_commdlg( "ReplaceText" );
        if( commdlgReplaceText == NULL ) return( 0 );
    }
    pnew1 = psave1 = pfr->lpstrFindWhat;
    pnew2 = psave2 = pfr->lpstrReplaceWith;
    pnew3 = psave3 = pfr->lpTemplateName;
    GetAlias( &pnew1 );
    GetAlias( &pnew2 );
    GetAlias( &pnew3 );
    pfr->lpstrFindWhat = pnew1;
    pfr->lpstrReplaceWith = pnew2;
    pfr->lpTemplateName = pnew3;

    rc = commdlgReplaceText( pfr );

    ReleaseAlias( psave1, pnew1 );
    ReleaseAlias( psave2, pnew2 );
    ReleaseAlias( psave3, pnew3 );
    pfr->lpstrFindWhat = psave1;
    pfr->lpstrReplaceWith = psave2;
    pfr->lpTemplateName = psave3;
    return( rc );

} /* __ReplaceText */

/*
 * __FindText - cover for common dialog FindText
 */
HWND FAR PASCAL __FindText( LPFINDREPLACE pfr )
{
    HWND        rc;
    LPVOID      psave1,psave2;
    LPVOID      pnew1,pnew2;


    if( commdlgFindText == NULL ) {
        commdlgFindText = BackPatch_commdlg( "FindText" );
        if( commdlgFindText == NULL ) return( 0 );
    }
    pnew1 = psave1 = pfr->lpstrFindWhat;
    pnew2 = psave2 = pfr->lpTemplateName;
    GetAlias( &pnew1 );
    GetAlias( &pnew2 );
    pfr->lpstrFindWhat = pnew1;
    pfr->lpTemplateName = pnew2;

    rc = commdlgFindText( pfr );

    ReleaseAlias( psave1, pnew1 );
    ReleaseAlias( psave2, pnew2 );
    pfr->lpstrFindWhat = psave1;
    pfr->lpTemplateName = psave2;
    return( rc );

} /* __FindText */

/*
 * __ChooseFont - cover for common dialog ChooseFont
 */
BOOL FAR PASCAL __ChooseFont( LPCHOOSEFONT pcf )
{
    BOOL        rc;
    LPVOID      psave1,psave2,psave3;
    LPVOID      pnew1,pnew2,pnew3;

    if( commdlgChooseFont == NULL ) {
        commdlgChooseFont = BackPatch_commdlg( "ChooseFont" );
        if( commdlgChooseFont == NULL ) return( 0 );
    }
    pnew1 = psave1 = pcf->lpLogFont;
    pnew2 = psave2 = pcf->lpTemplateName;
    pnew3 = psave3 = pcf->lpszStyle;
    GetAlias( &pnew1 );
    GetAlias( &pnew2 );
    GetAlias( &pnew3 );
    pcf->lpLogFont = pnew1;
    pcf->lpTemplateName = pnew2;
    pcf->lpszStyle = pnew3;

    rc = commdlgChooseFont( pcf );

    ReleaseAlias( psave1, pnew1 );
    ReleaseAlias( psave2, pnew2 );
    ReleaseAlias( psave3, pnew3 );
    pcf->lpLogFont = psave1;
    pcf->lpTemplateName = psave2;
    pcf->lpszStyle = psave3;
    return( rc );

} /* __ChooseFont */

/*
 * GetSaveOrOpenFileName
 */
static BOOL GetSaveOrOpenFileName( FARPROC fp, LPOPENFILENAME pofn )
{
    BOOL                rc;
    LPVOID              psave1,psave2,psave3,psave4;
    LPVOID              psave5,psave6,psave7,psave8;
    LPVOID              pnew1,pnew2,pnew3,pnew4;
    LPVOID              pnew5,pnew6,pnew7,pnew8;

    pnew1 = psave1 = pofn->lpstrFilter;
    pnew2 = psave2 = pofn->lpstrCustomFilter;
    pnew3 = psave3 = pofn->lpstrFile;
    pnew4 = psave4 = pofn->lpstrFileTitle;
    pnew5 = psave5 = pofn->lpstrInitialDir;
    pnew6 = psave6 = pofn->lpstrTitle;
    pnew7 = psave7 = pofn->lpstrDefExt;
    pnew8 = psave8 = pofn->lpTemplateName;

    GetAlias( &pnew1 );
    GetAlias( &pnew2 );
    GetAlias( &pnew3 );
    GetAlias( &pnew4 );
    GetAlias( &pnew5 );
    GetAlias( &pnew6 );
    GetAlias( &pnew7 );
    GetAlias( &pnew8 );
    pofn->lpstrFilter = pnew1;
    pofn->lpstrCustomFilter = pnew2;
    pofn->lpstrFile = pnew3;
    pofn->lpstrFileTitle = pnew4;
    pofn->lpstrInitialDir = pnew5;
    pofn->lpstrTitle = pnew6;
    pofn->lpstrDefExt = pnew7;
    pofn->lpTemplateName = pnew8;

    rc = fp( (LPOPENFILENAME) pofn );

    ReleaseAlias( psave1, pnew1 );
    ReleaseAlias( psave2, pnew2 );
    ReleaseAlias( psave3, pnew3 );
    ReleaseAlias( psave4, pnew4 );
    ReleaseAlias( psave5, pnew5 );
    ReleaseAlias( psave6, pnew6 );
    ReleaseAlias( psave7, pnew7 );
    ReleaseAlias( psave8, pnew8 );
    pofn->lpstrFilter = psave1;
    pofn->lpstrCustomFilter = psave2;
    pofn->lpstrFile = psave3;
    pofn->lpstrFileTitle = psave4;
    pofn->lpstrInitialDir = psave5;
    pofn->lpstrTitle = psave6;
    pofn->lpstrDefExt = psave7;
    pofn->lpTemplateName = psave8;
    return( rc );

} /* GetSaveOrOpenFileName */

/*
 * __GetOpenFileName - cover for common dialog GetOpenFileName
 */
BOOL FAR PASCAL __GetOpenFileName( LPOPENFILENAME pofn )
{
    if( commdlgGetOpenFileName == NULL ) {
        commdlgGetOpenFileName = BackPatch_commdlg( "GetOpenFileName" );
        if( commdlgGetOpenFileName == NULL ) return( 0 );
    }
    return( GetSaveOrOpenFileName( commdlgGetOpenFileName, pofn ) );
} /* __GetOpenFileName */

/*
 * __GetSaveFileName - cover for common dialog GetSaveFileName
 */
BOOL FAR PASCAL __GetSaveFileName( LPOPENFILENAME pofn )
{
    if( commdlgGetSaveFileName == NULL ) {
        commdlgGetSaveFileName = BackPatch_commdlg( "GetSaveFileName" );
        if( commdlgGetSaveFileName == NULL ) return( 0 );
    }
    return( GetSaveOrOpenFileName( commdlgGetSaveFileName, pofn ) );

} /* __GetSaveFileName */

/*
 * __PrintDlg - cover for common dialog PrintDlg
 */
BOOL FAR PASCAL __PrintDlg( LPPRINTDLG ppd )
{
    BOOL        rc;
    LPVOID      psave1,psave2;
    LPVOID      pnew1,pnew2;

    if( commdlgPrintDlg == NULL ) {
        commdlgPrintDlg = BackPatch_commdlg( "PrintDlg" );
        if( commdlgPrintDlg == NULL ) return( 0 );
    }
    pnew1 = psave1 = ppd->lpPrintTemplateName;
    pnew2 = psave2 = ppd->lpSetupTemplateName;
    GetAlias( &pnew1 );
    GetAlias( &pnew2 );
    ppd->lpPrintTemplateName = pnew1;
    ppd->lpSetupTemplateName = pnew2;

    rc = commdlgPrintDlg( ppd );

    ReleaseAlias( psave1, pnew1 );
    ReleaseAlias( psave2, pnew2 );
    ppd->lpPrintTemplateName = psave1;
    ppd->lpSetupTemplateName = psave1;
    return( rc );

} /* __PrintDlg */

⌨️ 快捷键说明

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