Re: AfxGetMainWnd () call
I'd throw all this code out and start over. Do a modal dialog, don't let =
it close until
the data is verified (don't even enable the OK button!)
If the verification doesn`t take so much time, it would be propably ok
to use the OnKillActive() method of the cporpertypage class to do the
verification for one dialog-page in the wizard. And if the
verification fails the user can`t go to the next page as well as the
field which has a wrong number etc. will be highlighted...
If the verification will take much longer (e.g. check if the ip addr
is availalbe or searching for a dhcp server), its better to use a
worker thread to validate. Maybe it is easier to valiadate such thing
not in this routine. Working with Windows, you are also able to click
the ok button of the network settings, even if the ip is already
available in the network. A few seconds later you will get a
notification which will show you that....
Really? It is so amazingly simple I wouldn't even think twice about do=
- Package up the parameters involved in the validation
I wrote a small method to get all these parameters from all dialog
pages, when the user pressed the "ok" button.
//map which will include all parameters from all
SubStrMap *map = new SubStrMap;
// notify all pages that we are finishing
POSITION Pos = m_PageList.GetHeadPosition();
pPage = (CWizardPage*)m_PageList.GetNext(Pos);
//get all settings from each page
params = new ThreadParams(NULL, AfxGetMainWnd(), NULL,
//start worker thread for verification
- Create a worker thread that does the validation
UINT WorkerThreadProc( LPVOID Param )
params = (ThreadParams*) Param;
map = (SubStrMap*) params->pdata;
//do verification depending on the menue
params->notifyee->PostMessage(UWM_VERIFY_MSG_COMP, map, error-code if
ThreadParams will include the data to be verified as well as a handle
to send PostMessages and a shutdown event.
-Upon completion of the validation, the validation thread does a PostMess=
age back to the
main thread; for example, WPARAM or LPARAM can be used to indicate the re=
- A handler for the above message deals with reporting this to the user
See my essay on thread shutdown, where I talk about deferring closing a w=
indow; the basic
idea is that you ALWAYS fail the closing of the window, spin off the thre=
ad, and based on
validation results, either complete the closing of the window or do nothi=
I will have a look about this subject.
After the verification I will send the map with the values back to the
mainthread - and if there were no errors during the verification - the
mainthread / document will set these values for the network settings,
the serial port settings.... in the xmlfile. If everthing was
successfull I will get back to the dialog (wizard).
I`m not sure if it makes sence to add a modal dialog when the user
presses the ok-button; because apart from the verification of the
network settings, all verifications will take only a short time, so
that the user will see a flickering dialog.... or the user has to
click the okbutton on the waiting-dialog,which will show him that all
changes were made or not...