OCX nested objects
Alistair Israel -- aisrael@hotmail.com Wednesday, July 24, 1996 Environment: MSVC++ 4.1, Win95 I'm using an OLE Control in an SDI app. This I have accomplished by creating the CWnd-based IDispatch wrapper class generated by MSVC as a child window of my view class. I have no problems manipulating the control's basic properties and calling its methods (it's actually a control that draws a graph). My problem lies in how to fine-tune the layout of the control. Unfortunately, it doesn't implement all its layout 'properties' as simple properties accessible through the wrapper, but as 'objects'. I'm not sure whether this means that they're actually nested OLE objects or just objects, as the documentation doesn't really discuss the issue. The provided sample code shows how to work with these 'object' properties in VB, for example: MyChart.Grid.Pen.Width = 1 However, since I am using MSVC, I can't see how to get to the grid object to get to the pen object to get to its width property. I've searched the online docs that came with the control, with MSVC (lots of docs on writing OCXes but not much on _using_ them), and the MFC-l history at MFCPro. Finally I decided this might be a valid question for the MFC mailing list. How do I get to these 'object properties' within the OCX in the simplest way possible under MSVC? My suspicions were actually aroused by a 'GetGrid()' method in the wrapper class that returns an LPDISPATCH. Does this mean that I have to get down & dirty using the COleDispatchDriver class on my own? Or is there a way to have MSVC generate wrapper classes for these 'objects' as well? Hoping for the best, /****************************** * Alistair Israel * * (aisrael@hotmail.com) * * Pilipino Data Network, Inc. * * http://202.47.133.168 * ******************************/ --------------------------------------------------------- Get Your *Web-Based* Free Email at http://www.hotmail.com ---------------------------------------------------------
Mike Blaszczak -- mikeblas@msn.com Saturday, July 27, 1996 OLE likes you to understand a heirarchical arrangement for objects between the dots. It's really that simple, but if you still don't get it, read on: If you have the statement MyChart.Grid.Pen.Width = 1 you're saying that "I have an object [of some well-known type] called MyChart, which has inside of it the interface Grid, which has inside of it the interface Pen, which has the property Width. I want to assign an integer one to Width." While it's convenient to use this in languages like Visual Basic, it isn't so easy to use in Visual C++. It's not that hard, though: you already have a pointer to the IUnknown interface for your MyChart object. You can call QueryInterface() of that IUnknown interface on MyChart to get the Grid interface. That'll get you another IUnknown interface. On that one, QueryInterface for the Pen interface. Given that interface, you should be able to set the Width property. Most complicated servers implement hierarchies like this: Excel, for example, has lots and lots of subobjects. My book includes code that shows you how to do this navigation from the Excel application object itself into a particular instance of a chart down to some attributes of the chart. You can use very very similar code against your control instance. QueryInterface(), of course, works by looking for interface IDs, or IIDs. The IIDs may be available to you from any of a few different sources: a header file that defines preprocessor symbols you can use or that are identified as external symbols you can link to from a library, or by dynamically querying the type library of the object. .B ekiM http://www.nwlink.com/~mikeblas/ ---------- From: owner-mfc-l@netcom.com on behalf of Alistair Israel Sent: Wednesday, July 24, 1996 12:09 AM To: mfc-l@netcom.com Subject: OCX nested objects Environment: MSVC++ 4.1, Win95 I'm using an OLE Control in an SDI app. This I have accomplished by creating the CWnd-based IDispatch wrapper class generated by MSVC as a child window of my view class. I have no problems manipulating the control's basic properties and calling its methods (it's actually a control that draws a graph). My problem lies in how to fine-tune the layout of the control. Unfortunately, it doesn't implement all its layout 'properties' as simple properties accessible through the wrapper, but as 'objects'. I'm not sure whether this means that they're actually nested OLE objects or just objects, as the documentation doesn't really discuss the issue. The provided sample code shows how to work with these 'object' properties in VB, for example: MyChart.Grid.Pen.Width = 1 However, since I am using MSVC, I can't see how to get to the grid object to get to the pen object to get to its width property. I've searched the online docs that came with the control, with MSVC (lots of docs on writing OCXes but not much on _using_ them), and the MFC-l history at MFCPro. Finally I decided this might be a valid question for the MFC mailing list. How do I get to these 'object properties' within the OCX in the simplest way possible under MSVC? My suspicions were actually aroused by a 'GetGrid()' method in the wrapper class that returns an LPDISPATCH. Does this mean that I have to get down & dirty using the COleDispatchDriver class on my own? Or is there a way to have MSVC generate wrapper classes for these 'objects' as well? Hoping for the best, /****************************** * Alistair Israel * * (aisrael@hotmail.com) * * Pilipino Data Network, Inc. * * http://202.47.133.168 * ******************************/ --------------------------------------------------------- Get Your *Web-Based* Free Email at http://www.hotmail.com ---------------------------------------------------------
John & Annette Elsbree -- elsbree@msn.com Monday, August 05, 1996 If the dispatch interfaces for Grid and Pen are described in the control's type library, then the Component Gallery should list these as classes it can generate when you try to import the control itself. If these classes are in fact generated, you should be able to say something like this: IGrid grid(ctl.GetGrid()); IPen pen(grid.GetPen()); int width = pen.GetWidth(); Of course, it would probably be wise to check for failure on the return values from GetGrid and GetPen. If the grid and pen interfaces are not described in the type library, you'll probably need to contact the vendor from whom you obtained the control. John ---------- From: owner-mfc-l@netcom.com on behalf of Alistair Israel Sent: Wednesday, July 24, 1996 12:09 AM To: mfc-l@netcom.com Subject: OCX nested objects Environment: MSVC++ 4.1, Win95 I'm using an OLE Control in an SDI app. This I have accomplished by creating the CWnd-based IDispatch wrapper class generated by MSVC as a child window of my view class. I have no problems manipulating the control's basic properties and calling its methods (it's actually a control that draws a graph). My problem lies in how to fine-tune the layout of the control. Unfortunately, it doesn't implement all its layout 'properties' as simple properties accessible through the wrapper, but as 'objects'. I'm not sure whether this means that they're actually nested OLE objects or just objects, as the documentation doesn't really discuss the issue. The provided sample code shows how to work with these 'object' properties in VB, for example: MyChart.Grid.Pen.Width = 1 However, since I am using MSVC, I can't see how to get to the grid object to get to the pen object to get to its width property. I've searched the online docs that came with the control, with MSVC (lots of docs on writing OCXes but not much on _using_ them), and the MFC-l history at MFCPro. Finally I decided this might be a valid question for the MFC mailing list. How do I get to these 'object properties' within the OCX in the simplest way possible under MSVC? My suspicions were actually aroused by a 'GetGrid()' method in the wrapper class that returns an LPDISPATCH. Does this mean that I have to get down & dirty using the COleDispatchDriver class on my own? Or is there a way to have MSVC generate wrapper classes for these 'objects' as well? Hoping for the best, /****************************** * Alistair Israel * * (aisrael@hotmail.com) * * Pilipino Data Network, Inc. * * http://202.47.133.168 * ******************************/ --------------------------------------------------------- Get Your *Web-Based* Free Email at http://www.hotmail.com ---------------------------------------------------------
| Вернуться в корень Архива |