CFindReplaceDialog Class
The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.
The latest version of this topic can be found at CFindReplaceDialog Class.
Allows you to implement standard string Find/Replace dialog boxes in your application.
Syntax
class CFindReplaceDialog : public CCommonDialog
Members
Public Constructors
Name | Description |
---|---|
CFindReplaceDialog::CFindReplaceDialog | Call this function to construct a CFindReplaceDialog object. |
Public Methods
Name | Description |
---|---|
CFindReplaceDialog::Create | Creates and displays a CFindReplaceDialog dialog box. |
CFindReplaceDialog::FindNext | Call this function to determine whether the user wants to find the next occurrence of the find string. |
CFindReplaceDialog::GetFindString | Call this function to retrieve the current find string. |
CFindReplaceDialog::GetNotifier | Call this function to retrieve the FINDREPLACE structure in your registered message handler. |
CFindReplaceDialog::GetReplaceString | Call this function to retrieve the current replace string. |
CFindReplaceDialog::IsTerminating | Call this function to determine whether the dialog box is terminating. |
CFindReplaceDialog::MatchCase | Call this function to determine whether the user wants to match the case of the find string exactly. |
CFindReplaceDialog::MatchWholeWord | Call this function to determine whether the user wants to match entire words only. |
CFindReplaceDialog::ReplaceAll | Call this function to determine whether the user wants all occurrences of the string to be replaced. |
CFindReplaceDialog::ReplaceCurrent | Call this function to determine whether the user wants the current word to be replaced. |
CFindReplaceDialog::SearchDown | Call this function to determine whether the user wants the search to proceed in a downward direction. |
Public Data Members
Name | Description |
---|---|
CFindReplaceDialog::m_fr | A structure used to customize a CFindReplaceDialog object. |
Remarks
Unlike the other Windows common dialog boxes, CFindReplaceDialog
objects are modeless, allowing users to interact with other windows while they are on screen. There are two kinds of CFindReplaceDialog
objects: Find dialog boxes and Find/Replace dialog boxes. Although the dialog boxes allow the user to input search and search/replace strings, they do not perform any of the searching or replacing functions. You must add these to the application.
To construct a CFindReplaceDialog
object, use the provided constructor (which has no arguments). Since this is a modeless dialog box, allocate the object on the heap using the new operator, rather than on the stack.
Once a CFindReplaceDialog
object has been constructed, you must call the Create member function to create and display the dialog box.
Use the m_fr structure to initialize the dialog box before calling Create. The m_fr
structure is of type FINDREPLACE. For more information on this structure, see the Windows SDK.
In order for the parent window to be notified of find/replace requests, you must use the Windows RegisterWindowMessage function and use the ON_REGISTERED_MESSAGE message-map macro in your frame window that handles this registered message.
You can determine whether the user has decided to terminate the dialog box with the IsTerminating
member function.
CFindReplaceDialog
relies on the COMMDLG.DLL file that ships with Windows versions 3.1 and later.
To customize the dialog box, derive a class from CFindReplaceDialog
, provide a custom dialog template, and add a message map to process the notification messages from the extended controls. Any unprocessed messages should be passed to the base class.
Customizing the hook function is not required.
For more information on using CFindReplaceDialog
, see Common Dialog Classes.
Inheritance Hierarchy
CFindReplaceDialog
Requirements
Header: afxdlgs.h
CFindReplaceDialog::CFindReplaceDialog
Constructs a CFindReplaceDialog
object.
CFindReplaceDialog();
Remarks
Because the CFindReplaceDialog
object is a modeless dialog box, you must construct it on the heap by using the new
operator.
During destruction, the framework tries to perform a delete this
on the pointer to the dialog box. If you created the dialog box on the stack, the this
pointer does not exist and undefined behavior may result.
For more information on the construction of CFindReplaceDialog
objects, see the CFindReplaceDialog overview. Use the CFindReplaceDialog::Create member function to display the dialog box.
Example
// m_pFRDlg is a pointer to a class derived from CFindReplaceDialog
// which defines variables used by the FINDREPLACE structure.
// InitFindReplaceDlg creates a CFindReplaceDialog and initializes
// the m_fr with the data members from the derived class
void CMyRichEditView::InitFindReplaceDlg()
{
if(NULL == m_pFRDlg)
{
m_pFRDlg = new CMyFindReplaceDialog(); // Must be created on the heap
m_pFRDlg->Create(TRUE, _T(""), _T(""), FR_DOWN, this);
m_pFRDlg->m_fr.lStructSize = sizeof(FINDREPLACE);
m_pFRDlg->m_fr.hwndOwner = this->m_hWnd;
m_pFRDlg->m_fr.lpstrFindWhat = m_pFRDlg->GetFindWhatStr();
m_pFRDlg->m_fr.lpstrReplaceWith = m_pFRDlg->GetReplaceWithStr();
m_pFRDlg->m_fr.wFindWhatLen = m_pFRDlg->GetFindWhatStrLen();
m_pFRDlg->m_fr.wReplaceWithLen = m_pFRDlg->GetReplaceWithStrLen();
}
}
CFindReplaceDialog::Create
Creates and displays either a Find or Find/Replace dialog box object, depending on the value of bFindDialogOnly
.
virtual BOOL Create(
BOOL bFindDialogOnly,
LPCTSTR lpszFindWhat,
LPCTSTR lpszReplaceWith = NULL,
DWORD dwFlags = FR_DOWN,
CWnd* pParentWnd = NULL);
Parameters
bFindDialogOnly
Set this parameter to TRUE
to display a Find dialog box. Set it to FALSE
to display a Find/Replace dialog box.
lpszFindWhat
Pointer to the default search string when the dialog box appears. If NULL
, the dialog box does not contain a default search string.
lpszReplaceWith
Pointer to the default replacement string when the dialog box appears. If NULL
, the dialog box does not contain a default replacement string.
dwFlags
One or more flags you can use to customize the settings of the dialog box, combined using the bitwise OR operator. The default value is FR_DOWN
, which specifies that the search is to proceed in a downward direction. See the FINDREPLACE structure in the Windows SDK for more information on these flags.
pParentWnd
A pointer to the dialog box's parent or owner window. This is the window that will receive the special message indicating that a find/replace action is requested. If NULL
, the main window of the application is used.
Return Value
Nonzero if the dialog box object was successfully created; otherwise 0.
Remarks
In order for the parent window to be notified of find/replace requests, you must use the Windows RegisterWindowMessage function whose return value is a message number unique to the application's instance. Your frame window should have a message map entry that declares the callback function ( OnFindReplace
in the example that follows) that handles this registered message. The following code fragment is an example of how to do this for a frame window class named CMyRichEditView
:
// Message handler declared in CMyRichEditView class declaration
protected:
afx_msg LONG OnFindReplace(WPARAM wParam, LPARAM lParam);
// Register FindReplace window message.
static UINT WM_FINDREPLACE = ::RegisterWindowMessage(FINDMSGSTRING);
// Message map entry to map from message to handler function.
ON_REGISTERED_MESSAGE(WM_FINDREPLACE, &CMyRichEditView::OnFindReplace)
Within your OnFindReplace
function, you interpret the intentions of the user by using the CFindReplaceDialog::FindNext and CFindReplaceDialog::IsTerminating methods and you create the code for the find/replace operations.
Example
See the example for CFindReplaceDialog::CFindReplaceDialog.
CFindReplaceDialog::FindNext
Call this function from your callback function to determine whether the user wants to find the next occurrence of the search string.
BOOL FindNext() const;
Return Value
Nonzero if the user wants to find the next occurrence of the search string; otherwise 0.
CFindReplaceDialog::GetFindString
Call this function from your callback function to retrieve the default string to find.
CString GetFindString() const;
Return Value
The default string to find.
Example
LRESULT CMyRichEditView::OnFindReplace(WPARAM wparam, LPARAM lparam)
{
UNREFERENCED_PARAMETER(wparam);
CFindReplaceDialog *pDlg = CFindReplaceDialog::GetNotifier(lparam);
if( NULL != pDlg )
{
// Use pDlg as a pointer to the existing FindReplace dlg to
// call CFindReplaceDialog member functions
if(pDlg->IsTerminating())
{
CString csFindString;
CString csReplaceString;
csFindString = pDlg->GetFindString();
csReplaceString = pDlg->GetReplaceString();
VERIFY(AfxGetApp()->WriteProfileString( AfxGetApp()->m_pszAppName,
_T("FindString"), csFindString));
VERIFY(AfxGetApp()->WriteProfileString(AfxGetApp()->m_pszAppName,
_T("ReplaceString"), csReplaceString));
VERIFY(pDlg->DestroyWindow());
}
}
return 0;
}
CFindReplaceDialog::GetNotifier
Call this function to retrieve a pointer to the current Find Replace dialog box.
static CFindReplaceDialog* PASCAL GetNotifier(LPARAM lParam);
Parameters
lParam
The lparam value passed to the frame window's OnFindReplace member function.
Return Value
A pointer to the current dialog box.
Remarks
It should be used within your callback function to access the current dialog box, call its member functions, and access the m_fr
structure.
Example
See CFindReplaceDialog::Create for an example of how to register the OnFindReplace handler to receive notifications from the Find Replace dialog box.
LRESULT CMyRichEditView::OnFindReplace(WPARAM wparam, LPARAM lparam)
{
UNREFERENCED_PARAMETER(wparam);
CFindReplaceDialog *pDlg = CFindReplaceDialog::GetNotifier(lparam);
if( NULL != pDlg )
{
// Use pDlg as a pointer to the existing FindReplace dlg to
// call CFindReplaceDialog member functions
if(pDlg->IsTerminating())
{
CString csFindString;
CString csReplaceString;
csFindString = pDlg->GetFindString();
csReplaceString = pDlg->GetReplaceString();
VERIFY(AfxGetApp()->WriteProfileString( AfxGetApp()->m_pszAppName,
_T("FindString"), csFindString));
VERIFY(AfxGetApp()->WriteProfileString(AfxGetApp()->m_pszAppName,
_T("ReplaceString"), csReplaceString));
VERIFY(pDlg->DestroyWindow());
}
}
return 0;
}
CFindReplaceDialog::GetReplaceString
Call this function to retrieve the current replace string.
CString GetReplaceString() const;
Return Value
The default string with which to replace found strings.
Example
See the example for CFindReplaceDialog::GetFindString.
CFindReplaceDialog::IsTerminating
Call this function within your callback function to determine whether the user has decided to terminate the dialog box.
BOOL IsTerminating() const;
Return Value
Nonzero if the user has decided to terminate the dialog box; otherwise 0.
Remarks
If this function returns nonzero, you should call the DestroyWindow
member function of the current dialog box and set any dialog box pointer variable to NULL. Optionally, you can also store the find/replace text last entered and use it to initialize the next find/replace dialog box.
Example
See the example for CFindReplaceDialog::GetFindString.
CFindReplaceDialog::m_fr
Used to customize a CFindReplaceDialog
object.
FINDREPLACE m_fr;
Remarks
m_fr
is a structure of type FINDREPLACE. Its members store the characteristics of the dialog-box object. After constructing a CFindReplaceDialog
object, you can use m_fr
to modify various values in the dialog box.
For more information on this structure, see the FINDREPLACE structure in the Windows SDK.
Example
See the example for CFindReplaceDialog::CFindReplaceDialog.
CFindReplaceDialog::MatchCase
Call this function to determine whether the user wants to match the case of the find string exactly.
BOOL MatchCase() const;
Return Value
Nonzero if the user wants to find occurrences of the search string that exactly match the case of the search string; otherwise 0.
CFindReplaceDialog::MatchWholeWord
Call this function to determine whether the user wants to match entire words only.
BOOL MatchWholeWord() const;
Return Value
Nonzero if the user wants to match only the entire words of the search string; otherwise 0.
CFindReplaceDialog::ReplaceAll
Call this function to determine whether the user wants all occurrences of the string to be replaced.
BOOL ReplaceAll() const;
Return Value
Nonzero if the user has requested that all strings matching the replace string be replaced; otherwise 0.
CFindReplaceDialog::ReplaceCurrent
Call this function to determine whether the user wants the current word to be replaced.
BOOL ReplaceCurrent() const;
Return Value
Nonzero if the user has requested that the currently selected string be replaced with the replace string; otherwise 0.
CFindReplaceDialog::SearchDown
Call this function to determine whether the user wants the search to proceed in a downward direction.
BOOL SearchDown() const;
Return Value
Nonzero if the user wants the search to proceed in a downward direction; 0 if the user wants the search to proceed in an upward direction.