Temporary vs. Permanent Windows
ktm@ormec.com Wednesday, November 06, 1996 Environment: VC++ 4.2b, WinNT 4.0 I've written an OCX and a specialized container application. The container application allows the user to insert and delete instances of my OCX control dynamically as follows: 1) I used Insert | Component to create a wrapper class for my OCX in the container. Like all such wrappers, it's based on CWnd. 2) At run-time, the user selects a menu item to create a new instance 3) I determine an available control ID out of a predefined block 4) I allocate a new instance of the wrapper class with new CMyOCX* pItem = new CMyOCX(); 5) I create the object pItem->Create(_T(""), 0, CRect(0,0,0,0), this, ControlID); 6) Naturally, I store the item for later access and destruction 7) I go on to invoke methods of the OCX This works fine at first - if I immediately call a method of my OCX, all is well. However, if I wait, it appears that MFC's idle processing is destroying my window, so attempting to call a method of the OCX fails. What do I have to do differently so that the window sticks around? Katy -- Katy Mulvey ktm@ormec.com Software Development Engineer ORMEC Systems http://www.ormec.com 19 Linden Park; Rochester, NY 14625
Marty Fried -- mfried@linex.com Sunday, November 10, 1996 At 12:01 PM 11/6/96 -0500, ktm@ormec.com wrote: >Environment: VC++ 4.2b, WinNT 4.0 > >4) I allocate a new instance of the wrapper class with new > CMyOCX* pItem = new CMyOCX(); > >5) I create the object pItem->Create(_T(""), 0, CRect(0,0,0,0), this, ControlID); > . . . >This works fine at first - if I immediately call a method of my OCX, all >is well. However, if I wait, it appears that MFC's idle processing is >destroying my window, so attempting to call a method of the OCX fails. > >What do I have to do differently so that the window sticks around? It's not clear where you're doing these calls, but is pItem a stack variable that goes out of scope at the end of the function? Perhaps it needs to be either static or global. I don't see how that would cause the window to be destroyed, though. That should only happen if you delete pItem or destroy the parent window.
| Вернуться в корень Архива |