Hi
I have an application which uses XTP Themes throughout. I have recently added a modal dialog with several pages using Skin Framework, each page having a different skin. This works fine.
However, I am using a CXTPPopupBar on one of the pages for a pop-up menu, and this is not skinned correctly. On another page I am using a CMenu, and this skins correctly, but I cannot use CMenu for the other as I need features of CommandBars such as SetCloseSubMenuOnClick(false).
Reading these forums, it seems that to get CommandBars to be skinned, you need to do pPopupBar->SetPaintManager( new CXTPNativeXPTheme ) in a handler for WM_XTP_INITCOMMANDSPOPUP (i.e. after the hwnd is created). This works in that the popup is skinned, but it has the wrong skin.
Looking a little deeper, it seems that CXTPNativeXPTheme::RefreshMetrics gets looks up AfxGetMainWnd to get skinning info, rather than the window being skinned...
I tried deriving my own PaintManager from CXTPNativeXPTheme and overriding RefreshMetrics to use a specific window I know has the right skin applied to it. However, this does not work - it seems that in the hooked drawing functions for CommandBars the skin is looked up based on CXTPSkinManager::m_pSchema - the 'top level' schema named "NormalDefault_ini" - where I need it to look up the skin data from a specific child schema/ini.
I have tried calling CXTPSKinManager::LoadSkin("mySkins.cjstyles", "specificSkin.ini"), hoping to set the 'current' skin on the SkinManager, but of course this then affects the whole application behind the modal dialog.
Is there a way to have multiple CommandBars using multiple skins at the same time? It seems that it is designed with the assumption that only one skin at a time would ever be used with CommandBars. I hope this is not the case!
Any suggestions?
Thanks.
|