亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? teach_road_47.htm

?? vc++設計寶典教程4
?? HTM
字號:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb_2312-80">
<meta name="GENERATOR" content="聞怡洋 wyy_cq@21cn.com">
<title>Visual C++/MFC開發指南</title>
<SCRIPT LANGUAGE='JavaScript' SRC='../navigate_bar.js'></SCRIPT>
<link REL="stylesheet" HREF="../main.css">


</head>
<SCRIPT LANGUAGE='JavaScript'>write_body();</SCRIPT>
<SCRIPT LANGUAGE='JavaScript'>write_bar();</SCRIPT>

<p align="center"><a
HREF="http://www.0828.com/pay/cgi-bin/random.cgi?job=go&id=820"
target="_blank">
<img SRC="http://www.0828.com/pay/cgi-bin/random.cgi?id=820" BORDER="0"
width="468" height="60"></a><br>
<font size="2"><a href="http://www.0828.com/pay/index.html"><img border="0"
src="http://www.0828.com/pay/code.gif" width="468" height="15"></a><br>
<small>你每點一下上面的廣告我就能有更多的上網時間為大家尋找資料</small></font>
</p>

<table width=98% cellspacing="0" cellpadding="0" align=center><!--整體框架-->
<tr><td>

<table border=0 width="100%" cellspacing="0" cellpadding="2"><!--標記放置區域-->
<tr>
	<td width="30%" align="center" bgcolor="#003D84" valign=middle><img src=../img/brand_200_60.gif width=200 height=60 alt="LOGO1"></td>
	<td width="70%" align="center" bgcolor="#003D84" valign=middle><img src=../img/logo_400_60.gif width=400 height=60 alt="LOGO2"></td>
</tr>
<tr>
	<td colspan="2" bgcolor="#0080C0" align=center><font color=white>您當前位置</font> <a href=../index.htm><font color=white>首頁</font></a> <a href=index.htm><font color=white>開發教程</font></a> <font class=eng color=white>4.7 Tree Ctrl</font><SCRIPT LANGUAGE='JavaScript'>write_command();</SCRIPT></font></td>
</tr>
</table><!--標記放置區域 END-->

<table border=0 width=100% cellspacing="0" cellpadding="0">
<tr>
<td><!--begin-->

<br>
<p align=center><big><font class=eng>4.7 Tree Ctrl</font></big></p>
<table border=0 align=center width=100%>
<tr><td>
<small>
<p>樹形控件TreeCtrl和下節要講的<a href=teach_road_48.htm>列表控件 ListCtrl</a>在系統中大量被使用,例如Windows資源管理器就是一個典型的例子。</p>
<p>樹形控件可以用于樹形的結構,其中有一個根接點(Root)然后下面有許多子結點,而每個子結點上有允許有一個或多個或沒有子結點。MFC中使用CTreeCtrl類來封裝樹形控件的各種操作。通過調用<br>
BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );創建一個窗口,dwStyle中可以使用以下一些樹形控件的專用風格:
<ul>
<li>
<b>TVS_HASLINES</b> 在父/子結點之間繪制連線</li>
<li>
<b>TVS_LINESATROOT</b> 在根/子結點之間繪制連線</li>
<li>
<b>TVS_HASBUTTONS</b> 在每一個結點前添加一個按鈕,用于表示當前結點是否已被展開</li>
<li>
<b>TVS_EDITLABELS</b> 結點的顯示字符可以被編輯</li>
<li>
<b>TVS_SHOWSELALWAYS</b> 在失去焦點時也顯示當前選中的結點</li>
<li>
<b>TVS_DISABLEDRAGDROP</b> 不允許Drag/Drop</li>
<li>
<b>TVS_NOTOOLTIPS</b> 不使用ToolTip顯示結點的顯示字符</li>
</ul>
在樹形控件中每一個結點都有一個句柄(HTREEITEM),同時添加結點時必須提供的參數是該結點的父結點句柄,(其中根Root結點只有一個,既不可以添加也不可以刪除)利用<br>
HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST );可以添加一個結點,pszItem為顯示的字符,hParent代表父結點的句柄,當前添加的結點會排在hInsertAfter表示的結點的后面,返回值為當前創建的結點的句柄。下面的代碼會建立一個如下形式的樹形結構:
<pre>
+--- Parent1
    +--- Child1_1
    +--- Child1_2
    +--- Child1_3
+--- Parent2
+--- Parent3

<font color=green>/*假設m_tree為一個CTreeCtrl對象,而且該窗口已經創建*/</font>
HTREEITEM hItem,hSubItem;
hItem = m_tree.InsertItem("Parent1",TVI_ROOT);<font color=green>在根結點上添加Parent1</font>
hSubItem = m_tree.InsertItem("Child1_1",hItem);<font color=green>//在Parent1上添加一個子結點</font>
hSubItem = m_tree.InsertItem("Child1_2",hItem,hSubItem);<font color=green>//在Parent1上添加一個子結點,排在Child1_1后面</font>
hSubItem = m_tree.InsertItem("Child1_3",hItem,hSubItem);

