书上看到的,看不明白~
用函数SetCtrlStyle封装SetWindowLong(),来改变风格。调用如下:
SetCtrlStyle(hWnd,TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS);函数实现:
void CEx_TreeView::SetCtrlStyle(HWND hWnd,DWORD dwNewStyle)
{
DWORD dwOldStyle;
dwOldStyle=GetWindowLong(hWnd,GWL_STYLE);//获取当前风格

if((dwOldStyle & LVS_TYPEMASK)!=dwNewStyle)
{
dwOldStyle=~LVS_TYPEMASK;
dwNewStyle|=dwOldStyle;
SetWindowLong(hWnd,GWL_STYLE,dwNewStyle);
}


}设断点察看值,dwOldStyle == 1342177280,
dwOldStyle & LVS_TYPEMASK的结果是0(LVS_TYPEMASK的定义是0x0003),
dwNewStyle |= dwOldStyle后,dwNewStyle的值是0xFFFFFFFF,不明白中间几句到底是什么意思,怎么运作的???
-----------------------
if((dwOldStyle & LVS_TYPEMASK)!=dwNewStyle)
{
dwOldStyle=~LVS_TYPEMASK;
dwNewStyle|=dwOldStyle;
SetWindowLong(hWnd,GWL_STYLE,dwNewStyle);
}
--------------SetWindowLong的返回值是1342177280,msdn解释SetWindowLong的返回值是“the previous value of the specified 32-bit integer.”,成功的话,这里是应该dwNewStyle么?
万望指教!!!!高分回报!!!