There is no easy way to do this, the documentation points to using
SetWindowLong.
void CMyTreeView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
CTreeCtrl& tree = GetTreeCtrl();
HTREEITEM root_item = tree.InsertItem(CString("MyProject"));
HTREEITEM init_request = tree.InsertItem(CString("Item 1"), root_item);
HTREEITEM doc_package = tree.InsertItem(CString("Item 2"), root_item);
ASSERT(tree.GetSafeHwnd() != NULL );
::SetWindowLong(tree.GetSafeHwnd(),GWL_STYLE,TVS_HASLINES |TVS_LINESATROOT);
}
Iv tried using this to set the styles as in the above code, but the program
gets corrupted.
How can i set the style of a CTreeCtrl nested in a CTreeView?
tree.ModifyStyle(NULL, TVS_HASLINES |TVS_LINESATROOT);
Regards,
Shoaib.
"PRMARJORAM" <PRMAR...@discussions.microsoft.com> wrote in message
news:7A2A351F-F074-48AA...@microsoft.com...
- Shoaib
"M. Shoaib Surya" <shoai...@hotmail.com> wrote in message
news:OYueoWdt...@TK2MSFTNGP03.phx.gbl...
I have cracked it though now, needed to do the following
LONG style = ::GetWindowLong(tree.GetSafeHwnd(),GWL_STYLE);
::SetWindowLong(tree.GetSafeHwnd(),GWL_STYLE, style |
TVS_HASLINES |TVS_LINESATROOT);
So needed to combine the current style with the additions.
>Im using a MFC CTreeView which fits nicely with what im trying to do. I need
>to change the style of the nested CTreeCtrl.
>
>There is no easy way to do this, the documentation points to using
>SetWindowLong.
>
>void CMyTreeView::OnInitialUpdate()
>
>{
>
>CTreeView::OnInitialUpdate();
>
>CTreeCtrl& tree = GetTreeCtrl();
>
>HTREEITEM root_item = tree.InsertItem(CString("MyProject"));
>HTREEITEM init_request = tree.InsertItem(CString("Item 1"), root_item);
>HTREEITEM doc_package = tree.InsertItem(CString("Item 2"), root_item);
>
>ASSERT(tree.GetSafeHwnd() != NULL );
>
>::SetWindowLong(tree.GetSafeHwnd(),GWL_STYLE,TVS_HASLINES |TVS_LINESATROOT);
****
(a) this is not good style for setting styles. You have cleared ALL the style bits,
EXCEPT the two you set. At the VERY MINIMUM this code should say
DWORD style = tree.GetStyle();
style |= TVS_HASLINES | TVS_LINESATROOT;
::SetWindowLong(tree.GetSafeHwnd(), GWL_STYLE, style);
but why go through all that work? Instead, just call
tree.ModifyStyle(0, TVS_HASLINES | TVS_LINESATROOT);
which should be sufficient (no need to get the old style, etc.)
joe
****
>}
>
>Iv tried using this to set the styles as in the above code, but the program
>gets corrupted.
>
>How can i set the style of a CTreeCtrl nested in a CTreeView?
>
>
>
>
Joseph M. Newcomer [MVP]
email: newc...@flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm
i was looking for a method something like SetStyle, then looking at the msdn
documentation for using CTreeCtrl, stated had to use SetWindowLong
I could not believe they had left something so fundamental out of the class
interface, they had not...
> Im using a MFC CTreeView which fits nicely with what im trying to do.
> I need to change the style of the nested CTreeCtrl.
The easiest way is to override PreCreateWindow:
BOOL CMyTreeView::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style |= TVS_HASLINES | TVS_LINESATROOT;
return __super::PreCreateWindow(cs);
}
Some styles need to be done in OnInitialUpdate (or OnCreate)
[I just copied some listview code for an example]
GetListCtrl().SetExtendedStyle(GetListCtrl().GetExtendedStyle() |
LVS_EX_FULLROWSELECT);
Dave Connet
On Wed, 14 May 2008 10:40:01 -0700, PRMARJORAM <PRMAR...@discussions.microsoft.com>
wrote: