home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / winui / cmddlg / cdtest / find.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-06-17  |  17.6 KB  |  698 lines

  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. }
  698.