为了实现类似VisualStudio Workspace风格的窗体,我把CTreeCtrl摆在CTabCtrl里,
但是动态创建的CTreeCtrl风格老是出不来边框,尽管我已经设了WS_EX_DLGMODALFRAME,
代码如下:
//start...
// create a tab control with tree controls inside it....
if (!m_TabCtrl.Create(WS_CHILD | WS_VISIBLE | TCS_BOTTOM | TCS_MULTILINE,
CRect(0,0,0,0), this, 1234))
{
TRACE("Failed to create Tab control\n");
return -1;
} m_ImgList.Create( IDB_TREEBAR, 16, 1, RGB(192, 192, 192));
m_TabCtrl.SetFont(CFont::FromHandle((HFONT)GetStockObject(DEFAULT_GUI_FONT)));
m_TabCtrl.SetImageList(&m_ImgList);
// populate the tab control ....
LPCTSTR szTabName[] = { _T("Forms"), _T("Files")};
for (int i = 0; i < sizeof(szTabName) / sizeof(LPCTSTR); i++)
{
CTreeCtrl * pTreeCtrl = new CTreeCtrl;
DWORD dwStyle = WS_VISIBLE |
WS_BORDER |
WS_CHILD |
TVS_HASBUTTONS |
TVS_HASLINES |
TVS_LINESATROOT |
TVS_TRACKSELECT |
WS_TABSTOP ;
if (!pTreeCtrl->Create(dwStyle, CRect(10,10,173,390), &m_TabCtrl, i))
return -1; // failed to create tree control
pTreeCtrl->ModifyStyle(0, WS_EX_DLGMODALFRAME|WS_EX_CLIENTEDGE|WS_EX_STATICEDGE,1); TC_ITEM TCI;
TCI.mask = TCIF_TEXT | TCIF_PARAM | TCIF_IMAGE;
TCI.pszText = (char *)szTabName[i];
TCI.lParam = (LPARAM)pTreeCtrl;
TCI.iImage = i;
VERIFY(m_TabCtrl.InsertItem(i, &TCI) != -1);
// insert some items into the tree control.
HTREEITEM hRoot = pTreeCtrl->InsertItem(szTabName[i]);
for (int j = 0; j < 4; j++)
{
CString strText;
strText.Format("item %d", j);
pTreeCtrl->InsertItem(strText , hRoot);
}
}
// end ...还望各位指点,thanx.
但是动态创建的CTreeCtrl风格老是出不来边框,尽管我已经设了WS_EX_DLGMODALFRAME,
代码如下:
//start...
// create a tab control with tree controls inside it....
if (!m_TabCtrl.Create(WS_CHILD | WS_VISIBLE | TCS_BOTTOM | TCS_MULTILINE,
CRect(0,0,0,0), this, 1234))
{
TRACE("Failed to create Tab control\n");
return -1;
} m_ImgList.Create( IDB_TREEBAR, 16, 1, RGB(192, 192, 192));
m_TabCtrl.SetFont(CFont::FromHandle((HFONT)GetStockObject(DEFAULT_GUI_FONT)));
m_TabCtrl.SetImageList(&m_ImgList);
// populate the tab control ....
LPCTSTR szTabName[] = { _T("Forms"), _T("Files")};
for (int i = 0; i < sizeof(szTabName) / sizeof(LPCTSTR); i++)
{
CTreeCtrl * pTreeCtrl = new CTreeCtrl;
DWORD dwStyle = WS_VISIBLE |
WS_BORDER |
WS_CHILD |
TVS_HASBUTTONS |
TVS_HASLINES |
TVS_LINESATROOT |
TVS_TRACKSELECT |
WS_TABSTOP ;
if (!pTreeCtrl->Create(dwStyle, CRect(10,10,173,390), &m_TabCtrl, i))
return -1; // failed to create tree control
pTreeCtrl->ModifyStyle(0, WS_EX_DLGMODALFRAME|WS_EX_CLIENTEDGE|WS_EX_STATICEDGE,1); TC_ITEM TCI;
TCI.mask = TCIF_TEXT | TCIF_PARAM | TCIF_IMAGE;
TCI.pszText = (char *)szTabName[i];
TCI.lParam = (LPARAM)pTreeCtrl;
TCI.iImage = i;
VERIFY(m_TabCtrl.InsertItem(i, &TCI) != -1);
// insert some items into the tree control.
HTREEITEM hRoot = pTreeCtrl->InsertItem(szTabName[i]);
for (int j = 0; j < 4; j++)
{
CString strText;
strText.Format("item %d", j);
pTreeCtrl->InsertItem(strText , hRoot);
}
}
// end ...还望各位指点,thanx.
return -1; // failed to create tree control
pTreeCtrl->ModifyStyle(0, WS_EX_DLGMODALFRAME|WS_EX_CLIENTEDGE|WS_EX_STATICEDGE,1);// 这儿增加一句:
pTreeCtrl->ShowScroll(SB_BOTH); // OK
// 这儿增加一句:
pTreeCtrl->ShowScroll(SB_BOTH); // OK???我试了一下:
error C2039: 'ShowScroll' : is not a member of 'CTreeCtrl'
pTreeCtrl->ShowScrollBar(SB_BOTH);
so,the problem is still there.
if (!pTreeCtrl->Create(dwStyle, CRect(10,10,173,390), &m_TabCtrl, i))
return -1; // failed to create tree control
pTreeCtrl->ModifyStyleEx( // 改成ModifyStyleEx
0,
WS_EX_DLGMODALFRAME|WS_EX_CLIENTEDGE|WS_EX_STATICEDGE);// 这儿增加一句:
pTreeCtrl->ShowScrollBar(SB_BOTH); // OK
pTreeCtrl->ShowScrollBar(SB_BOTH,FALSE)