CPropertyPage::QuerySiblings
Doug Reese -- drrhab@cts.com Tuesday, January 09, 1996 Does anyone have any insight as to how the QuerySiblings method might be = used? Here's what I'm trying to accomplish: I have a CPropertySheet = derived class that contains 6 CPropertyPage derived pages. When a = certain button (a member of my CPropertySheet derived class) is pressed, = I want to call a function in each of my CPropertyPage derived classes = that is not an override of a base class function. This function has the = same name in each of the pages. I know how to iterate through each of = the pages from my CPropertySheet class, but since all CPropertySheet = knows about is CPropertyPages I don't know how to get to the function in = my classes derived from CPropertyPage. Is QuerySiblings the way to go = or is there a better way? Doug
Dale Wilson -- dale@dra.com Thursday, January 11, 1996 [Mini-digest: 3 responses] > Subject: CPropertyPage::QuerySiblings > Date: Tuesday, January 09, 1996 7:55PM > > Does anyone have any insight as to how the QuerySiblings method might be = > used? Here's what I'm trying to accomplish: I have a CPropertySheet = > derived class that contains 6 CPropertyPage derived pages. When a = > certain button (a member of my CPropertySheet derived class) is pressed, = > I want to call a function in each of my CPropertyPage derived classes = > that is not an override of a base class function. This function has the = > same name in each of the pages. I know how to iterate through each of = > the pages from my CPropertySheet class, but since all CPropertySheet = > knows about is CPropertyPages I don't know how to get to the function in = > my classes derived from CPropertyPage. Is QuerySiblings the way to go = > or is there a better way? > > Doug class CBasePage : public CPropertyPage { DECLARE_DYNAMIC(CBasePage) virtual void TheCommonFunction() = 0; void CallSiblings(); } class CPage0 : public CBasePage { virtual void TheCommonFunction(); } ...etc... CBasePage::CallSiblings() { CPropertyPage *pSibling; for each sibling { if(pSibling->IsKindOf(RUNTIME_CLASS(CBasePage))) { CBasePage * pBaseSib = (CBasePage *)pSibling; pBaseSib->TheCommonFunction(); } } } #pragma Details left to the imagination dale@dra.com -----From: Brad Wilson>> Does anyone have any insight as to how the QuerySiblings >> method might be used? I needed to do something just like your scenario. I created a derived class from CPropertySheet and in there I kept pointers to all the created pages (in the constructor of the overrode CPropertySheet I created and added all the property pages). That gave me the flexibility I needed. Good luck! Brad -- class CBradWilson : public CWorldWatchProgrammingTeam { public: CString GetInetAddr() { return CString("bradw@exptech.com"); } CString GetPhone() { return CString("+1 (810) 620-9803"); } CString GetURL() { return CString("http://www.exptech.com"); } CString GetDisclaimer() { return CString("All I say is fact :-p"); } }; "Money is the living power that dies without its root. Money will not serve the mind that cannot match it. Is this the reason why you call it evil?" -----From: "Aravind Balakrishnan(abalakri@us.oracle.com)" I can think of two ways: 1.) Have a class derived from CPropertyPage, say CInterPage. Make all your pages derive from CInterPage. Have a virtual function in CInterPage, overridden by every property page. Then, the class derived from CPropertySheet can cast the page to CInterPage() and call the virtual function. 2.) Have a private message for the page. But this also needs another intermediate class. My choice is 1.) Cheers, Aravind. === Aravind Balakrishnan Systems Management Products, Oracle Corp. (415)506-0432
| Вернуться в корень Архива |