


Introduction
I have been developing softwares both in VB & VC, and like many of you, wanted to get user input using something like VB's InputBox. For this, I searched at CodeProject and found some solutions (thanx to them). The problem was: all of them used some dialog resources to solve the problem that ultimately increases the size of the application.
Solution
I am presenting the InputBox by sub-classing the MessageBox provided by MFC. Last week, I found the "Do not ask again" MessageBoxes by Nicolas Bonamy; that discusses the sub-classing of MessageBox to create a CheckBox. I used the same idea to present an EditBox to get the user input by popping the MessageBox. Thanx Nic for the idea.
Sub-classing MessageBox
This relies on MFC hooking through the AfxHookWindowCreate() function. With this, we redirect the MessageBox messages to us and therefore are able to catch (once more) WM_INITDIALOG. Here, we resize the window, add the EditBox and so on...
The big advantage is that our class is in a way the MessageBox itself with an added functionality of Edit Control; and hence the events from Edit control are handled in our class.
Using the code
To use the CInputBox, simply:
- Add the InpuBox.h & InputBox.cpp to your project
- Instantiate the
CInputBox object
- Call the
Show method with a string.
- When the call to
Show() returns, the provided string will contain the user input.
CInputBox theInputBox(this);
CString strUserInput;
theInputBox.Show("Please Enter Some Text Here...", strUserInput);
MessageBox(strUserInput);
Enhancement/Extension
I think you can further enhance the class by setting some methods to implement your specific needs like:
- Only Numeric set
ES_NUMBER
- Special characters by catching
EN_CHANGE
- More than one Edits for different inputs.
Credits
My sincere thanx to:
- Nicolas Bonamy: whose code inspired me for doing such an implementation.
- My friend Sadiq: who always helps me whenever I am stuck in problems.
- My brother Ubaid: who helped me in writing & discussing the code.
- Most of all, my "teacher" MSDN: you know most of us are nothing without it.