overview.hlp (Table of Contents; Topic list)
Important Notice
The pages on this site contain documentation for very old MS-DOS software, purely for historical purposes. If you're looking for up-to-date documentation, particularly for programming, you should not rely on the information found here, as it will be woefully out of date.
Using Advanced Video Input and Output (1.2)
About Section  Function Group                     Up Next Previous
────────────────────────────────────────────────────────────────────────────
 
                   Using Advanced Video Input and Output
 
This section presents the source code for a simple AVIO program. The program
creates the AVIO presentation space and associates it with the device
context for the client window. The window procedure for the client window
then uses the VioWrtTTY function to display a message.
 
#define INCL_WIN
#define INCL_GPI
#define INCL_VIO
#define INCL_AVIO
#include "os2.h"
 
HAB hab;            /* handle to the anchor block            */
HMQ hmq;            /* handle to the message queue           */
HWND hwndClient;    /* handle to the client                  */
HWND hwndFrame;     /* handle to the frame window            */
QMSG qmsg;          /* message-queue structure               */
HDC hdc;            /* handle to the device context          */
HVPS hvps;          /* handle to the AVIO presentation space */
 
MRESULT EXPENTRY GenericWndProc(hwnd, msg, mp1, mp2)
HWND   hwnd;
USHORT msg;
MPARAM mp1;
MPARAM mp2;
{
    HPS   hps;
    RECTL rcl;
    SHORT x, y;
    SHORT cx, cy;
 
    switch (msg) {
        case WM_PAINT:
            hps = WinBeginPaint(hwnd, NULL, NULL);
            WinQueryWindowRect(hwnd, &rcl);
            VioGetDeviceCellSize(&cy, &cx, hvps);
            x = (rcl.xRight - rcl.xLeft) / (2 * cx);
            y = (rcl.yTop - rcl.yBottom) / (2 * cy);
            VioWrtCharStr("Hello World!", 12, y, x - 6, hvps);
            VioShowPS(25, 80, 0, hvps);
            WinEndPaint(hps);
            return (0L);
 
        case WM_SIZE:
            return (WinDefAVioWindowProc(hwnd, msg, mp1, mp2));
    }
    return (WinDefWindowProc(hwnd, msg, mp1, mp2));
}
 
ULONG flStyle = FCF_MINMAX | FCF_SYSMENU | FCF_TITLEBAR |
                FCF_SIZEBORDER | FCF_SHELLPOSITION | FCF_TASKLIST;
 
VOID cdecl main()
{
    hab = WinInitialize(0);
    hmq = WinCreateMsgQueue(hab, 0);
 
    if (!WinRegisterClass(hab, "MyClass",
            GenericWndProc, CS_SIZEREDRAW, 0))
        DosExit(EXIT_PROCESS, 1);
 
    hwndFrame = WinCreateStdWindow(HWND_DESKTOP, WS_VISIBLE, &flStyle,
        "MyClass", "My Title", 0L, NULL, 1, &hwndClient);
 
    hdc = WinOpenWindowDC(hwndClient);  /* opens device context      */
    VioCreatePS(&hvps, 25, 80, 0,       /* creates AVIO PS           */
        FORMAT_CGA, 0);
    VioAssociate(hdc, hvps);            /* associates DC and AVIO PS */
 
    while (WinGetMsg(hab, &qmsg, NULL, 0, 0))        /* message loop */
        WinDispatchMsg(hab, &qmsg);
 
    VioAssociate(NULL, hvps);           /* disassociates the AVIO PS */
    VioDestroyPS(hvps);                 /* destroys the AVIO PS      */
    WinDestroyWindow(hwndFrame);
    WinDestroyMsgQueue(hmq);
    WinTerminate(hab);
    DosExit(EXIT_PROCESS, 0);
}
 
The standard Vio functions can be used in AVIO programs. All of the
following functions must be passed a zero handle when called from a
full-screen program and a nonzero VIO handle when called from an AVIO
program:
 
    VioEndPopUp         VioScrollRt
    VioGetAnsi          VioScrollUp
    VioGetBuf           VioSetAnsi
    VioGetConfig        VioSetCp
    VioGetCp            VioSetCurPos
    VioGetCurPos        VioSetCurType
    VioGetCurType       VioSetMode
    VioGetMode          VioShowBuf
    VioPopUp            VioWrtCellStr
    VioPtrSc            VioWrtCharStr
    VioPtrScToggle      VioWrtCharStrAtt
    VioReadCellStr      VioWrtNAttr
    VioReadCharStr      VioWrtNCell
    VioScrollDn         VioWrtNChar
    VioScrollLf         VioWrtTTY
 
The advanced Vio functions can be used in AVIO programs only. All of the
following functions must be passed a nonzero VIO handle:
 
    VioAssociate
    VioCreateLogFont
    VioCreatePS
    VioDeleteSetId
    VioDestroyPS
    VioGetDeviceCellSize
    VioGetOrg
    VioQueryFonts
    VioQuerySetIds
    VioSetDeviceCellSize
    VioSetOrg
    VioShowPS
 
 
                                      ♦