Annotation of mstools/samples/cdtest/find.c, revision 1.1.1.1

1.1       root        1: /************************************************************************
                      2: 
                      3:   File: find.c
                      4: 
                      5:   Purpose:
                      6: 
                      7:      Manages CDTEST's find/replace dialog box.
                      8: 
                      9:   Functions:
                     10: 
                     11:     - lpfnFilterProc()      -- A callback function for a filter that must be
                     12:                                installed if a modeless dialog is created with
                     13:                                another dialog as its parent.
                     14: 
                     15:     - DoFindDialog()        -- Creates CDTEST's Open/Save dialog.
                     16: 
                     17:     - FindProc()            -- Callback function for CDTEST's Find/Replace dlg.
                     18: 
                     19:     - InitFindStruct()      -- Fills a FINDREPLACE structure with some defaults.
                     20: 
                     21:     - FillFindDlg()         -- Fills CDTESTs Find/Replace dialog with the contents
                     22:                                of a FINDREPLACE structure.
                     23: 
                     24:     - GetFindDlg()          -- Retrieves the users edit's from CDTEST's find/
                     25:                                replace dialog and puts them in a FINDREPLACE
                     26:                                structure.
                     27: 
                     28:     - FindReplaceHookProc() -- Callback function for FindText() or ReplaceText()
                     29:                                which will be called if either of these dialogs
                     30:                                is created with the FR_ENABLEHOOK flag.
                     31: 
                     32:     - GetFindDlgHandle()    -- Returns a handle to a preloaded FindText() template.
                     33: 
                     34:     - GetReplaceDlgHandle() -- Returns a handle to a preloaded ReplaceText() template.
                     35: 
                     36:     - DoFindRepStuff()      -- Calls FindText() or ReplaceText().
                     37: 
                     38: 
                     39:   NOTE: CDTEST does not multithread the FindText() or the ReplaceText()
                     40:         common dialogs.  The reason for this is that since these dialogs
                     41:         are modeless, their creation functions return immediately after the
                     42:         dialogs are created as opposed to other dialog functions that
                     43:         don't return until after the dialog has been destroyed by the user.
                     44: 
                     45:         As a result, any threads that create modeless dialogs will end
                     46:         immediately unless the threads themselves have separate message
                     47:         loops.  For the sake of clarity, this functionality has not been
                     48:         added to CDTEST.
                     49: 
                     50: ************************************************************************/
                     51: 
                     52: 
                     53: #include <windows.h>
                     54: #include <commdlg.h>
                     55: #include <stdlib.h>
                     56: #include <winnls.h>
                     57: #include "cdtest.h"
                     58: #include "find.h"
                     59: #include "replace.h"
                     60: 
                     61: 
                     62: /* All functions used in this module + some exported ones */
                     63: 
                     64: void InitFindStruct(HWND, LPFINDREPLACE) ;
                     65: void FillFindDlg(HWND, LPFINDREPLACE) ;
                     66: void GetFindDlg(HWND, LPFINDREPLACE) ;
                     67: extern UINT uMode ;
                     68: extern LONG MyAtol(LPTSTR, BOOL, LPBOOL) ;
                     69: UINT APIENTRY FindReplaceHookProc(HWND, UINT, UINT, LONG) ;
                     70: void DoFindRepStuff(LPFINDREPLACE) ;
                     71: 
                     72: 
                     73: 
                     74: /* All global variables used in this module */
                     75: 
                     76: HWND hwndFind ;
                     77: HWND hwndMainDialog ;
                     78: 
                     79: FINDREPLACE fr ;
                     80: LPFINDREPLACE lpFr ;
                     81: 
                     82: TCHAR szFindWhat[100] ;
                     83: TCHAR szReplaceWith[100] ;
                     84: TCHAR szTemplate[40] ;
                     85: 
                     86: HANDLE hResFind, hDialogFind ;
                     87: HANDLE GetFindDlgHandle(void) ;
                     88: HANDLE GetReplaceDlgHandle(void) ;
                     89: 
                     90: HBRUSH hBrushDlg ;
                     91: HBRUSH hBrushEdit ;    //brush handles for new colors done with hook proc
                     92: HBRUSH hBrushButton ;
                     93: 
                     94: 
                     95: 
                     96: 
                     97: 
                     98: /************************************************************************
                     99: 
                    100:   Function: lpfnFilterProc(int, WPARAM, LAPRAM)
                    101: 
                    102:   Purpose: This is needed if a modeless dialog is created with its parent
                    103:            as another dialog box.
                    104: 
                    105: 
                    106:   Returns: TRUE if the message was handled and FALSE if not.
                    107: 
                    108:   Comments:
                    109: 
                    110:     The reason for this is that the DialogBox() procedure does not call
                    111:     the IsDialogMessage() function before it processes messages, so we
                    112:     need to install a hook function to do it for us.
                    113: 
                    114: ************************************************************************/
                    115: 
                    116: 
                    117: LRESULT CALLBACK lpfnFilterProc(int nCode, WPARAM wParam, LPARAM lParam)
                    118: {
                    119:   static bFirstTime = TRUE ;
                    120: 
                    121:   if (nCode < 0)
                    122:     return CallNextHookEx(hHook, nCode, wParam, lParam) ;
                    123: 
                    124:   if (nCode == MSGF_DIALOGBOX && bFirstTime)
                    125:   {
                    126:     bFirstTime = FALSE ;
                    127: 
                    128:     if (hwndFind && IsDialogMessage(hwndFind, (LPMSG) lParam))
                    129:     {
                    130:       bFirstTime = TRUE ;
                    131:       return 1L ;
                    132:     }
                    133: 
                    134:     else
                    135:     {
                    136:       bFirstTime = TRUE ;
                    137:       return 0L ;
                    138:     }
                    139:   }
                    140:   else return 0L ;
                    141: }
                    142: 
                    143: 
                    144: 
                    145: 
                    146: 
                    147: 
                    148: 
                    149: /************************************************************************
                    150: 
                    151:   Function: DoFindDialog(HWND)
                    152: 
                    153:   Purpose: This function installs the Hook function, creates the Find/
                    154:            Replace dialog, and un-installs the Hook.
                    155: 
                    156:   Returns: Nothing.
                    157: 
                    158:   Comments:
                    159: 
                    160: ************************************************************************/
                    161: 
                    162: void DoFindDialog(HWND hwnd)
                    163: {
                    164:   bDoFindDlg = TRUE ;
                    165: 
                    166:   /* this is a little different than the others.  If the dialog is just
                    167:      created normally, it will make no IsDlgMessage() checks and the
                    168:      find/replace dialogs will have no keyboard input (i.e. tabbing and
                    169:      alt+key-ing from control to control.  To fix this, a message hook
                    170:      and message filter have to be installed
                    171: 
                    172:      It must be set to only look at the input for the current thread, or other
                    173:      programs will be interrupted by this hook also.
                    174:   */
                    175: 
                    176:   hHook = SetWindowsHookEx(WH_MSGFILTER, lpfnFilterProc,
                    177:                            hInst, GetCurrentThreadId()) ;
                    178: 
                    179:   if (!hHook) return ;
                    180: 
                    181:   DialogBox(hInst, MAKEINTRESOURCE(ID_FINDDIALOG), hwnd, FindProc) ;
                    182: 
                    183:   UnhookWindowsHookEx(hHook) ;
                    184: 
                    185: }
                    186: 
                    187: 
                    188: 
                    189: 
                    190: 
                    191: 
                    192: 
                    193: /************************************************************************
                    194: 
                    195:   Function: FindProc(HWND, UINT, UINT, LONG)
                    196: 
                    197:   Purpose: This is the callback function for the CDTEST's Find/Replace
                    198:            Dialog.
                    199: 
                    200:   Returns: TRUE or FALSE depending on the situation.
                    201: 
                    202:   Comments:
                    203: 
                    204: ************************************************************************/
                    205: 
                    206: BOOL APIENTRY FindProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam)
                    207: {
                    208:   switch (msg)
                    209:   {
                    210:     case WM_INITDIALOG:
                    211: 
                    212:         if (bDoFindDlg)
                    213:           SetWindowText(hwnd, TEXT("FindText()")) ;
                    214:         else
                    215:           SetWindowText(hwnd, TEXT("ReplaceText()")) ;
                    216: 
                    217:         InitFindStruct(hwnd, &fr) ;
                    218:         FillFindDlg(hwnd, &fr) ;
                    219: 
                    220:         hwndMainDialog = hwnd ;
                    221: 
                    222: 
                    223:         /* The find and replace dialogs are a lot harder to multithread because they
                    224:            are modeless.  Modeless dialog creation functions return right after the
                    225:            dialog is created.  Since ExitThread will be called at this point, it is
                    226:            probably not possible to multithread these dialogs without a separate
                    227:            GetMessage() loop.
                    228:         */
                    229: 
                    230: 
                    231:         EnableWindow(GetDlgItem(hwnd, ID_MULTITHREADFINDREP), FALSE) ;
                    232: 
                    233:         SetFocus(GetDlgItem(hwnd, ID_STRUCTSIZEFT)) ;
                    234: 
                    235:         break ;
                    236: 
                    237: 
                    238:     case WM_COMMAND:
                    239:     {
                    240:         switch (LOWORD(wParam))
                    241:         {
                    242:           case IDOK:
                    243:             GetFindDlg(hwnd, &fr) ;
                    244:             DoFindRepStuff(&fr) ;
                    245:             break ;
                    246: 
                    247:           case ID_RESETFIND:
                    248:             SendDlgItemMessage(hwnd, ID_FRNULLSTRUCT, BM_SETCHECK, (WPARAM)0, (LPARAM)0) ;
                    249:             SendDlgItemMessage(hwnd, ID_PRELOADEDFIND, BM_SETCHECK, (WPARAM)0, (LPARAM)0) ;
                    250:             InitFindStruct(hwnd, &fr) ;
                    251:             FillFindDlg(hwnd, &fr) ;
                    252:             SetFocus(GetDlgItem(hwnd, ID_STRUCTSIZEFT)) ;
                    253:             break ;
                    254: 
                    255:           case IDCANCEL:
                    256:             EndDialog(hwnd, FALSE) ;
                    257: 
                    258:             break ;
                    259: 
                    260: 
                    261:           default: break ;
                    262:         }
                    263: 
                    264:     }
                    265: 
                    266:     default:
                    267: 
                    268: 
                    269:     /* nFindMsg is registered at program startup (see CDTEST.c).  The
                    270:        FindText() and ReplaceText() dialogs will communicate with the
                    271:        calling application via this message. */
                    272: 
                    273:     if (msg == nFindMsg)
                    274:     {
                    275:         lpFr = (LPFINDREPLACE) lParam ;
                    276: 
                    277:         if (lpFr->Flags & FR_DIALOGTERM)
                    278:         {
                    279:           PostMessage(hwnd, UMSG_DECREMENTDLGCOUNT, 0, 0L) ;
                    280: 
                    281:           if (hDialogFind)
                    282:           {
                    283:             FreeResource(hDialogFind) ;
                    284:             hDialogFind = (HANDLE) 0 ;
                    285:             hResFind = (HANDLE) 0 ;
                    286:           }
                    287: 
                    288:           hwndFind = (HWND) 0 ;
                    289:         }
                    290: 
                    291:         FillFindDlg(hwnd, &fr) ;
                    292: 
                    293:         wsprintf(szTemp, szLongFilter, CommDlgExtendedError()) ;
                    294:         SetDlgItemText(hwnd, ID_ERRORFT, szTemp) ;
                    295: 
                    296:         wsprintf(szTemp, szLongFilter, hwndFind) ;
                    297:         SetDlgItemText(hwnd, ID_RETURNFT, szTemp) ;
                    298:     }
                    299: 
                    300: 
                    301:     /* If the help button is pressed in the FindText() or ReplaceText()
                    302:        dialogs, it will send a message Registered with RegisterWindowMessage()
                    303:        to the parent window.  The message nHelpMessage was registered
                    304:        at application startup */
                    305: 
                    306:     if (msg == nHelpMessage)
                    307:       MessageBox(GetForegroundWindow(), TEXT("Hello from the help button"),
                    308:                  TEXT("Find Help Button"), MB_OK | MB_APPLMODAL) ;
                    309: 
                    310:     break ;
                    311:   }
                    312: 
                    313:   return FALSE ;
                    314: }
                    315: 
                    316: 
                    317: 
                    318: 
                    319: 
                    320: 
                    321: /************************************************************************
                    322: 
                    323:   Function: InitFindStruct(HWND, LPFINDREPLACE)
                    324: 
                    325:   Purpose: Fills a FINDREPLACE structure with some defaults.
                    326: 
                    327: 
                    328:   Returns: Nothing.
                    329: 
                    330:   Comments:
                    331: 
                    332: ************************************************************************/
                    333: 
                    334: void InitFindStruct(HWND hwnd, LPFINDREPLACE pfr)
                    335: {
                    336:   pfr->lStructSize = (DWORD) sizeof(FINDREPLACE) ;
                    337:   pfr->hwndOwner = hwnd ;
                    338:   pfr->hInstance = (HANDLE) hInst ;
                    339:   pfr->Flags = FR_DOWN | FR_SHOWHELP  ;
                    340: 
                    341:   lstrcpy(szFindWhat, TEXT("Word to find")) ;
                    342:   pfr->lpstrFindWhat = szFindWhat ;
                    343:   pfr->wFindWhatLen = 100 ;
                    344: 
                    345:   lstrcpy(szReplaceWith, TEXT("Replace with word")) ;
                    346:   pfr->lpstrReplaceWith = szReplaceWith ;
                    347:   pfr->wReplaceWithLen = 100 ;
                    348: 
                    349:   pfr->lCustData = (DWORD) 0 ;
                    350: 
                    351:   pfr->lpfnHook = FindReplaceHookProc ;
                    352: 
                    353:   lstrcpy(szTemplate, TEXT("fttemp1")) ;
                    354: 
                    355:   pfr->lpTemplateName = szTemplate ;
                    356: }
                    357: 
                    358: 
                    359: 
                    360: 
                    361: 
                    362: 
                    363: /************************************************************************
                    364: 
                    365:   Function: FillFindDlg(HWND, LPFINDREPLACE)
                    366: 
                    367:   Purpose:  Fills CDTEST's Find/Replace dialog with the contents of a
                    368:             FINDREPLACE structure.
                    369: 
                    370:   Returns:  Nothing.
                    371: 
                    372:   Comments:
                    373: 
                    374: ************************************************************************/
                    375: 
                    376: void FillFindDlg(HWND hwnd, LPFINDREPLACE pfr)
                    377: {
                    378:   wsprintf(szTemp, szLongFilter, pfr->lStructSize) ;
                    379:   SetDlgItemText(hwnd, ID_STRUCTSIZEFT, szTemp) ;
                    380: 
                    381:   wsprintf(szTemp, szLongFilter, (DWORD) pfr->hwndOwner) ;
                    382:   SetDlgItemText(hwnd, ID_HWNDOWNERFT, szTemp) ;
                    383: 
                    384:   wsprintf(szTemp, szLongFilter, (DWORD) pfr->hInstance) ;
                    385:   SetDlgItemText(hwnd, ID_HINSTANCEFT, szTemp) ;
                    386: 
                    387:   wsprintf(szTemp, szLongFilter, pfr->Flags) ;
                    388:   SetDlgItemText(hwnd, ID_FLAGSFT, szTemp) ;
                    389: 
                    390:   SetDlgItemText(hwnd, ID_FINDWHATFT, pfr->lpstrFindWhat) ;
                    391: 
                    392:   wsprintf(szTemp, szLongFilter, pfr->wFindWhatLen) ;
                    393:   SetDlgItemText(hwnd, ID_FINDWHATLENFT, szTemp) ;
                    394: 
                    395:   SetDlgItemText(hwnd, ID_REPLACEWITHFT, pfr->lpstrReplaceWith) ;
                    396: 
                    397:   wsprintf(szTemp, szLongFilter, pfr->wReplaceWithLen) ;
                    398:   SetDlgItemText(hwnd, ID_REPLACEWITHLENFT, szTemp) ;
                    399: 
                    400:   wsprintf(szTemp, szLongFilter, pfr->lCustData) ;
                    401:   SetDlgItemText(hwnd, ID_CUSTDATAFT, szTemp) ;
                    402: 
                    403:   wsprintf(szTemp, szLongFilter, (DWORD) pfr->lpfnHook) ;
                    404:   SetDlgItemText(hwnd, ID_HOOKFT, szTemp) ;
                    405: 
                    406:   SetDlgItemText(hwnd, ID_TEMPLATEFT, pfr->lpTemplateName) ;
                    407: }
                    408: 
                    409: 
                    410: 
                    411: 
                    412: 
                    413: 
                    414: /************************************************************************
                    415: 
                    416:   Function: GetFindDlg(HWND, LPFINDREPLACE)
                    417: 
                    418:   Purpose:  Fills a FINDREPLACE structure with the user's edits in CDTEST's
                    419:             Find/Replace dialog.
                    420: 
                    421:   Returns:  Nothing.
                    422: 
                    423:   Comments:
                    424: 
                    425: ************************************************************************/
                    426: 
                    427: void GetFindDlg(HWND hwnd, LPFINDREPLACE pfr)
                    428: {
                    429:   TCHAR szNum[30] ;
                    430:   BOOL b ;
                    431: 
                    432:   #define WSIZEFR 30
                    433: 
                    434:   GetDlgItemText(hwnd, ID_STRUCTSIZEFT, szNum, WSIZEFR) ;
                    435:   pfr->lStructSize = MyAtol(szNum, uMode == IDM_HEXMODE, &b) ;
                    436: 
                    437:   GetDlgItemText(hwnd, ID_HWNDOWNERFT, szNum, WSIZEFR) ;
                    438:   pfr->hwndOwner = (HWND) MyAtol(szNum, uMode == IDM_HEXMODE, &b) ;
                    439: 
                    440:   GetDlgItemText(hwnd, ID_HINSTANCEFT, szNum, WSIZEFR) ;
                    441:   pfr->hInstance = (HANDLE) MyAtol(szNum, uMode == IDM_HEXMODE, &b) ;
                    442: 
                    443:   GetDlgItemText(hwnd, ID_FLAGSFT, szNum, WSIZEFR) ;
                    444:   pfr->Flags = MyAtol(szNum, uMode == IDM_HEXMODE, &b) ;
                    445: 
                    446: 
                    447:   GetDlgItemText(hwnd, ID_FINDWHATFT, szFindWhat, 100) ;
                    448: 
                    449:   GetDlgItemText(hwnd, ID_REPLACEWITHFT, szReplaceWith, 100) ;
                    450: 
                    451: 
                    452:   GetDlgItemText(hwnd, ID_FINDWHATLENFT, szNum, WSIZEFR) ;
                    453:   pfr->wFindWhatLen = (WORD) MyAtol(szNum, uMode == IDM_HEXMODE, &b) ;
                    454: 
                    455:   GetDlgItemText(hwnd, ID_REPLACEWITHLENFT, szNum, WSIZEFR) ;
                    456:   pfr->wReplaceWithLen = (WORD) MyAtol(szNum, uMode == IDM_HEXMODE, &b) ;
                    457: 
                    458:   GetDlgItemText(hwnd, ID_CUSTDATAFT, szNum, WSIZEFR) ;
                    459:   pfr->lCustData = MyAtol(szNum, uMode == IDM_HEXMODE, &b) ;
                    460: 
                    461:   GetDlgItemText(hwnd, ID_HOOKFT, szNum, WSIZEFR) ;
                    462:   pfr->lpfnHook = (LPFRHOOKPROC) MyAtol(szNum, uMode == IDM_HEXMODE, &b) ;
                    463: 
                    464:   GetDlgItemText(hwnd, ID_TEMPLATEFT, szTemplate, 40) ;
                    465: }
                    466: 
                    467: 
                    468: 
                    469: 
                    470: 
                    471: 
                    472: /************************************************************************
                    473: 
                    474:   Function: FindReplaceHookProc(HWND, UINT, UINT, LONG)
                    475: 
                    476:   Purpose:  Is the callback function that will be called by FindText()
                    477:             or ReplaceText() if the function is called with the
                    478:             FR_ENABLEHOOK flag.
                    479: 
                    480: 
                    481:   Returns:  TRUE to discard the message, and FALSE to instruct the common
                    482:             dialogs to process the message with the default logic.
                    483: 
                    484:   Comments:
                    485: 
                    486:      NOTE!
                    487: 
                    488:      If the application returns FALSE in response to the WM_INITDIALOG
                    489:      message, it is then responsible for displaying the dialog by
                    490:      calling ShowWindow() and UpdateWindow().
                    491: 
                    492: ***********************************************************************/
                    493: 
                    494: 
                    495: UINT APIENTRY FindReplaceHookProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam)
                    496: {
                    497:   LPFINDREPLACE pFr ;
                    498:   TCHAR szMsg[75] ;
                    499:   TCHAR szTmp[20] ;
                    500:   int i ;
                    501:   TCHAR szDefString[] = TEXT("Default String ") ;
                    502: 
                    503:   switch(msg)
                    504:   {
                    505:     case WM_INITDIALOG:
                    506: 
                    507:       pFr = (LPFINDREPLACE) lParam ;
                    508: 
                    509:       if (pFr->lCustData != 0L)
                    510:       {
                    511:         wsprintf(szMsg, TEXT("FINDREPLACE->lCustData is: %ld"), pFr->lCustData) ;
                    512: 
                    513:         MessageBox(hwnd, szMsg, TEXT("lCustData Sent!"), MB_OK | MB_APPLMODAL) ;
                    514:       }
                    515: 
                    516:       SetWindowText(hwnd, TEXT("Find Hook Proc Dialog")) ;
                    517: 
                    518:       if (GetDlgItem(hwnd, ID_DEFSTRINGS))
                    519:       {
                    520:         for (i=0; i<5; i++)
                    521:         {
                    522:           lstrcpy(szMsg, szDefString) ;
                    523:           wsprintf(szTmp, TEXT("Number %d"), i+1) ;
                    524:           lstrcat(szMsg, szTmp) ;
                    525:           SendDlgItemMessage(hwnd, ID_DEFSTRINGS, LB_ADDSTRING, (WPARAM) 0,
                    526:                              (LONG) (LPTSTR) szMsg) ;
                    527:         }
                    528:       }
                    529: 
                    530:       return TRUE ;
                    531: 
                    532:       break ;
                    533: 
                    534: 
                    535: 
                    536:     /* use the WM_CTLCOLOR* messages to change the color of the Open
                    537:        dialog */
                    538: 
                    539:     case WM_CTLCOLORDLG:
                    540: 
                    541:         if (!hBrushDlg)
                    542:             hBrushDlg = GetStockObject(LTGRAY_BRUSH) ;
                    543: 
                    544:         return (UINT) hBrushDlg ;
                    545: 
                    546:         break ;
                    547: 
                    548: 
                    549:     case WM_CTLCOLORBTN:
                    550: 
                    551:         SetBkMode((HDC) wParam, TRANSPARENT) ;   //sets background color
                    552:                                                  //for push and check box
                    553:                                                  //buttons...
                    554: 
                    555:         if (!hBrushButton)
                    556:             hBrushButton = GetStockObject(LTGRAY_BRUSH) ;
                    557: 
                    558:         return (UINT) hBrushButton ;
                    559: 
                    560:         break ;
                    561: 
                    562: 
                    563:     case WM_CTLCOLORSTATIC:
                    564: 
                    565:         SetTextColor((HDC) wParam, RGB(0x00, 0xff, 0x00)) ;  //green
                    566:         SetBkMode((HDC) wParam, TRANSPARENT) ;               //transparent text
                    567: 
                    568:         if (!hBrushDlg)
                    569:             hBrushDlg = GetStockObject(LTGRAY_BRUSH) ;
                    570: 
                    571:         return (UINT) hBrushDlg ;
                    572: 
                    573:         break ;
                    574: 
                    575: 
                    576:     default:
                    577:       break ;
                    578:   }
                    579: 
                    580:   return FALSE ;   //send msg to the common dialog code
                    581: }
                    582: 
                    583: 
                    584: 
                    585: 
                    586: 
                    587: 
                    588: 
                    589: 
                    590: 
                    591: /************************************************************************
                    592: 
                    593:   Function: GetFindDlgHandle(void)
                    594: 
                    595:   Purpose:  Finds, loads, and returns a handle to the custom template
                    596:             for FindText() in CDTEST.EXE.
                    597: 
                    598:   Returns:  HANDLE to the dialog resource.
                    599: 
                    600:   Comments:
                    601: 
                    602: ************************************************************************/
                    603: 
                    604: HANDLE GetFindDlgHandle(void)
                    605: {
                    606:   hResFind = FindResource(hInst, TEXT("fttemp1"), RT_DIALOG) ;
                    607: 
                    608:   hDialogFind = LoadResource(hInst, hResFind) ;
                    609: 
                    610: 
                    611:   return hDialogFind ;
                    612: }
                    613: 
                    614: 
                    615: 
                    616: 
                    617: 
                    618: /************************************************************************
                    619: 
                    620:   Function: GetReplaceDlgHandle(void)
                    621: 
                    622:   Purpose:  Finds, loads, and returns a handle to the custom template
                    623:             for ReplaceText() in CDTEST.EXE.
                    624: 
                    625:   Returns:  HANDLE to the dialog resource.
                    626: 
                    627:   Comments:
                    628: 
                    629: ************************************************************************/
                    630: 
                    631: HANDLE GetReplaceDlgHandle(void)
                    632: {
                    633:   hResFind = FindResource(hInst, TEXT("fttemp2"), RT_DIALOG) ;
                    634: 
                    635:   hDialogFind = LoadResource(hInst, hResFind) ;
                    636: 
                    637:   return hDialogFind ;
                    638: }
                    639: 
                    640: 
                    641: 
                    642: 
                    643: 
                    644: 
                    645: /************************************************************************
                    646: 
                    647:   Function: DoFindReplaceStuff(LPFINDREPLACE)
                    648: 
                    649:   Purpose:  Calls FindText() or ReplaceText().
                    650: 
                    651:   Returns:  Nothing:
                    652: 
                    653:   Comments:
                    654: 
                    655: ************************************************************************/
                    656: 
                    657: void DoFindRepStuff(LPFINDREPLACE pfr)
                    658: {
                    659:   if (IsDlgButtonChecked(hwndMainDialog, ID_PRELOADEDFIND) == 1)
                    660:   {
                    661:     if (bDoFindDlg)
                    662:       pfr->hInstance = GetFindDlgHandle() ;
                    663:     else
                    664:       pfr->hInstance = GetReplaceDlgHandle() ;
                    665:   }
                    666: 
                    667:   if (bDoFindDlg)
                    668:   {
                    669:     if (IsDlgButtonChecked(hwndMainDialog, ID_FRNULLSTRUCT) == 1)
                    670:     {
                    671:         hwndFind = FindText((LPFINDREPLACE) NULL) ;
                    672:     }
                    673:     else
                    674:     {
                    675:         hwndFind = FindText(pfr) ;
                    676:     }
                    677:   }
                    678:   else
                    679:   {
                    680:     if (IsDlgButtonChecked(hwndMainDialog, ID_FRNULLSTRUCT) == 1)
                    681:     {
                    682:         hwndFind = ReplaceText((LPFINDREPLACE) NULL) ;
                    683:     }
                    684:     else
                    685:     {
                    686:         hwndFind = ReplaceText(pfr) ;
                    687:     }
                    688: 
                    689:   }
                    690: 
                    691: 
                    692:   wsprintf(szTemp, szLongFilter, CommDlgExtendedError()) ;
                    693:   SetDlgItemText(hwndMainDialog, ID_ERRORFT, szTemp) ;
                    694: 
                    695:   wsprintf(szTemp, szLongFilter, hwndFind) ;
                    696:   SetDlgItemText(hwndMainDialog, ID_RETURNFT, szTemp) ;
                    697: }

unix.superglobalmegacorp.com

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