File:  [OS/2 SDKs] / pmsdk / samples / browse / brownres.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Thu Aug 9 12:28:13 2018 UTC (7 years, 9 months ago) by root
Branches: msft, MAIN
CVS tags: pmsdk-1988, HEAD
Microsoft OS/2 SDK PM 08-08-1988

/****************************** Module Header ******************************\
* Module Name: skelnres.c
*
*   Non-resident portion of Presentation Manager Skel Application
*
*   It illustrates the building of a class record, the registering of
*   that class record with Presentattion Manager and the creation of a window
*   of that class.  See Skel.DEF for the associated module definition
*   file
*
*   This is a MIDDLE model application, it has three code segments _RES, _INIT
*   and _NRES and one data segment _DATA.
*
*    For MIDDLE model, procedures that are accessed from another segment
*    must be declared FAR (see browse.h).
*
*    Code that is NOT part of the Skel but is merely for demo purposes is
*    marked as being for demo purposes and should be replaced/removed when this
*    Skel is converted to a real application.
*
* Created: 25-Jul-88  (adapted from PM Template App.)
*
* Created by Microsoft Corporation
*
*
\***************************************************************************/

#define INCL_GPI
#define INCL_WIN
#define INCL_AVIO
#define INCL_BASE

#include <stdlib.h>
#include <os2.h>
#include <stdio.h>
#include "browse.h"

/* min and max macros */
#define max(a,b)    (((a) > (b)) ? (a) : (b))
#define min(a,b)    (((a) < (b)) ? (a) : (b))

HAB     hAB;
HMQ     hMsgQ;
HWND	hwndSkel;
HWND	hwndSkelFrame;
HDC	hDC;
HVPS	hVPS;
HPS	hPS;
USHORT Vid_Cols, Vid_Rows;

/************************************************************************\
*  The following following are variables and definitions that are part of
*  the Skel only for demo purposes and will be replaced when the
*  Skel is converted to an application
\************************************************************************/

#define RGBBLACK 0L
#define CCHSTR 15
#define CSTR    7
#define POSMIN  0
#define POSMAX  100
#define LINEINC 5
#define PAGEINC 25

CHAR    szContent[31];
CHAR    szStr[CCHSTR+1];
CHAR    szDefault[CCHSTR+1];
CHAR    szAppName[10];
BOOL    bCheckBox = TRUE;
BOOL    fDoAsync = FALSE;
BOOL    fDoFlash = FALSE;
SHORT   fDisplay = IDMCOLOR;
SHORT   cchContent;
SHORT   iSel = 2;
SHORT   posV = 50;
SHORT   posH = 50;

/*********** End of demo purpose variables and definitions ************/

/***********************************************************************\
*
*   Procedures in alphabetical order
*
\***********************************************************************/


ULONG FAR PASCAL SkelAboutDlg( hWndDlg, message, mp1, mp2 )
HWND   hWndDlg;
USHORT message;
MPARAM mp1;
MPARAM mp2;
{
    switch( message )
    {
      case WM_COMMAND:                  /* the user has pressed a button */
        switch( SHORT1FROMMP( mp1 ) )   /* which button? */
        {
          case DID_OK:
          case DID_CANCEL:
            WinDismissDlg( hWndDlg, TRUE );
            break;

          default:
            return( FALSE );
        }
        break;

      default:
	return( (ULONG) WinDefDlgProc( hWndDlg, message, mp1, mp2 ) );
    }
    return( FALSE );
}



VOID SkelCharInput( hWnd, ch, flags, cRepeat )
HWND  hWnd;
SHORT ch;
SHORT flags;
SHORT cRepeat;
{
    /* ignore cRepeat if you want to ignore auto-repeated keys */
    while (cRepeat-- != 0)
    {
    }
}

VOID SkelCommand(hWnd, id, source, mouse)
HWND  hWnd;
SHORT id;
SHORT source;
BOOL  mouse;
{
    /******* The code below is for demo purposes only *******/

    RECTL   rect;
    HPS     hPS;

    switch( id )
    {
        case IDMFLASH:
            WinQueryWindowRect( hWnd, (PRECTL)&rect );
            hPS = WinGetPS(hWnd );
            WinInvertRect( hPS, (PRECTL)&rect );
            WinInvertRect( hPS, (PRECTL)&rect );
            WinReleasePS( hPS );
            break;

        case IDMABOUT:
	    WinDlgBox( HWND_DESKTOP, hWnd, (PFNWP)SkelAboutDlg, NULL,
                           IDD_ABOUT, NULL );
            break;

    }
    /******* The code above is for demo purposes only *******/
}

VOID InvisoCursor()
{
    VIOCURSORINFO vci;
    vci.yStart = 0;	 /* beginning scan line for cursor */
    vci.cEnd = 0;	 /* ending scan line, zero-based   */
    vci.cx = 0; 	 /* default width, one character   */
    vci.attr = -1;	 /* invisible attribute 	   */
    VioSetCurType(&vci, hVPS);
}

VOID SkelCreate(hWnd, lParam)
HWND hWnd;
LONG lParam;
{
    char *pch1;
    char *pch2;

    /******* The code below is for demo purposes only *******/

    cchContent = WinLoadString(hAB, NULL, IDSCONTENT, sizeof(szContent),
                                 (PCH)szContent);

    WinLoadString(hAB, NULL, IDSDEFAULT, sizeof(szDefault), (PCH)szDefault);

    /* copy default string into szStr */
    for (pch1 = szStr, pch2 = szDefault; *pch1++ = *pch2++; )
        ;
    /******* The code above is for demo purposes only *******/

    /* open Device Context for the window   */
    /* hWnd is the client window	    */
    hDC = WinOpenWindowDC(hWnd);

    /* open PS for text drawing */
    VioCreatePS( &hVPS, VIO_PS_ROWS, VIO_PS_COLUMNS, 0, CATTRBYTES, 0);

    /* associate VIO PS with the device context */
    VioAssociate( hDC, hVPS);

    /* make cursor invisible */
    InvisoCursor();

}