hItem = m_tree.InsertItem("Parent2",TVI_ROOT,hItem);    
hItem = m_tree.InsertItem("Parent3",TVI_ROOT,hItem);    
</pre>
如果你希望在每個結點前添加一個小圖標,就必需先調用CImageList* SetImageList( CImageList * pImageList, int nImageListType );指明當前所使用的ImageList,nImageListType為TVSIL_NORMAL。在調用完成后控件中使用圖片以設置的ImageList中圖片為準。然后調用<br>
HTREEITEM InsertItem( LPCTSTR lpszItem, int nImage, int nSelectedImage, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST);添加結點,nImage為結點沒被選中時所使用圖片序號,nSelectedImage為結點被選中時所使用圖片序號。下面的代碼演示了ImageList的設置。
<pre>
<font color=green>/*m_list 為CImageList對象
IDB_TREE 為16*(16*4)的位圖,每個圖片為16*16共4個圖標*/</font>
m_list.Create(IDB_TREE,16,4,RGB(0,0,0));
m_tree.SetImageList(&m_list,TVSIL_NORMAL);
m_tree.InsertItem("Parent1",0,1);<font color=green>//添加,選中時顯示圖標1,未選中時顯示圖標0</font>
</pre>
</p>
<p>此外CTreeCtrl還提供了一些函數用于得到/修改控件的狀態。
<br>HTREEITEM GetSelectedItem( );將返回當前選中的結點的句柄。BOOL SelectItem( HTREEITEM hItem );將選中指明結點。
<br>BOOL GetItemImage( HTREEITEM hItem, int& nImage, int& nSelectedImage ) / BOOL SetItemImage( HTREEITEM hItem, int nImage, int nSelectedImage )用于得到/修改某結點所使用圖標索引。
<br>CString GetItemText( HTREEITEM hItem ) /BOOL SetItemText( HTREEITEM hItem, LPCTSTR lpszItem );用于得到/修改某一結點的顯示字符。
<br>BOOL DeleteItem( HTREEITEM hItem );用于刪除某一結點,BOOL DeleteAllItems( );將刪除所有結點。
</p>
<p>此外如果想遍歷樹可以使用下面的函數:
<br>HTREEITEM GetRootItem( );得到根結點。
<br>HTREEITEM GetChildItem( HTREEITEM hItem );得到子結點。
<br>HTREEITEM GetPrevSiblingItem/GetNextSiblingItem( HTREEITEM hItem );得到指明結點的上/下一個兄弟結點。
<br>HTREEITEM GetParentItem( HTREEITEM hItem );得到父結點。
</P>
<p>樹形控件的消息映射使用ON_NOTIFY宏,形式如同:ON_NOTIFY( wNotifyCode, id, memberFxn ),wNotifyCode為通知代碼,id為產生該消息的窗口ID,memberFxn為處理函數,函數的原型如同void OnXXXTree(NMHDR* pNMHDR, LRESULT* pResult),其中pNMHDR為一數據結構,在具體使用時需要轉換成其他類型的結構。對于樹形控件可能取值和對應的數據結構為:
<ul>
<li>TVN_SELCHANGED 在所選中的結點發生改變后發送,所用結構:NMTREEVIEW</li>
<li>TVN_ITEMEXPANDED 在某結點被展開后發送,所用結構:NMTREEVIEW</li>
<li>TVN_BEGINLABELEDIT 在開始編輯結點字符時發送,所用結構:NMTVDISPINFO</li>
<li>TVN_ENDLABELEDIT 在結束編輯結點字符時發送,所用結構:NMTVDISPINFO</li>
<li>TVN_GETDISPINFO 在需要得到某結點信息時發送,(如得到結點的顯示字符)所用結構:NMTVDISPINFO</li>
</ul>
關于ON_NOTIFY有很多內容,將在以后的內容中進行詳細講解。</p>
<p><strong>關于動態提供結點所顯示的字符</strong>:首先你在添加結點時需要指明lpszItem參數為:LPSTR_TEXTCALLBACK。在控件顯示該結點時會通過發送TVN_GETDISPINFO來取得所需要的字符,在處理該消息時先將參數pNMHDR轉換為LPNMTVDISPINFO,然后填充其中item.pszText。但是我們通過什么來知道該結點所對應的信息呢,我的做法是在添加結點后設置其lParam參數,然后在提供信息時利用該參數來查找所對應的信息。下面的代碼說明了這種方法:
<pre>
char szOut[8][3]={"No.1","No.2","No.3"};

