Annotation of mstools/samples/gdidemo/dialog.c, revision 1.1

1.1     ! root        1: /*---------------------------------------------------------------------------*\
        !             2: | DIALOG MODULE
        !             3: |   This module contains the dialogbox routines for this application.
        !             4: |
        !             5: |
        !             6: | segment: _DIALOG (DOS16)
        !             7: | created: 31-Oct-90
        !             8: | history: 31-Oct-90 <chriswil> created.
        !             9: |
        !            10: \*---------------------------------------------------------------------------*/
        !            11: 
        !            12: #include <windows.h>
        !            13: #include "gdidemo.h"
        !            14: 
        !            15: /*---------------------------------------------------------------------------*\
        !            16: | DISPLAY DIALOG BOX
        !            17: |   This is a routine to display a generic modal-dialog box.
        !            18: |
        !            19: | created: 20-Oct-90
        !            20: | history: 20-Oct-90 <chriswil> created.
        !            21: |
        !            22: \*---------------------------------------------------------------------------*/
        !            23: int FAR DisplayDialogBox(HWND hWnd, LPSTR lpszTemplate, WNDPROC lpfFunction, LONG lExtra)
        !            24: {
        !            25:     HANDLE  hInstance;
        !            26:     WNDPROC lpfDlg;
        !            27:     int     nRet;
        !            28: 
        !            29: 
        !            30:     nRet = -1;
        !            31:     if(hInstance = GETINSTANCE(hWnd))
        !            32:     {
        !            33:         if(lpfDlg = MakeProcInstance(lpfFunction,hInstance))
        !            34:         {
        !            35:             nRet = DialogBoxParam(hInstance,lpszTemplate,hWnd,lpfDlg,lExtra);
        !            36:             FreeProcInstance(lpfDlg);
        !            37:         }
        !            38:     }
        !            39:     return(nRet);
        !            40: }
        !            41: 
        !            42: 
        !            43: /*---------------------------------------------------------------------------*\
        !            44: | ABOUT DIALOG PROCEDURE
        !            45: |   This is the main dialogbox routine for the HELPABOUT template.
        !            46: |
        !            47: | created: 31-Oct-90
        !            48: | history: 31-Oct-90 <chriswil> created.
        !            49: |
        !            50: \*---------------------------------------------------------------------------*/
        !            51: BOOL APIENTRY AboutDlgProc(HWND hDlg, UINT wMsg, WPARAM wParam, LONG lParam)
        !            52: {
        !            53:     lParam = lParam;
        !            54: 
        !            55:     switch(wMsg)
        !            56:     {
        !            57:         /*
        !            58:         ** Set the focus to the OK button.
        !            59:         */
        !            60:         case WM_INITDIALOG:
        !            61:             SetFocus(GetDlgItem(hDlg,IDOK));
        !            62:             break;
        !            63: 
        !            64: 
        !            65:         /*
        !            66:         ** Look for an ESC or RETURN event.
        !            67:         */
        !            68:         case WM_COMMAND:
        !            69:             switch(wParam)
        !            70:             {
        !            71:                 case IDOK:
        !            72:                 case IDCANCEL:
        !            73:                     EndDialog(hDlg,TRUE);
        !            74:                     break;
        !            75: 
        !            76:                 default:
        !            77:                     return(FALSE);
        !            78:             }
        !            79:             break;
        !            80: 
        !            81: 
        !            82:         /*
        !            83:         ** Wash the background of the aboutbox to give it a nice blue-scaling
        !            84:         ** effect.  Invalidate the OK button to force it to the top.  This
        !            85:         ** seems to be necessary since the OK button gets overwritten during
        !            86:         ** the washing.
        !            87:         */
        !            88:         case WM_PAINT:
        !            89:             PaintWindow(hDlg,COLOR_SCALE_BLUE);
        !            90:             InvalidateRect(GetDlgItem(hDlg,IDOK),NULL,TRUE);
        !            91: 
        !            92: 
        !            93:         /*
        !            94:         ** Default handler.
        !            95:         */
        !            96:         default:
        !            97:             return(FALSE);
        !            98:     }
        !            99:     return(TRUE);
        !           100: }
        !           101: 
        !           102: 
        !           103: /*---------------------------------------------------------------------------*\
        !           104: | PAINT WND BACKGROUND
        !           105: |   This routine is used to wash the background of a window.
        !           106: |
        !           107: | created: 23-Jan-91
        !           108: | history: 23-Jan-91 <chriswil> created.
        !           109: |
        !           110: \*---------------------------------------------------------------------------*/
        !           111: VOID PaintWindow(HWND hWnd, int nColor)
        !           112: {
        !           113:     HDC         hDC;
        !           114:     int         nMapMode,idx,nSize,nReserved,nLoop;
        !           115:     RECT        rect;
        !           116:     HBRUSH      hBrush;
        !           117:     PAINTSTRUCT ps;
        !           118:     HPALETTE    hPal;
        !           119: 
        !           120: 
        !           121:     if(hDC = BeginPaint(hWnd,&ps))
        !           122:     {
        !           123:         GetClientRect(hWnd,&rect);
        !           124:         nMapMode = SetMapMode(hDC,MM_ANISOTROPIC);
        !           125: 
        !           126: 
        !           127:         if(GetDeviceCaps(hDC,RASTERCAPS) & RC_PALETTE)
        !           128:         {
        !           129:             nReserved = GetDeviceCaps(hDC,NUMRESERVED);
        !           130:             nSize     = GetDeviceCaps(hDC,SIZEPALETTE) - nReserved;
        !           131: 
        !           132:             if(hPal = CreateColorScalePalette(hDC,nColor))
        !           133:             {
        !           134:                 hPal = SelectPalette(hDC,hPal,FALSE);
        !           135:                 RealizePalette(hDC);
        !           136: 
        !           137: 
        !           138: #ifdef WIN16
        !           139:                SetWindowExtEx(hDC,nSize,nSize);
        !           140:                SetViewportExtEx(hDC,rect.right,-rect.bottom);
        !           141:                SetViewportOrgEx(hDC,0,rect.bottom);
        !           142: #else
        !           143: 
        !           144:                SetWindowExtEx(hDC,nSize,nSize,NULL);
        !           145:                SetViewportExtEx(hDC,rect.right,-rect.bottom,NULL);
        !           146:                SetViewportOrgEx(hDC,0,rect.bottom,NULL);
        !           147: 
        !           148: #endif
        !           149: 
        !           150:                 nLoop = nSize >> 1;
        !           151:                 for(idx=0; idx < nLoop; idx++)
        !           152:                 {
        !           153:                     hBrush = CreateSolidBrush(PALETTEINDEX(idx+nLoop));
        !           154:                     SetRect(&rect,idx,idx,nSize-idx,nSize-idx);
        !           155:                     FillRect(hDC,&rect,hBrush);
        !           156:                     DeleteObject(hBrush);
        !           157:                 }
        !           158:                 DeleteObject(SelectPalette(hDC,hPal,FALSE));
        !           159:                 RealizePalette(hDC);
        !           160:             }
        !           161:         }
        !           162:         else
        !           163:         {
        !           164: 
        !           165: #ifdef WIN16
        !           166: 
        !           167:            SetWindowExtEx(hDC,512,512);
        !           168:            SetViewportExtEx(hDC,rect.right,-rect.bottom);
        !           169:            SetViewportOrgEx(hDC,0,rect.bottom);
        !           170: 
        !           171: #else
        !           172: 
        !           173:            SetWindowExtEx(hDC,512,512,NULL);
        !           174:            SetViewportExtEx(hDC,rect.right,-rect.bottom,NULL);
        !           175:            SetViewportOrgEx(hDC,0,rect.bottom,NULL);
        !           176: 
        !           177: #endif
        !           178: 
        !           179:             for(idx=0; idx < 256; idx++)
        !           180:             {
        !           181:                 hBrush = CreateSolidBrush(RGB(0,0,idx));
        !           182:                 SetRect(&rect,idx,idx,512-idx,512-idx);
        !           183:                 FillRect(hDC,&rect,hBrush);
        !           184:                 DeleteObject(hBrush);
        !           185:             }
        !           186:         }
        !           187: 
        !           188:         SetMapMode(hDC,nMapMode);
        !           189: 
        !           190:         EndPaint(hWnd,&ps);
        !           191:     }
        !           192:     return;
        !           193: }
        !           194: 
        !           195: 
        !           196: 
        !           197: 
        !           198: 
        !           199: 
        !           200: /*---------------------------------------------------------------------------*\
        !           201: | CREATE COLOR SCALE PALETTE
        !           202: |   This routine creates a palette representing the scale values of a
        !           203: |   particular RGB color.  A gray-scale palette can also be created.
        !           204: |
        !           205: | created: 01-Nov-90
        !           206: | history: 01-Nov-90 <chriswil> created.
        !           207: |
        !           208: \*---------------------------------------------------------------------------*/
        !           209: HPALETTE CreateColorScalePalette(HWND hDC, int nColor)
        !           210: {
        !           211:     HPALETTE     hPalette;
        !           212:     GLOBALHANDLE hMem;
        !           213:     LPLOGPALETTE lpMem;
        !           214:     int          idx,nReserved,nSize;
        !           215: 
        !           216: 
        !           217:     hPalette = NULL;
        !           218:     if(GetDeviceCaps(hDC,RASTERCAPS) & RC_PALETTE)
        !           219:     {
        !           220:         nReserved = GetDeviceCaps(hDC,NUMRESERVED);
        !           221:         nSize     = GetDeviceCaps(hDC,SIZEPALETTE) - nReserved;
        !           222: 
        !           223:         if(hMem = GlobalAlloc(GHND,(DWORD)sizeof(LOGPALETTE)+(sizeof(PALETTEENTRY)*nSize)))
        !           224:         {
        !           225:             if(lpMem = (LPLOGPALETTE)GlobalLock(hMem))
        !           226:             {
        !           227:                 lpMem->palNumEntries = (WORD)nSize;
        !           228:                 lpMem->palVersion    = (WORD)0x0300;
        !           229: 
        !           230:                 switch(nColor)
        !           231:                 {
        !           232:                     case COLOR_SCALE_RED:
        !           233:                         for(idx=0; idx < nSize; idx++)
        !           234:                         {
        !           235:                             lpMem->palPalEntry[idx].peRed   = (BYTE)idx;
        !           236:                             lpMem->palPalEntry[idx].peGreen = 0;
        !           237:                             lpMem->palPalEntry[idx].peBlue  = 0;
        !           238:                             lpMem->palPalEntry[idx].peFlags = PC_RESERVED;
        !           239:                         }
        !           240:                         break;
        !           241: 
        !           242:                     case COLOR_SCALE_GREEN:
        !           243:                         for(idx=0; idx < nSize; idx++)
        !           244:                         {
        !           245:                             lpMem->palPalEntry[idx].peRed   = 0;
        !           246:                             lpMem->palPalEntry[idx].peGreen = (BYTE)idx;
        !           247:                             lpMem->palPalEntry[idx].peBlue  = 0;
        !           248:                             lpMem->palPalEntry[idx].peFlags = PC_RESERVED;
        !           249:                         }
        !           250:                         break;
        !           251: 
        !           252:                     case COLOR_SCALE_BLUE:
        !           253:                         for(idx=0; idx < nSize; idx++)
        !           254:                         {
        !           255:                             lpMem->palPalEntry[idx].peRed   = 0;
        !           256:                             lpMem->palPalEntry[idx].peGreen = 0;
        !           257:                             lpMem->palPalEntry[idx].peBlue  = (BYTE)idx;
        !           258:                             lpMem->palPalEntry[idx].peFlags = PC_RESERVED;
        !           259:                         }
        !           260:                         break;
        !           261: 
        !           262:                     default:
        !           263:                     case COLOR_SCALE_GRAY:
        !           264:                         for(idx=0; idx < nSize; idx++)
        !           265:                         {
        !           266:                             lpMem->palPalEntry[idx].peRed   = (BYTE)idx;
        !           267:                             lpMem->palPalEntry[idx].peGreen = (BYTE)idx;
        !           268:                             lpMem->palPalEntry[idx].peBlue  = (BYTE)idx;
        !           269:                             lpMem->palPalEntry[idx].peFlags = PC_RESERVED;
        !           270:                         }
        !           271:                         break;
        !           272:                 }
        !           273: 
        !           274:                 hPalette = CreatePalette(lpMem);
        !           275: 
        !           276:                 GlobalUnlock(hMem);
        !           277:             }
        !           278:             GlobalFree(hMem);
        !           279:         }
        !           280:     }
        !           281:     return(hPalette);
        !           282: }

unix.superglobalmegacorp.com

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