VOID SkelSetFocus( hWnd )
HWND hWnd;
{
}



VOID SkelHorzScroll( hWnd, code, posNew )
HWND  hWnd;
SHORT code;
SHORT posNew;
{
    switch( code )
    {
	case SB_LINELEFT:	      /* line left */
	    ExecuteAction( CHAR_LEFT, posNew);
            break;
	case SB_LINERIGHT:	     /* line right */
	    ExecuteAction( CHAR_RIGHT, posNew);
            break;
	case SB_PAGELEFT:	      /* page left */
	    ExecuteAction( PAGE_LEFT, posNew);
            break;
	case SB_PAGERIGHT:	     /* page right */
	    ExecuteAction( PAGE_RIGHT, posNew);
            break;
        case SB_SLIDERPOSITION:     /* position to posNew */
	    ExecuteAction ( GOTO_HSCROLL, posNew);
        case SB_SLIDERTRACK:
	    ExecuteAction( GOTO_HSCROLL_TRACK, posNew);
            break;
    }
}

VOID SkelPaint( hWnd, hPS )
HWND hWnd;
HPS hPS;
{

    /* Here the application paints its window. */
    /* draw the text */
    VioShowPS( VIO_PS_ROWS, VIO_PS_COLUMNS, 0, hVPS);
}



/******* The code below is for demo purposes only *******/

VOID SkelQueryQuit( hWnd )
HWND hWnd;
{
    CHAR    szOkClose[CCHMAXSTRING];
    CHAR    szClose[CCHMAXSTRING];

    WinLoadString(hAB, NULL, IDSOKCLOSE, CCHMAXSTRING , (PCH)szOkClose);
    WinLoadString(hAB, NULL, IDSCLOSE, CCHMAXSTRING , (PCH)szClose  );
    WinAlarm( HWND_DESKTOP, WA_WARNING );
    if ( WinMessageBox(HWND_DESKTOP, hWnd, (PCH)szOkClose, (PCH)szClose,
               NULL, MB_OKCANCEL|MB_ICONQUESTION ) == DID_OK )
        WinPostMsg( hWnd, WM_QUIT, 0L, 0L );
}

/******* The code above is for demo purposes only *******/


/******* The code below is for demo purposes only *******/

VOID SkelTimer( hWnd, id )
HWND   hWnd;
USHORT id;
{
}

/******* The code above is for demo purposes only *******/



VOID SkelVertScroll( hWnd, code, posNew )
HWND   hWnd;
SHORT  code;
USHORT posNew;
{
    switch( code )
    {
        case SB_LINEUP:
	    ExecuteAction( LINE_UP, posNew );
	    break;
        case SB_LINEDOWN:
	    ExecuteAction( LINE_DOWN, posNew );
	    break;
        case SB_PAGEUP:
	    ExecuteAction( PAGE_UP, posNew );
	    break;
        case SB_PAGEDOWN:
	    ExecuteAction( PAGE_DOWN, posNew );
	    break;
        case SB_SLIDERPOSITION:
	    ExecuteAction( GOTO_LINE, posNew );
	    break;
        case SB_SLIDERTRACK:
	    ExecuteAction( GOTO_LINE_TRACK, posNew);
            break;
    }
}

VOID SetScrollPosVert( sPos, sMax )
SHORT sPos, sMax;
/* put the slider at the appropriate place.
   parameters given are sPos=position of the slider, sMax=max position of
   slider.
*/
{
    WinSendMsg(
	WinWindowFromID(hwndSkelFrame, FID_VERTSCROLL), /* vscroll's handle */
	SBM_SETSCROLLBAR,				/* message: set parms */
	(MPARAM) MAKEULONG ( sPos, 0 ), 	 /* position */
	(MPARAM) MAKEULONG ( 0, sMax )		/* min, max */
    );
}

VOID SetScrollPosHorz( sPos, sMax )
SHORT sPos, sMax;
/* put the slider at the appropriate place.
   parameters given are sPos=position of the slider, sMax=max position of
   slider.
*/
{
    WinSendMsg(
	WinWindowFromID(hwndSkelFrame, FID_HORZSCROLL), /* vscroll's handle */
	SBM_SETSCROLLBAR,				/* message: set parms */
	(MPARAM) MAKEULONG ( sPos, 0 ), 	 /* position */
	(MPARAM) MAKEULONG ( 0, sMax )		/* min, max */
    );
}

VOID GetWinCharSize( VOID )
{
    LONG lCHeight, lCWidth;
    RECTL rcl;

    DevQueryCaps(hDC, CAPS_CHAR_HEIGHT, 1L, &lCHeight);
    DevQueryCaps(hDC, CAPS_CHAR_WIDTH, 1L, &lCWidth);
    WinQueryWindowRect(hwndSkel, &rcl);
    Vid_Rows=((SHORT)(rcl.yTop-rcl.yBottom))/(SHORT)lCHeight;
    Vid_Cols=((SHORT)(rcl.xRight-rcl.xLeft))/(SHORT)lCWidth;
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.