Click here to Skip to main content
15,868,292 members
Articles / Desktop Programming / MFC
Article

CInputBox 1.0

Rate me:
Please Sign up or sign in to vote.
4.82/5 (49 votes)
30 Nov 2001CPOL2 min read 130.4K   1.4K   30   18
A CFrameWnd derived class that provides functionality similar to the VB InputBox function. You don't need a dialog resource to use the class!

Image 1

What the class does for you?

I've seen people often asking whether there is something in C++ like the InputBox function in Visual Basic. I guess the easy way is to create your own dialog class. But I thought an easier way would be to write a class that is not dependent on a resource. CInputBox can be used without having to create a dialog resource. It allows you to set the title of the input-box, the prompt and also the default text.

There are just two public functions in addition to the constructor, of course. The constructor needs to be passed a CWnd*. Mostly you can pass this as that parameter.

The main member function is ShowInputBox which is declared as follows:

int ShowInputBox(CString,CString,CString);

The first CString is the prompt to show. The second CString is the title text for the input-box and the third CString is the default text. All three may be null strings. Though I don't see that happening often for the first two parameters.

Always, always call CloseBox after you have shown the input-box. You can only show the box once. If you want to show it again you MUST call CloseBox and then start all over again from object-construction.

How to use the class?

  • First create your CInputBox object
    CInputBox *m_inputbox = new CInputBox(this);
  • Now call the ShowInputBox function passing the prompt text, the title text and the default text
    int rv = m_inputbox->ShowInputBox("Enter your age","Age box","");
  • Find out whether they cancelled the box or whether they clicked OK
    if(rv==IDCANCEL)
        MessageBox("","You cancelled");
  • If they clicked OK you can retrieve the entered text using the InputText public member variable
    if(rv==IDOK)
        MessageBox(m_inputbox->InputText,"the text you entered");
  • Now call CloseBox to avoid memory leaks
    m_inputbox->CloseBox();

Some points that you should keep in mind

  • You can only call ShowInputBox once per object-life-time. Means you simply do it in three steps. Create the object, show the box, close the object. If you need to show an input-box more than once, then for each time you need to follow all three steps.
  • For some strange and as of now unknown reason, on one occasion, my sample program that used this class didn't terminate and was left hanging in memory. I haven't traced the problem yet. But please do let me know if you face a similar problem

Conclusion

This is just version 1. I guess it needs a lot of enhancements like the ability to call ShowInputBox repeatedly and the ability to specify the size and location of the window. I'll do that when I have time.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
United States United States
Nish Nishant is a technology enthusiast from Columbus, Ohio. He has over 20 years of software industry experience in various roles including Chief Technology Officer, Senior Solution Architect, Lead Software Architect, Principal Software Engineer, and Engineering/Architecture Team Leader. Nish is a 14-time recipient of the Microsoft Visual C++ MVP Award.

Nish authored C++/CLI in Action for Manning Publications in 2005, and co-authored Extending MFC Applications with the .NET Framework for Addison Wesley in 2003. In addition, he has over 140 published technology articles on CodeProject.com and another 250+ blog articles on his WordPress blog. Nish is experienced in technology leadership, solution architecture, software architecture, cloud development (AWS and Azure), REST services, software engineering best practices, CI/CD, mentoring, and directing all stages of software development.

Nish's Technology Blog : voidnish.wordpress.com

Comments and Discussions

 
QuestionA couple of slight mods Pin
Doug Joseph13-Oct-11 15:01
Doug Joseph13-Oct-11 15:01 
AnswerRe: A couple of slight mods Pin
Nish Nishant14-Oct-11 5:19
sitebuilderNish Nishant14-Oct-11 5:19 
GeneralMy vote of 5 Pin
Doug Joseph13-Oct-11 14:43
Doug Joseph13-Oct-11 14:43 
GeneralRe: My vote of 5 Pin
Nish Nishant14-Oct-11 5:19
sitebuilderNish Nishant14-Oct-11 5:19 
QuestionWhere are the explainations? Pin
Umander12-Mar-08 4:51
Umander12-Mar-08 4:51 
GeneralOne bug, one improvement (IMHO) Pin
mssg6-Mar-04 1:04
mssg6-Mar-04 1:04 
Generalthread keeps running in some cases Pin
richard sancenot22-Nov-03 9:42
richard sancenot22-Nov-03 9:42 
AnswerRe: thread keeps running in some cases Pin
Gorelik Sasha6-Jan-06 1:31
Gorelik Sasha6-Jan-06 1:31 
GeneralThanks a lot Pin
Melescher12-May-03 23:29
Melescher12-May-03 23:29 
QuestionWhy oh Why? Pin
James Curran3-Dec-01 8:43
James Curran3-Dec-01 8:43 
AnswerRe: Why oh Why? Pin
Nish Nishant3-Dec-01 16:11
sitebuilderNish Nishant3-Dec-01 16:11 
AnswerRe: Why oh Why? Pin
Chris Maunder4-Jul-02 18:14
cofounderChris Maunder4-Jul-02 18:14 
QuestionWhy? Pin
1-Dec-01 10:28
suss1-Dec-01 10:28 
AnswerRe: Why? Pin
Uwe Keim1-Dec-01 12:20
sitebuilderUwe Keim1-Dec-01 12:20 
GeneralRe: Why? Pin
CMFC6.0VS.NETUser3-Dec-01 4:35
CMFC6.0VS.NETUser3-Dec-01 4:35 
Why not just use the Dialog template stuct and the Dynamic Dialog Creation function. I know they do exist but I don't have MSDN open right now for the stuct and function names.

Real World Coding:
     POP& BuyAPop(Money ADollar){...};
GeneralRe: Why? Pin
J Patel3-Dec-01 11:08
J Patel3-Dec-01 11:08 
GeneralRe: Why? Pin
Zac Howland4-Jun-02 6:23
Zac Howland4-Jun-02 6:23 
GeneralRe: Why? Pin
JohnAtTopcon6-May-03 23:47
JohnAtTopcon6-May-03 23:47 

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.