需要一个示例代码 ,不使用 mfc 的类,只使用 Tree-View Control 提供的消息或宏以及 api 来 操作 Tree-View Control 。需求 : 插入两个结点 , 比如命名为 item_00 , item_00_1 , item_00 是 item_00_1 的父结点 。运行后,我们应当看到 item_00 旁边有个小加号以及单击加号后显示出 子结点 item_00_1 。需求完毕。我想要示例代码,是因为我插入父子结点后,看不到什么加号 ,窗口风格我也指定了 TVS_HASBUTTONS TVS_HASLINES 。所以拜托朋友给出示例代码。 谢谢!!
解决方案 »
- 怎么直接读显存截屏?
- 怎么设置popup menu的菜单项图标尺寸?我的图标是16*16的,但是SetMenuItemBitmaps之后没有完全显示
- access 使用到了m_pRs->movePrevious(),总出错
- 用VC++开发一个程序使主机不可以上网(局域网不限制),并且这个进程不可以结束?
- PADDRINFOW 此类型没定义?这是在什么头文件中申明的?
- 为何调试状态无故跳出一个用户定义的断点对话框?
- 经验问题,多线程中如何灵活使用定时器?
- 一个简单的问题,但是我搞不定,help!!!
- 如何创建dll,在vc中,我要使用c语言,不使用mfc?有没有例子?
- 求高手解决用ADO连接mysql数据库时出错
- 仿VC6.0界面(Demo_DevStudio)m_wndWorkspace问题
- 实在没有办法了,MapX移动地图时候,怎么能够让其一次性显示,现在显示都是一层一层的!
HWND hwndTreeView = CreateWindowEx( 0 , // 新加的扩展风格 WS_EX_CLIENTEDGE
WC_TREEVIEW , // 窗口类
NULL, // 窗口名称,可以显示在标题栏 或者 按钮上
WS_VISIBLE | WS_CHILD | WS_BORDER | TVS_HASLINES | TVS_LINESATROOT , // |LBS_EXTENDEDSEL|LBS_MULTIPLESEL|WS_VSCROLL|WS_HSCROLL|LBS_NOTIFY , // 窗口风格 0 , 80 , // 左上角坐标
300 ,
200 , // 宽 和 高
this->GetSafeHwnd() , // 父窗口
(HMENU)1000, // 菜单或者子窗口id
0, //进程实例,xp下被忽略
NULL //自定义的参数
); // 先插入一个作为 root ,后面的循环中插入子结点 TVITEMEX tcie00; tcie00.mask = TVIF_TEXT ; // | TVIF_CHILDREN ; tcie00.pszText = "root001"; tcie00.cChildren = 1; // I_CHILDRENCALLBACK ; //tcie00.iImage = 0;
TVINSERTSTRUCT item_000; item_000.hParent = TVI_ROOT ; // 根节点 item_000.hInsertAfter = TVI_ROOT ; item_000.itemex = tcie00;
HTREEITEM hti_root = TreeView_InsertItem( hwndTreeView , &item_000 ); // 返回值是新item句柄 for( int i = 0; i < 10 ;i ++ )
{
TVITEMEX tcie00; tcie00.mask = TVIF_TEXT ; // | TVIF_CHILDREN ; tcie00.pszText = "root001"; tcie00.cChildren = 1; // I_CHILDRENCALLBACK ; //tcie00.iImage = 0;
TVINSERTSTRUCT item_000; item_000.hParent = hti_root ; // 根节点 item_000.hInsertAfter = TVI_ROOT ; item_000.itemex = tcie00;
HTREEITEM hti00 = TreeView_InsertItem( hwndTreeView , &item_000 ); // 返回值是新item句柄
}
HWND CreateTreeView(HINSTANCE hInstance, HWND hwndParent)
{
DWORD dwStyle;
HWND hwndTreeView;
BOOL bSuccess = TRUE;dwStyle = WS_TABSTOP | WS_CHILD | WS_BORDER | WS_VISIBLE ;//
hwndTreeView = CreateWindowEx( WS_EX_WINDOWEDGE,//WS_EX_CLIENTEDGE,// ex style
WC_TREEVIEW, // class name defined in commctrl.h
NULL, // window text
dwStyle, // style
320, // x position
120, // y position
TV_WIDTH, // width
TV_HEIGHT, // height
hwndParent, // parent
(HMENU)IDC_TREEVIEW, // ID
(HINSTANCE)GetWindowLong(hwndParent, GWL_HINSTANCE), // instance
NULL); // no extra data
//
if(hwndTreeView)
{
InitTreeView(hwndTreeView);
return hwndTreeView;
}
else
{
return NULL;
}
}
//
BOOL InitTreeView(HWND hwndTreeView)
{
// set tree style
LONG NewStyle=GetWindowLong(hwndTreeView,GWL_STYLE);
NewStyle=NewStyle|TVS_HASBUTTONS|TVS_HASLINES|TVS_INFOTIP|
TVS_LINESATROOT|TVS_SHOWSELALWAYS|TVS_EDITLABELS;
SetWindowLong(hwndTreeView,GWL_STYLE,NewStyle);
//
HIMAGELIST hImageList;
SHFILEINFO sfi;
hImageList = (HIMAGELIST)SHGetFileInfo((LPCSTR)"C:\\",0,&sfi,sizeof(SHFILEINFO),
SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
if (hImageList)
{// Attach ImageList to TreeView
TreeView_SetImageList(hwndTreeView,hImageList,TVSIL_NORMAL);
}// draw tree "My Computer"
TV_INSERTSTRUCT TreeCtrlItem;
TreeCtrlItem.hParent = TVI_ROOT;
TreeCtrlItem.hInsertAfter = TVI_LAST;// don't use TVI_SORT;
TreeCtrlItem.item.mask = TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_CHILDREN;//|TVIF_STATE;
TreeCtrlItem.item.pszText= m_MyComputer;//
TreeCtrlItem.item.cchTextMax = MAX_PATH;
TreeCtrlItem.item.cChildren=1;// has child show "+"
//
HRESULT hr;
LPMALLOC lpMalloc;
hr=::SHGetMalloc(&lpMalloc);
if (FAILED(hr)) return TRUE;
// get pidl of "My Computer"
LPITEMIDLIST lpidl=NULL; // pidl of "My Computer"
hr=SHGetSpecialFolderLocation(NULL,CSIDL_DRIVES,&lpidl);
if (FAILED(hr)) return TRUE;
// icons and "My Computer"
SHGetFileInfo((LPCSTR)lpidl,0,&sfi,sizeof(SHFILEINFO), SHGFI_PIDL |
SHGFI_DISPLAYNAME | SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
TreeCtrlItem.item.iImage = sfi.iIcon;
strcpy(m_MyComputer,sfi.szDisplayName);
//
SHGetFileInfo((LPCSTR)lpidl,0,&sfi,sizeof(SHFILEINFO),SHGFI_PIDL |
SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_OPENICON);
TreeCtrlItem.item.iSelectedImage = sfi.iIcon;
// insert root
HTREEITEM hTreeItem1 = TreeView_InsertItem(hwndTreeView,&TreeCtrlItem);
TreeCtrlItem.hParent = hTreeItem1;
// Free
lpMalloc->Free(lpidl);
lpMalloc->Release();
// under "My Computer"
char buf[MAX_PATH];
char *pDrv=buf;
char drive[40];
if(GetLogicalDriveStrings(260,buf))
{// try all drive
while(*pDrv)
{
strcpy(drive,pDrv);
pDrv+=strlen(drive)+1;
// no A:
if(stricmp(drive,"A:\\")==0) continue;
SHGetFileInfo(drive,FILE_ATTRIBUTE_DIRECTORY,&sfi,sizeof(sfi),
SHGFI_DISPLAYNAME | SHGFI_USEFILEATTRIBUTES | SHGFI_TYPENAME | SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
TreeCtrlItem.hParent = hTreeItem1;
TreeCtrlItem.item.pszText = sfi.szDisplayName;
TreeCtrlItem.item.iImage=sfi.iIcon;
TreeCtrlItem.item.iSelectedImage = sfi.iIcon;
TreeCtrlItem.item.cChildren=1;// child show "+"
// add in
HTREEITEM hTreeItem2 = TreeView_InsertItem(hwndTreeView,&TreeCtrlItem);
// TreeCtrlItem.hParent = hTreeItem2;
}
}
// expand "My Computer"
// TreeView_SelectItem(hwndTreeView,hTreeItem1);//m_Tree.SelectItem();// root
TreeView_Expand(hwndTreeView,hTreeItem1,TVE_EXPAND);// root return TRUE;
}
case WM_CREATE:
{
HWND hTreeView = CreateWindow(WC_TREEVIEW, _T(""),
WS_CHILD | WS_BORDER | WS_VISIBLE | TVS_FULLROWSELECT | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_SHOWSELALWAYS,
10, 10, 200, 300, hWnd, (HMENU)0x11, hInst, NULL);
if(hTreeView)
{
TVINSERTSTRUCT ti;
ti.hParent = NULL;
ti.hInsertAfter = TVI_LAST;
ti.item.mask = TVIF_TEXT;
TCHAR buf[32] = {0};
_stprintf(buf, _T("%s"), _T("item_0"));
ti.item.cchTextMax = _tcslen(buf);
ti.item.pszText = buf;
HTREEITEM hItem = TreeView_InsertItem(hTreeView, &ti);
ti.hParent = hItem;
_stprintf(buf, _T("%s"), _T("item_0_1"));
ti.item.cchTextMax = _tcslen(buf);
ti.item.pszText = buf;
TreeView_InsertItem(hTreeView, &ti);
}
}
break;