Re: MDIGetActive not Working!! Help Required
rishabh.saxena.iitd@gmail.com wrote:
I have created a Modeless Dialog Box using threads (CWinThread).
I think this was a mistake. Normally, you only handle the UI in the main
thread and then use modeless dialogs to get an additional window that
doesn't block other windows. The modeless window is still a childwindow (I
think) of the main window, so they are part of the same message routing
net.
Alternatively, you create a thread where you create another window (you
could have made it modal, too) which is then another top-level window, so
its message routing is independent from the main window.
If this modeless dialog is e.g. a progress window for a longer background
task, you can instead use a thread to execute that task and a periodic
SendMessage() to update the progress. Alternatively, you can use a timer to
update the progress.
The thread invokes a dialog box (derived from CDialog) which acts as
modeless. The thread is invoked through a menu handler in CMyView
class. Now in my dialog box that is invoked in Cwinthread derived
class , i want my doc or view data to be there. Now can u tell me how
can i do that.
When exchanging messages between threads, you should not use C++ CWnd
objects but SendMessage&Co. However, I strongly advise against multiple
threads for UI handling, rather use a modeless dialog like mentioned above.
I tried this but the execution terminates abnormally.
Where? Why? What does the debugger say?
CMDIChildWnd * pChild =
((CMDIFrameWnd*)(AfxGetApp()->m_pMainWnd))->MDIGetActive();
Well, you are dereferencing two pointers here, either of which could be
zero. At least ASSERT() or VERIFY() that they are valid.
Uli