THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 18/05/2005 at 13:51, xxxxxxxx wrote:
I hope this is for a demo version, otherwise a modal splash screen sounds very intrusive. The best place for such a thing in a regular plugin would be in the About menu item.
If you want the splash to occur on the first use of your plugin, so that it doesn't appear in every session, then the Init() function is a good way to initiate the splash. However, the dialog must not be opened from there. In R9+ the scene preparation code is executed in a thread. I learned the hard way with MSA that having dialogs in there can cause subtle crashes. What's worse was that these crashes only occured in the demo version, so I didn't spot them during testing.
This is the way I do it in my updated, R9 safe, demo versions:
const LONG DEMO_MESSAGE_ID = ...;
class MSADemoMessage : public MessageData
{
public:
virtual Bool CoreMessage(LONG id, const BaseContainer& bc)
{
switch(id)
{
case DEMO_MESSAGE_ID:
MessageDialog(bc.GetLong(BFM_CORE_PAR1));
}
return TRUE;
}
};
Bool RegisterMSADemoMessage()
{
return RegisterMessagePlugin(DEMO_MESSAGE_ID,
"MSA Demo Message", 0,
gNew MSADemoMessage);
}
void DoMessageDialog(LONG id)
{
SpecialEventAdd(DEMO_MESSAGE_ID, id, 0);
}
void MSATag::Execute(...)
{
if (demo && firsttime)
{
...
DoMessageDialog(DEMO_MESSAGE_TEXT);
}
}
Since the dialog is called via a core message it's always thread safe.