Annotation of mstools/samples/cdtest/cdtest.c, revision 1.1

1.1     ! root        1: /************************************************************************
        !             2: 
        !             3:   File: cdtest.c
        !             4: 
        !             5:   Purpose:  Contains the functions which handle the main window's functionality --
        !             6:             creating the main window, handling menu commands, exiting the program.
        !             7: 
        !             8:   Functions:
        !             9: 
        !            10:            WinMain()           - Program's entry point
        !            11: 
        !            12:            InitApplication()   - Registers class and some user defined messages
        !            13: 
        !            14:            InitInstance()      - Creates main window
        !            15: 
        !            16:            MainWndProc()       - Window procedure for main window
        !            17: 
        !            18:            HandleTheCommand()  - Processes all WM_COMMAND messages
        !            19: 
        !            20:            InitGlobals()       - Initializes all global variables that need to
        !            21:                                  be initialized at startup
        !            22: 
        !            23:            MyAtol()            - Converts an ASCII string in either hexi-
        !            24:                                  decimal or decimal notation to a LONG.
        !            25: 
        !            26:            AboutProc()         - Callback function for CDTEST's about box.
        !            27: 
        !            28: ************************************************************************/
        !            29: 
        !            30: 
        !            31: 
        !            32: #include <windows.h>
        !            33: #include <commdlg.h>
        !            34: #include <winnls.h>
        !            35: #include "cdtest.h"
        !            36: #include "colors.h"
        !            37: #include "save.h"
        !            38: #include "print.h"
        !            39: #include "title.h"
        !            40: #include "replace.h"
        !            41: #include "open.h"
        !            42: #include "font.h"
        !            43: #include "find.h"
        !            44: 
        !            45: 
        !            46: 
        !            47: 
        !            48: 
        !            49: /* Some defines, global variables, and function declarations */
        !            50: 
        !            51: #define szClass TEXT("cdtestclass")
        !            52: #define szIcon  TEXT("theicon")
        !            53: #define szMenu  TEXT("themenu")
        !            54: 
        !            55: #ifdef UNICODE
        !            56:   #define szTitle TEXT("Common Dialog Test App - Unicode Version")
        !            57: #else
        !            58:   #define szTitle TEXT("Common Dialog Test App - ANSI Version")
        !            59: #endif
        !            60: 
        !            61: 
        !            62: void InitGlobals(void) ;
        !            63: 
        !            64: UINT uMode = IDM_HEXMODE ;
        !            65: 
        !            66: 
        !            67: 
        !            68: 
        !            69: 
        !            70: 
        !            71: 
        !            72: /************************************************************************
        !            73: 
        !            74: 
        !            75:   Function: WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
        !            76: 
        !            77:   Purpose:
        !            78: 
        !            79:     - Contains standard windows entry point
        !            80: 
        !            81:     - Initializes the application
        !            82: 
        !            83:     - Contains the main message loop
        !            84: 
        !            85:   Returns: Final msg.wParam
        !            86: 
        !            87:   Comments:
        !            88: 
        !            89: ************************************************************************/
        !            90: 
        !            91: 
        !            92: int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
        !            93: {
        !            94: 
        !            95:   MSG msg;
        !            96: 
        !            97: 
        !            98:   UNREFERENCED_PARAMETER( lpCmdLine );
        !            99: 
        !           100: 
        !           101:   if (!hPrevInstance)
        !           102:     if (!InitApplication(hInstance))
        !           103:         return (FALSE);
        !           104: 
        !           105:   if (!InitInstance(hInstance, nCmdShow))
        !           106:     return (FALSE);
        !           107: 
        !           108:   while (GetMessage(&msg, 0, 0, 0))
        !           109:   {
        !           110:     TranslateMessage(&msg);
        !           111:     DispatchMessage(&msg);
        !           112:   }
        !           113: 
        !           114: 
        !           115:   return (msg.wParam);
        !           116: }
        !           117: 
        !           118: 
        !           119: 
        !           120: 
        !           121: 
        !           122: 
        !           123: 
        !           124: /************************************************************************
        !           125: 
        !           126: 
        !           127:   Function: InitApplication(HANDLE)
        !           128: 
        !           129: 
        !           130:   Purpose:
        !           131: 
        !           132:     - Fills in the WNDCLASS structure
        !           133: 
        !           134:     - Registers messages needed to communicate with the common dialogs
        !           135: 
        !           136:     - Registers the window class
        !           137: 
        !           138:   Returns: The return value of RegisterClass().  If this fails then the
        !           139:            whole program fails.
        !           140: 
        !           141:   Comments:
        !           142: 
        !           143: 
        !           144: ************************************************************************/
        !           145: 
        !           146: 
        !           147: BOOL InitApplication(HANDLE hInstance)     
        !           148: {
        !           149:   WNDCLASS  wc;
        !           150: 
        !           151:   wc.style = 0;
        !           152:   wc.lpfnWndProc = (WNDPROC)MainWndProc;
        !           153:   wc.cbClsExtra = 0;
        !           154:   wc.cbWndExtra = 0;
        !           155:   wc.hInstance = hInstance;
        !           156:   wc.hIcon = LoadIcon(hInstance, szIcon) ;
        !           157:   wc.hCursor = LoadCursor(NULL, IDC_ARROW);
        !           158:   wc.hbrBackground = GetStockObject(WHITE_BRUSH);
        !           159:   wc.lpszMenuName = szMenu ;
        !           160:   wc.lpszClassName = szClass ;
        !           161: 
        !           162:   
        !           163:   InitGlobals() ;
        !           164: 
        !           165:   
        !           166:   /* Register any messages that the common dialogs will need to 
        !           167:      communicate with this app. */
        !           168: 
        !           169:   nFindMsg       = RegisterWindowMessage((LPTSTR) FINDMSGSTRING) ;
        !           170:   nOpenShareVMsg = RegisterWindowMessage((LPTSTR) SHAREVISTRING) ;
        !           171:   nHelpMessage   = RegisterWindowMessage((LPTSTR) HELPMSGSTRING) ;
        !           172: 
        !           173: 
        !           174:   return (RegisterClass(&wc));
        !           175: }
        !           176: 
        !           177: 
        !           178: 
        !           179: 
        !           180: 
        !           181: 
        !           182: 
        !           183: 
        !           184: /************************************************************************
        !           185: 
        !           186: 
        !           187:  Function: InitInstance(HANDLE, int)
        !           188: 
        !           189: 
        !           190:  Purpose:
        !           191: 
        !           192:    - Creates the main window
        !           193: 
        !           194:    - Shows the main window
        !           195: 
        !           196:  Returns: FALSE if it cannot create the window, TRUE if it can.
        !           197: 
        !           198: 
        !           199:  Comments:
        !           200: 
        !           201: 
        !           202: ************************************************************************/
        !           203: 
        !           204: 
        !           205: BOOL InitInstance(HANDLE hInstance, int nCmdShow)
        !           206: {
        !           207:     HWND hWnd;
        !           208:     DWORD dwFlags = WS_OVERLAPPED | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU ;
        !           209: 
        !           210:     
        !           211:     /* save the instance handle in a global variable */
        !           212: 
        !           213:     hInst = hInstance;
        !           214: 
        !           215: 
        !           216:     /* Create the main window */
        !           217: 
        !           218:     hWnd = CreateWindow(szClass, szTitle, dwFlags, 
        !           219:                         10, 10, 400, 200, NULL, NULL, hInstance, NULL) ;
        !           220: 
        !           221:     if (!hWnd)
        !           222:         return (FALSE);
        !           223: 
        !           224:     ShowWindow(hWnd, SW_SHOWNORMAL) ;
        !           225:     UpdateWindow(hWnd);
        !           226: 
        !           227:     return (TRUE);
        !           228: }
        !           229: 
        !           230: 
        !           231: 
        !           232: 
        !           233: 
        !           234: 
        !           235: 
        !           236: 
        !           237: /************************************************************************
        !           238: 
        !           239: 
        !           240:   Function: MainWndProc(HWND, UINT, UINT, LONG)
        !           241: 
        !           242:   Purpose:
        !           243: 
        !           244:     - Is the callback function that handles all messages for the main window
        !           245: 
        !           246:   Returns:
        !           247: 
        !           248:     - Returns DefWindowProc() for any message it does not explicitly
        !           249:       respond to.
        !           250: 
        !           251:   Comments:
        !           252: 
        !           253: 
        !           254: ************************************************************************/
        !           255: 
        !           256: 
        !           257: LONG APIENTRY MainWndProc(HWND hWnd, UINT message, UINT wParam, LONG lParam)
        !           258: {
        !           259:     switch (message)
        !           260:     {
        !           261:       case WM_CREATE:
        !           262:         CheckMenuItem(GetMenu(hWnd), IDM_HEXMODE, MF_CHECKED) ;
        !           263:         break ;
        !           264: 
        !           265:       case WM_COMMAND:
        !           266:         HandleTheCommand(hWnd, wParam, lParam) ;
        !           267:         break ;
        !           268: 
        !           269:       case WM_DESTROY:
        !           270:           PostQuitMessage(0);
        !           271:           break;
        !           272: 
        !           273:       default:
        !           274:           return (DefWindowProc(hWnd, message, wParam, lParam));
        !           275:           break ;
        !           276:     }
        !           277:     return (0L);
        !           278: }
        !           279: 
        !           280: 
        !           281: 
        !           282: 
        !           283: 
        !           284: 
        !           285: /************************************************************************
        !           286: 
        !           287: 
        !           288:   Function: HandleTheCommand(HWND, UINT, UINT)
        !           289: 
        !           290:   Purpose:
        !           291: 
        !           292:     - Handles all WM_COMMAND messages passed to the MainWndProc().  The
        !           293:       menu or control ID value for Win32 WM_COMMAND messages is contained
        !           294:       in the low word of the wParam parameter.
        !           295: 
        !           296:   Returns: Nothing.
        !           297: 
        !           298:   Comments:
        !           299: 
        !           300: 
        !           301: ************************************************************************/
        !           302: 
        !           303: 
        !           304: void HandleTheCommand(HWND hWnd, UINT wParam, LONG lParam)
        !           305: {
        !           306: 
        !           307:   switch (LOWORD(wParam))
        !           308:   {
        !           309:     case IDM_COLOR:                //For any of the dialog creation
        !           310:       DoColorsDialog(hWnd) ;       //commands, call the appropriate
        !           311:       break ;                      //function.  The function will
        !           312:                                    //create the dialog...
        !           313:     case IDM_FONT:
        !           314:       DoFontDialog(hWnd) ;
        !           315:       break ;
        !           316: 
        !           317:     case IDM_TITLE:
        !           318:       DoTitleDialog(hWnd) ;
        !           319:       break ;
        !           320: 
        !           321:     case IDM_FIND:
        !           322:       DoFindDialog(hWnd) ;
        !           323:       break ;
        !           324: 
        !           325:     case IDM_OPEN:
        !           326:       DoOpenDialog(hWnd) ;
        !           327:       break ;
        !           328: 
        !           329:     case IDM_SAVE:
        !           330:       DoSaveDialog(hWnd) ;
        !           331:       break ;
        !           332: 
        !           333:     case IDM_PRINT:
        !           334:       DoPrintDialog(hWnd) ;
        !           335:       break ;
        !           336: 
        !           337:     case IDM_REPLACE:
        !           338:       DoReplaceDialog(hWnd) ;
        !           339:       break ;
        !           340: 
        !           341:     case IDM_EXIT:
        !           342:       PostQuitMessage(0) ;
        !           343:       break ;
        !           344: 
        !           345:     case IDM_HEXMODE:
        !           346:     case IDM_DECIMALMODE:
        !           347: 
        !           348:       /* We need to maintain a global variable that will indicate what
        !           349:          kind of number processing we have to do.  First, check the
        !           350:          menu item corresponding to the new mode... */
        !           351: 
        !           352:       CheckMenuItem(GetMenu(hWnd), uMode, MF_UNCHECKED) ;
        !           353:       uMode = wParam ;
        !           354:       CheckMenuItem(GetMenu(hWnd), uMode, MF_CHECKED) ;
        !           355: 
        !           356: 
        !           357:       /* and then create an appropriate filter for wsprintf() type
        !           358:          functions */
        !           359: 
        !           360:       if (uMode == IDM_HEXMODE)
        !           361:       {
        !           362:         lstrcpy(szShortFilter, TEXT("%x")) ;
        !           363:         lstrcpy(szLongFilter, TEXT("%lx")) ;
        !           364:       }
        !           365:       if (uMode == IDM_DECIMALMODE)
        !           366:       {
        !           367:         lstrcpy(szShortFilter, TEXT("%d")) ;
        !           368:         lstrcpy(szLongFilter, TEXT("%ld")) ;
        !           369:       }
        !           370: 
        !           371:       break ;
        !           372: 
        !           373: 
        !           374:     case IDM_ABOUT:
        !           375:        DialogBox(hInst, TEXT("about"), hWnd, AboutProc) ;
        !           376:        break ;
        !           377: 
        !           378: 
        !           379:     default: break ;
        !           380:   }
        !           381: 
        !           382:   return ;
        !           383: }
        !           384: 
        !           385: 
        !           386: 
        !           387: 
        !           388: 
        !           389: 
        !           390: 
        !           391: 
        !           392: /************************************************************************
        !           393: 
        !           394: 
        !           395:   Function: InitGlobals(void)
        !           396: 
        !           397:   Purpose:
        !           398: 
        !           399:     - Any global variables can be initialized here since this function is
        !           400:       called on app startup.
        !           401: 
        !           402:   Returns: Nothing
        !           403: 
        !           404:   Comments:
        !           405: 
        !           406: 
        !           407: ************************************************************************/
        !           408: 
        !           409: 
        !           410: void InitGlobals(void)
        !           411: {
        !           412: 
        !           413:   /* not really too much to do here.  Create a hex wsprintf() filter since
        !           414:      the app starts off in Hex mode. */
        !           415: 
        !           416:   lstrcpy(szShortFilter, TEXT("%x")) ;
        !           417:   lstrcpy(szLongFilter, TEXT("%lx")) ;
        !           418: 
        !           419: }
        !           420: 
        !           421: 
        !           422: 
        !           423: 
        !           424: 
        !           425: 
        !           426: 
        !           427: 
        !           428: 
        !           429: /************************************************************************
        !           430: 
        !           431: 
        !           432:   Function: MyAtol(LPTSTR, BOOL, LPBOOL)
        !           433: 
        !           434:   Purpose:
        !           435: 
        !           436:     - This function will convert an ascii string to a LONG.
        !           437: 
        !           438:   Returns:
        !           439: 
        !           440:     - If it receives an invalid ascii character, it will return 0 and
        !           441:       set the LPBOOL variable to false...
        !           442: 
        !           443:   Comments:
        !           444: 
        !           445:       Since the function may need to deal with either a hex number or a decimal
        !           446:       number, it should use a variable as a multiplier.
        !           447: 
        !           448: 
        !           449: ************************************************************************/
        !           450: 
        !           451: 
        !           452: LONG MyAtol(LPTSTR szString, BOOL bHex, LPBOOL bSuccess)
        !           453: {
        !           454:   LPTSTR p ;
        !           455:   LONG l ;
        !           456:   LONG lMultiplier ;
        !           457:   BOOL bDigit ;
        !           458: 
        !           459:   if (bHex)
        !           460:     lMultiplier = 16 ;
        !           461:   else
        !           462:     lMultiplier = 10 ;
        !           463: 
        !           464:   p = szString ;
        !           465:   l = 0 ;
        !           466: 
        !           467:   while (*p)      //while chars
        !           468:   {
        !           469:      bDigit = FALSE ;  //set to false for each char that we look at
        !           470: 
        !           471:      if (*p >= (TCHAR) '0' && *p <= (TCHAR) '9')  //is it an ascii char ?
        !           472:      {
        !           473:        bDigit = TRUE ;
        !           474:        l+=(*p - (TCHAR) '0') ;
        !           475:      }
        !           476: 
        !           477:      if (bHex)
        !           478:      {
        !           479:        if (*p >= (TCHAR) 'A' && *p <= (TCHAR) 'F')  //or hex?
        !           480:        {
        !           481:          l+=(*p - (TCHAR) 'A' + 10) ;
        !           482:          bDigit = TRUE ;
        !           483:        }
        !           484: 
        !           485:        if (*p >= (TCHAR) 'a' && *p <= (TCHAR) 'f') 
        !           486:        {
        !           487:          l+=(*p - (TCHAR) 'a' + 10) ;
        !           488:          bDigit = TRUE ;
        !           489:        }
        !           490: 
        !           491:      }
        !           492: 
        !           493:      if (bDigit == FALSE)
        !           494:      {
        !           495:        *bSuccess = FALSE ;
        !           496:        return 0 ;
        !           497:      }
        !           498: 
        !           499:      p++ ;               //get next char
        !           500: 
        !           501:      if (*p)             //if there is going to be at least one more char
        !           502:        l*=lMultiplier ;  //then multiply what we have by the multiplier...
        !           503:   }
        !           504: 
        !           505:   *bSuccess = TRUE ;
        !           506: 
        !           507:   return l ;             //success! return the value.
        !           508: }
        !           509: 
        !           510: 
        !           511: 
        !           512: 
        !           513: 
        !           514: 
        !           515: 
        !           516: 
        !           517: 
        !           518: /************************************************************************
        !           519: 
        !           520: 
        !           521:   Function: AboutProc(HWND, UINT, UINT, LONG)
        !           522: 
        !           523:   Purpose:  Callback function for the about dialog box.
        !           524: 
        !           525: 
        !           526:   Returns:  BOOL - FALSE ...
        !           527: 
        !           528: 
        !           529:   Comments:
        !           530: 
        !           531: ************************************************************************/
        !           532: 
        !           533: 
        !           534: BOOL APIENTRY AboutProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam)
        !           535: {
        !           536: 
        !           537:   if (
        !           538:        (msg == WM_COMMAND) &&
        !           539:        (LOWORD(wParam) == IDCANCEL)
        !           540:      )
        !           541: 
        !           542:      EndDialog(hwnd, FALSE) ;
        !           543: 
        !           544:   else
        !           545:     return FALSE ;
        !           546: }

unix.superglobalmegacorp.com

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