Click here to Skip to main content
6,635,160 members and growing! (18,146 online)
Email Password   helpLost your password?
Desktop Development » Edit Controls » General     Intermediate License: The GNU General Public License (GPL)

Customizing the Common Find/Replace Dialog in RichEdit View

By Kalai Kandasamy

This article explains how to customize the standard Find/Replace Dialog in RichEdit view.
VC6Win2K, MFC, Dev
Posted:6 Jan 2001
Updated:1 Apr 2001
Views:72,179
Bookmarked:24 times
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
22 votes for this article.
Popularity: 5.63 Rating: 4.19 out of 5

1
1 vote, 33.3%
2

3

4
2 votes, 66.7%
5

Sample Image - CustomFind.gif

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 unwanted 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

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 unwanted controls.

The demo application which is included with this article demonstrates the following:

How to hide a control?

Direction (up/down) control is hidden

How to add a new control?

New control "[ ] Wrap around" is added

How to change its properties?

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:
    CMyFindDlg(CWnd* pParent = NULL);   // standard constructor


// 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:
    // DDX/DDV support

    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;

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 its 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 is also included with this article.

License

This article, along with any associated source code and files, is licensed under The GNU General Public License (GPL)

About the Author

Kalai Kandasamy


Member
Working as an Senoir Engineering Manager in a California/USA based company and having 15 years of design and development experience on UNIX/Windows based platforms. Proficient in C, C++, Visual C++, MFC, Web based development and networking.
Occupation: Architect
Location: United States United States

Other popular Edit Controls articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 10 of 10 (Total in Forum: 10) (Refresh)FirstPrevNext
GeneralCustomize dialog ? PinmemberViet Duy5:37 25 Nov '07  
Questionform template Pinmemberngwaikeong3:33 26 Sep '07  
QuestionFind and Replace PinmemberJaanviragu22:22 18 Sep '07  
QuestionOperator delete Pinmembercrisoc5:57 29 Jun '07  
GeneralIt's missing the most essential part... PinsussAnonymous16:03 5 Feb '03  
GeneralRe: It's missing the most essential part... PinmemberWaylandbill4:05 23 Mar '04  
GeneralCopying Find/Replace dialog template PinmemberBenny2223:14 5 Mar '02  
GeneralRe: Copying Find/Replace dialog template PinmemberAnonymous3:57 31 May '02  
GeneralITextServices? PinmemberM. Ashokkumar19:25 7 Feb '02  
GeneralCool this is what I am looking for Pinmemberdavid215:27 14 Feb '01  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 1 Apr 2001
Editor: Smitha Vijayan
Copyright 2001 by Kalai Kandasamy
Everything else Copyright © CodeProject, 1999-2009
Web22 | Advertise on the Code Project