Customizing the Common Find/Replace Dialog in RichEdit View | CodeGuru

Customizing the Common Find/Replace Dialog in RichEdit View

Introduction This article explains how to customize the standard Find/Replace Dialog in RichEdit view. The logic is same for Edit view or any other generic views with slight changes. Customizing the Find/Replace Dialog involves modifying windows common Find/Replace dialog template which allows you to add any new controls or remove the existing one. Please note, […]

Written By
CodeGuru Staff
CodeGuru Staff
Jan 25, 2001
2 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Introduction

This article explains how to customize the standard Find/Replace Dialog
in RichEdit view. The logic is same for Edit view or any other generic
views with slight changes. Customizing the Find/Replace Dialog involves
modifying windows common Find/Replace dialog template which allows you
to add any new controls or remove the existing one. Please note, none of
the controls in the original Find/Replace dialog template should be
deleted instead, you can disable or hide those un wanted controls!

Find/Replace common Dialog customization

Customizing Find/Replace common dialog involves the following steps:

Step 1

Copy the Find/Replace dialog template from common dialog .RC to the
application ‘s .RC file.This dialog template resides in the file
“include\findtext.dlg”

Advertisement

Step 2

Make any necessary changes to the copied dialog template and note
again none of the controls in the original Find/Replace dialog template
should be deleted, instead you can disable or hide those un wanted
controls.

The demo application which included with this article demonstrates the followings:

How to hide a contol?

o Directon(up/down) control is hidden

How to add an new control?

o New control “[ ] Auto wrap” is added

How to change it’s properties?

o Dialog’s default font has been changed

Step 3

Use Classwizard to add a C++ class for our new Find/Replace template
(say, CMyFindDlg). Drive this new class from CDialog as the
base class. Then change all reference from CDialog to CFindReplaceDialog
in both header and implementation file of the newly created class.

///////////////////////////////////////////////////////////
// CMyFindDlg dialog
class CMyFindDlg : public CFindReplaceDialog
{
// Construction
public:
 // standard constructor
 CMyFindDlg(CWnd* pParent = NULL);
// Dialog Data
 //{{AFX_DATA(CMyFindDlg)>
 enum { IDD = IDD_MYFINDDLG };
 // NOTE: the ClassWizard will add data members here
 //}}AFX_DATA
// Overrides
 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CMyFindDlg)
 protected:
 virtual void DoDataExchange(CDataExchange* pDX);
 //}}AFX_VIRTUAL
// Implementation
protected:
 // Generated message map functions
 //{{AFX_MSG(CMyFindDlg)
 afx_msg void OnCheck1();
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
};

Step 4

Change the constructor of CFindReplaceDialog which differs from the
CDialog’s constructor.

///////////////////////////////////////////////////////////
// CMyFindDlg dialog
CMyFindDlg::CMyFindDlg(CWnd* pParent /*=NULL*/)
 : CFindReplaceDialog()
{
 //{{AFX_DATA_INIT(CMyFindDlg)
  // NOTE: the ClassWizard will add member 
  // initialization here
 //}}AFX_DATA_INIT
}

Step 5

Create a new Menu item and a Toolbar button for our Find and add a
handler function for command message (say, OnMyFind).While creating the
Find dialog we can hide the unwanted controls.

///////////////////////////////////////////////////////////
// CMyFindView message handlers
void CMyFindView::OnMyFind()
{
 m_pMyFindDialog= new CMyFindDlg();
 m_pMyFindDialog->m_fr.lpTemplateName =
  MAKEINTRESOURCE(IDD_MYFINDDLG);
 m_pMyFindDialog->Create(TRUE,
                         NULL,
                         NULL,
                         FR_ENABLETEMPLATE | FR_HIDEUPDOWN,
                         this);
 m_pMyFindDialog->SetActiveWindow();
 m_pMyFindDialog->ShowWindow(TRUE);
 // TODO: Add your command handler code here
}

Where m_pMyFindDialog is defined in MyFindView.h

CMyFindDlg* m_pMyFindDialog;
Advertisement

Step 6

When Find/Replace dialog is opened the user can edit or type the
search string, change the check marks of controls or press any buttons.
So we should process those requests and necessary action to be taken.
Actually CFindReplaceDialog sends a message to it’s parent and you must
specify the FINDMSGSTRING control in a call to the RegisterWindowMessage
function to get the identifier to the message, sent by the FindReplace
dialog box. Also add an ON_REGISTER_MESSAGE entry for message handler.

static UINT FindReplaceDialogMessage =
 ::RegisterWindowMessage(FINDMSGSTRING);
ON_REGISTERED_MESSAGE(FindReplaceDialogMessage,
                      OnFindReplaceMessage)

Here is the Find/Replace dialog message handler function:

LRESULT CMyFindView::OnFindReplaceMessage(WPARAM wParam,
                                          LPARAM lParam)
{
 CFindReplaceDialog* pFindReplace =
  CFindReplaceDialog::GetNotifier(lParam);
 ASSERT(pFindReplace != NULL);
 if (pFindReplace->IsTerminating())
 {
  pFindReplace = NULL;
 }
 else if (pFindReplace->FindNext())
 {
  if(FindText(pFindReplace->GetFindString(),
              FALSE,
              FALSE))
   AdjustDialogPosition(pFindReplace);
  else
   TextNotFound(pFindReplace->GetFindString());
 }
 return 0;
}

Conclusion

The purpose of this article is to demonstrate how to customize the
standard Find/Replace dialog in a MFC application and how to handle the
Find/Replace dialog box messages. A sample application with source files
are also included with this article.

Downloads

Download source code and demo project – 32 Kb

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.