//添加結點
HTREEITEM hItem = m_tree.InsertItem(LPSTR_TEXTCALLBACK,...)
m_tree.SetItemData(hItem, 0 );
hItem = m_tree.InsertItem(LPSTR_TEXTCALLBACK,...)
m_tree.SetItemData(hItem, 1 );
//處理消息
void CParentWnd::OnGetDispInfoTree(NMHDR* pNMHDR, LRESULT* pResult)
{
	TV_DISPINFO* pTVDI = (TV_DISPINFO*)pNMHDR;
	pTVDI->item.pszText=szOut[pTVDI->item.lParam];//通過lParam得到需要顯示的字符在數組中的位置
	*pResult = 0;
}
</pre>
</p>
<p><strong>關于編輯結點的顯示字符</strong>:首先需要設置樹形控件的TVS_EDITLABELS風格,在開始編輯時該控件將會發送TVN_BEGINLABELEDIT,你可以通過在處理函數中返回TRUE來取消接下來的編輯,在編輯完成后會發送TVN_ENDLABELEDIT,在處理該消息時需要將參數pNMHDR轉換為LPNMTVDISPINFO,然后通過其中的item.pszText得到編輯后的字符,并重置顯示字符。如果編輯在中途中取消該變量為NULL。下面的代碼說明如何處理這些消息:
<pre>
//處理消息 TVN_BEGINLABELEDIT
void CParentWnd::OnBeginEditTree(NMHDR* pNMHDR, LRESULT* pResult)
{
	TV_DISPINFO* pTVDI = (TV_DISPINFO*)pNMHDR;
	if(pTVDI->item.lParam==0);//判斷是否取消該操作
		*pResult = 1;
	else
		*pResult = 0;
}
//處理消息 TVN_BEGINLABELEDIT
void CParentWnd::OnBeginEditTree(NMHDR* pNMHDR, LRESULT* pResult)
{
	TV_DISPINFO* pTVDI = (TV_DISPINFO*)pNMHDR;
	if(pTVDI->item.pszText==NULL);//判斷是否已經取消取消編輯
		m_tree.SetItemText(pTVDI->item.hItem,pTVDI->pszText);//重置顯示字符
	*pResult = 0;
}
</pre>
上面講述的方法所進行的消息映射必須在父窗口中進行(同樣WM_NOTIFY的所有消息都需要在父窗口中處理)。
</p>

</small>
</td>
</tr>
<tr><td>
<small>
<p align=center><a href=index.htm#charpter4>返回</a></p>
</small>
</td></tr>
</table>
<p align=center><small>版權所有 聞怡洋 <a href=http://www.vchelp.net/>http://www.vchelp.net/</a></small></p>

</td><!--end-->
</tr>
</table>

</td></tr></table><!--整體框架 END-->




<SCRIPT LANGUAGE='JavaScript'>write_tail();</SCRIPT>

