From: PRMARJORAM on
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);
}

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?





From: M. Shoaib Surya on
You should call ModifyStyle() member function of CTreeCtrl to set the style.
The following line of code should achieve your purpose.

tree.ModifyStyle(NULL, TVS_HASLINES |TVS_LINESATROOT);

Regards,
Shoaib.

"PRMARJORAM" <PRMARJORAM(a)discussions.microsoft.com> wrote in message
news:7A2A351F-F074-48AA-8D67-B0EFC1C2A298(a)microsoft.com...
> 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);
> }
>
> 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?
>
>
>
>
>


From: M. Shoaib Surya on
Also, the call to the OnInitialUpdate() of the base class, that is, the
following line of code,
CTreeView::OnInitialUpdate();
should be the last line of the overridden CMyTreeView::OnInitialUpdate()
instead of the first line

- Shoaib

"M. Shoaib Surya" <shoaibsurya(a)hotmail.com> wrote in message
news:OYueoWdtIHA.4560(a)TK2MSFTNGP03.phx.gbl...
> You should call ModifyStyle() member function of CTreeCtrl to set the
> style. The following line of code should achieve your purpose.
>
> tree.ModifyStyle(NULL, TVS_HASLINES |TVS_LINESATROOT);
>
> Regards,
> Shoaib.
>
> "PRMARJORAM" <PRMARJORAM(a)discussions.microsoft.com> wrote in message
> news:7A2A351F-F074-48AA-8D67-B0EFC1C2A298(a)microsoft.com...
>> 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);
>> }
>>
>> 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?
>>
>>
>>
>>
>>
>
>


From: Joseph M. Newcomer on
See below...
On Wed, 14 May 2008 08:01:02 -0700, PRMARJORAM <PRMARJORAM(a)discussions.microsoft.com>
wrote:

>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: newcomer(a)flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm
From: PRMARJORAM on
Exactly,

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...


"Joseph M. Newcomer" wrote:

> See below...
> On Wed, 14 May 2008 08:01:02 -0700, PRMARJORAM <PRMARJORAM(a)discussions.microsoft.com>
> wrote:
>
> >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: newcomer(a)flounder.com
> Web: http://www.flounder.com
> MVP Tips: http://www.flounder.com/mvp_tips.htm
>