I tried to "implement" a cbMessageBox at a certain position and suddenly C::B didn't run anymore - instead it crashed silently. I realised the following issue with cbMessageBox:
- if cbMessageBox is called PlaceWindow will be called, but:
- if cbMessageBox is called with a NULL parent pointer, PlaceWindow receives the same
- PlaceWindow with thus issue a cbThrow which will raise a cbException which will use a cbMessageBox
- this again will call PlaceWindow with a NULL pointer... and so on...
You get the idea. cbMessageBox is not safe at all time (speaking about construction/destruction phase)... What to do about this?
My suggestion: Change
if(!w)
cbThrow(_T("Passed NULL pointer to PlaceWindow."));
...in PlaceWindow to:
if(!w)
cbThrow(_T("Passed NULL pointer to PlaceWindow."), true);
...which uses a wxSafeShowMessage instead of cbMessageBox... any objections?
Thomas? Yiannis? Others?
With regards, Morten.
Sounds valid.
Agreed.
Quote from: mandrav on November 15, 2006, 08:10:03 PM
Agreed.
Actually it's wrong. I mean: Using
cbThrow(..., true) in
PlaceWindow is ok.
But using
wxMessageDialog in
cbMessageBox with parent==NULL does not work anyway because
wxMessageDialog *requires* a parent. I fixed it the following way:
In
cbMessageBox, if parent==NULL use a
wxMessageBox, otherwise use
wxMessageDialog.
But: This limits the return values as they differ from
wxMessageDialog. How to handle this (Will commit anytime soon for your inspection...)???
With regards, Morten.
Edit: I'll handle this by mapping the return values of wxMessage
Box to the ones of wxMessage
Dialog. Committing now...
Quote from: MortenMacFly on November 15, 2006, 08:27:03 PM
Edit: I'll handle this by mapping the return values of wxMessageBox to the ones of wxMessageDialog. Committing now...
Yeah. The samples do message box return code translation all over the place.
So does the source code for wxMessageBox.
Quote from: Pecan on November 15, 2006, 09:39:39 PM
Yeah. The samples do message box return code translation all over the place.
So does the source code for wxMessageBox.
...that's good (:?:) to know... ;-)
With regards, Morten.