</body></html>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品卡一卡二| 午夜久久久久久电影| 91美女精品福利| 美女性感视频久久| 中文字幕日韩欧美一区二区三区| 91麻豆精品国产自产在线| 欧洲精品视频在线观看| 美国av一区二区| 一区二区三区在线视频观看| 久久久久久久综合日本| 91精品国产综合久久蜜臀| 国产v日产∨综合v精品视频| 秋霞av亚洲一区二区三| 亚洲综合久久久| 国产精品成人免费| 精品三级av在线| 777xxx欧美| 欧美日韩精品欧美日韩精品 | 在线91免费看| av网站免费线看精品| 久久99精品国产.久久久久久 | 久久久国产精华| 欧美一区日韩一区| 欧美老肥妇做.爰bbww视频| 成人avav在线| 成人av手机在线观看| 久久电影网站中文字幕| 日韩高清一级片| 日韩在线播放一区二区| 亚洲自拍偷拍欧美| 亚洲一区精品在线| 一级日本不卡的影视| 亚洲久草在线视频| 一区二区三区**美女毛片| 国产精品免费aⅴ片在线观看| 国产亚洲欧洲997久久综合 | 国产一区二区久久| 久久av老司机精品网站导航| 偷拍与自拍一区| 首页综合国产亚洲丝袜| 日本美女一区二区| 久久精品国产一区二区| 狂野欧美性猛交blacked| 极品少妇一区二区三区精品视频| 韩国精品主播一区二区在线观看| 蜜臀a∨国产成人精品| 久久精品国产99| 国产精品123区| www.在线欧美| 精品国产免费人成在线观看| 717成人午夜免费福利电影| 欧美一区二区三区在线电影| 日韩欧美成人激情| 久久久久久麻豆| 国产精品美女久久久久久久久| 国产精品久久久久久久久免费樱桃| 国产精品网站在线观看| 亚洲日本电影在线| 亚洲成人久久影院| 激情久久五月天| 岛国精品一区二区| 91免费在线视频观看| 欧美三级韩国三级日本三斤| 欧美精品三级日韩久久| 26uuu色噜噜精品一区| 欧美韩国日本综合| 亚洲国产wwwccc36天堂| 蜜桃精品视频在线| 成人综合婷婷国产精品久久免费| 91在线视频免费91| 欧美一区二区三区男人的天堂| 精品粉嫩aⅴ一区二区三区四区 | 亚洲狼人国产精品| 视频在线在亚洲| 国产不卡在线视频| 欧美探花视频资源| 久久日韩精品一区二区五区| 中文字幕一区二区三区不卡在线| 性感美女极品91精品| 国产精品资源在线观看| 一本色道久久综合狠狠躁的推荐 | 欧美色综合天天久久综合精品| 欧美一区二区美女| 国产精品久99| 全部av―极品视觉盛宴亚洲| 国产精品12区| 欧美精品日韩一本| 国产农村妇女精品| 日本特黄久久久高潮| 成人免费毛片片v| 7777精品伊人久久久大香线蕉经典版下载| 久久精品欧美日韩精品| 日本强好片久久久久久aaa| 不卡一区中文字幕| 精品久久久网站| 亚洲网友自拍偷拍| av成人老司机| 久久亚洲免费视频| 亚欧色一区w666天堂| www.成人网.com| 久久久综合精品| 国产美女一区二区三区| 在线亚洲免费视频| 国产精品毛片无遮挡高清| 伦理电影国产精品| 欧美午夜电影网| 亚洲欧美日韩一区二区三区在线观看| 久久99日本精品| 欧美一区三区二区| 亚洲丶国产丶欧美一区二区三区| 国产成人精品影视| 精品少妇一区二区三区免费观看 | 亚洲国产成人91porn| 波波电影院一区二区三区| 久久嫩草精品久久久精品| 日日摸夜夜添夜夜添国产精品| 97国产精品videossex| 国产精品色婷婷| 国产福利91精品一区二区三区| 欧美一区午夜视频在线观看| 亚洲bt欧美bt精品| 欧美色涩在线第一页| 一区二区三区不卡在线观看| 不卡视频免费播放| 国产精品美女久久久久高潮| 国产超碰在线一区| 国产欧美在线观看一区| 国产不卡免费视频| 国产欧美日韩在线视频| 国产suv精品一区二区6| 国产欧美日韩三区| 国产成人午夜视频| 久久久久久久综合日本| 国产成人精品影院| 国产精品免费网站在线观看| 成人亚洲精品久久久久软件| 国产精品网曝门| 成人av电影在线观看| 国产精品福利一区二区| 91丨九色丨蝌蚪丨老版| 亚洲女人****多毛耸耸8| 一本到不卡免费一区二区| 亚洲一区二区三区中文字幕| 欧美午夜精品一区| 日韩黄色免费网站| 精品少妇一区二区三区在线播放 | 亚洲日本丝袜连裤袜办公室| 91视频91自| 亚洲成人资源在线| 日韩视频在线你懂得| 韩国女主播一区二区三区| 国产精品视频线看| 99精品视频中文字幕| 一区二区三区蜜桃| 91精品一区二区三区在线观看| 从欧美一区二区三区| 国产精品免费aⅴ片在线观看| 91丝袜美腿高跟国产极品老师| 一区二区高清视频在线观看| 欧美高清视频一二三区| 国产在线精品一区在线观看麻豆| 国产欧美精品区一区二区三区| 99久久99久久精品免费看蜜桃| 一区二区三区高清不卡| 欧美一级高清片在线观看| 国产馆精品极品| 一区二区三区久久久| 欧美一区二区美女| 国产91高潮流白浆在线麻豆 | 日韩欧美一区在线| 风间由美性色一区二区三区| 亚洲激情一二三区| 精品卡一卡二卡三卡四在线| 97se亚洲国产综合自在线观| 日韩av网站在线观看| 国产精品欧美一区二区三区| 欧美手机在线视频| 国产精品一区二区果冻传媒| 亚洲欧美色图小说| 337p粉嫩大胆噜噜噜噜噜91av| 97精品久久久久中文字幕| 九九在线精品视频| 亚洲一区二区在线免费看| 久久久综合网站| 欧美高清dvd| 91丨porny丨首页| 韩日av一区二区| 亚洲精品videosex极品| 久久老女人爱爱| 337p亚洲精品色噜噜| av电影在线不卡| 国产一区二区不卡老阿姨| 午夜视频在线观看一区| 中文字幕乱码一区二区免费| 欧美精品 日韩| 欧美在线免费播放| 欧美性色黄大片| 欧美一卡二卡三卡四卡| 91免费视频观看| 国产v日产∨综合v精品视频|