如果你要封装 一个控件。如:comboboxctrl,
你可以直接借用 bkwin 下已有的类进行复制,对其内容进行修改。
当你在配置文件中,添加控件节点以后。如:
<comboboxctrl pos="0,335,-0,375" id="190632" class="textsettab" tabskin="stocktabbk" tabwidth="94" tabspacing="1" tabheight="40" framepos="0" noscroll="1" crtext="000000" crbg ="eeeeee">
<comboboxitem title="AAAAAA" width="full" height="full" show="0"></comboboxitem>
<comboboxitem title="BBBBBB" width="full" height="full" show="0"></comboboxitem>
<comboboxitem title="CCCCCC" width="full" height="full" show="0"></comboboxitem>
<comboboxitem title="DDDDDD" width="full" height="full" show="0"></comboboxitem>
</comboboxctrl>
但是,他并不能正常显示。
这是你需要添加 几行代码:
1.打开类:bkwndpanel.h
2.找到配置文件加载入口:
// Create children
virtual BOOL Load(TiXmlElement* pTiXmlElem)
{
if (!CBkWindow::Load(pTiXmlElem))
return FALSE;
return LoadChilds(pTiXmlElem->FirstChildElement());
}
其为virtual 函数,多态再次妙用。
BOOL LoadChilds(TiXmlElement* pTiXmlChildElem)
{
CBkWindow *pNewChildWindow = _CreateBkWindowByName(pXmlChild->Value());
}
inline CBkWindow* CBkPanel::_CreateBkWindowByName(LPCSTR lpszName)
{
CBkWindow *pNewWindow = NULL;
// pNewWindow = CBkPanel::CheckAndNew(lpszName);
// if (pNewWindow)
// return pNewWindow;
pNewWindow = CBkDialog::CheckAndNew(lpszName);
if (pNewWindow)
return pNewWindow;
pNewWindow = CBkDialogFile::CheckAndNew(lpszName);
if (pNewWindow)
return pNewWindow;
pNewWindow = CBkStatic::CheckAndNew(lpszName);
if (pNewWindow)
return pNewWindow;
pNewWindow = CBkButton::CheckAndNew(lpszName);
if (pNewWindow)
return pNewWindow;
}
看到这里,我想你就明白了。
(完)