Click here to Skip to main content
15,886,199 members
Articles / Desktop Programming / MFC
Article

A CHexEdit Control - For HEX and DEC number input

Rate me:
Please Sign up or sign in to vote.
4.40/5 (13 votes)
15 Aug 20052 min read 106.8K   4.3K   32   14
An article on how to write an Edit control used for HEX and DEC number input.

Sample Image - chexedit.JPG

Introduction

Recently, I was working on a diagnostic software which requires a Edit Control used for HEX/DEC numbers input. The CEdit that comes with MFC is not so good for this job, as it can not prevent the user from typing an invalid HEX number.

Therefore, I created the CHexEdit control derived from CEdit for HEX/DEC numbers input, it is very easy to use.

Features of the CHexEdit control

These are the features of the CHexEdit class:

  • Automatically validate user input and prevent invalid HEX/DEC number format input.
  • Detect HEX/DEC numbers automatically and highlight the difference by coloring the text.
  • Ability to convert HEX to DEC or DEC to HEX numbers by using the menu that comes with it.
  • Redefines Paste, Cut, Delete, Copy operations to avoid invalid input.
  • Easy to manage input values through its GetValue()/SetValue() functions.
  • Easy to implement for MFC developers.

Using the CHexEdit Control

To use CHexEdit, you must go through the following steps:

  1. In your application, add a control variable for you Edit Control.
  2. Change CEdit to CHexEdit in your corresponding .h files, like this:
     public:
    CHexEdit m_cEdit;
  3. Optionally, you can define your own HEX/DEC number background/foreground colors when initializing your application.
    m_cEdit.SetHexColor(RGB(255,255,255),RGB(0,0,0));
    //black text color and white text background for hex number
    
    m_cEdit.SetDecColor(RGB(0,0,0),RGB(255,255,255));
    //white text color and black text background for dec number
  4. Optionally, you can define its default number through SetValue(unsigned int _value,bool _bHex).
    m_cEdit.SetValue(100,true);
    //set value to 100 using HEX format to express
  5. You can get the input value through GetValue().

Technical background

The CHexEdit is derived form CEdit, and there are three modifications, including:

  1. Validate user input. This is done by overriding CEdit::PreTranslateMessage(MSG* pMsg). When a user strikes a key, it determines whether the key is valid, and makes the input letters to upper case making the number look a bit nicer.
  2. Redefine CEdit's default popup menu. Since a user can not all the time do copy, cut, paste, etc., it is good to check the clipboard buffer and make these menu items grayed when the data is not suitable.
  3. Get input number type (HEX/DEC). By intercepting EN_UPDATE message, it checks whether the input number is HEX or DEC, and colors the background and foreground automatically.
    void CHexEdit::OnEnUpdate() {
        CStringtext;
        this->GetWindowText(text);
        //Hex or Dec?
        this->m_bHex=false;
        if(text.Find("0x")== 0)
            this->m_bHex=true;
        for(int i=0; i < text.GetLength(); i++)
        {
            char c=text.GetAt(i);
            if(c >= 'A' && c <= 'F')
                this->m_bHex=true;
        }
        this->RedrawWindow();
    }

History

  • 21 Jan 2005 - v1.0 - First release.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
China China
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
Generalneed your help Pin
billups13-Sep-09 16:21
billups13-Sep-09 16:21 
Generalwhen UNICODE is used, many modify is needed Pin
wps16-May-06 16:27
wps16-May-06 16:27 
GeneralNewbie question Pin
egads@Fermi11-May-06 10:39
egads@Fermi11-May-06 10:39 
GeneralRe: Newbie question Pin
Luo Pei'en12-May-06 18:26
Luo Pei'en12-May-06 18:26 
GeneralRe: Newbie question Pin
egads@Fermi15-May-06 3:47
egads@Fermi15-May-06 3:47 
GeneralErrors Pin
David Crow31-Jan-06 4:04
David Crow31-Jan-06 4:04 
GeneralRe: Errors Pin
Luo Pei'en31-Jan-06 4:22
Luo Pei'en31-Jan-06 4:22 
GeneralRe: Errors Pin
David Crow31-Jan-06 4:57
David Crow31-Jan-06 4:57 
GeneralRe: Errors Pin
Luo Pei'en31-Jan-06 18:28
Luo Pei'en31-Jan-06 18:28 
GeneralGr8 Control and a minor fix Pin
shanviz21-Sep-05 23:07
shanviz21-Sep-05 23:07 
GeneralJust found a memory leak.... Pin
prcarp9-Aug-05 3:12
prcarp9-Aug-05 3:12 
GeneralRe: Just found a memory leak.... Pin
Luo Pei'en14-Aug-05 4:09
Luo Pei'en14-Aug-05 4:09 
GeneralStrange characters Pin
dgroves15-Mar-05 6:03
dgroves15-Mar-05 6:03 
GeneralThanks! Pin
prcarp26-Jan-05 4:18
prcarp26-Jan-05 4:18 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.