文章編號: 66370 - 上次校閱: 2005年7月11日 - 版次: 4.4 ListHorz/ListHscr EXE 控制項水平捲軸] 清單方塊
在此頁中結論ListHorz.exe 和 ListHscr.exe 示範如何完全控制水平捲軸] 清單方塊。這項資訊也中都提供 Tips.hlp,包括與 Microsoft Visual C/C + +。ListHorz.exe 和 ListHscr.exe 包含一組,維護所有的字串,在清單方塊中的範圍,並變更所需之可捲動的清單方塊範圍內水平捲軸列支援函式。這些範例的其他詳細資料會在本文 < 範例程式碼 > 一節中找到。 其他相關資訊從 「 Microsoft 下載中心 」 下載下列檔案有: ListHorz.exe
(http://download.microsoft.com/download/platformsdk/sample/1.1/w31/en-us/listhorz.exe)
ListHscr.exe
(http://download.microsoft.com/download/win31/samp34/1/w31/en-us/listhscr.exe)
如需有關如何下載 Microsoft 支援檔案的詳細資訊,按一下 [下列面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]: 119591?
(http://support.microsoft.com/kb/119591/EN-US/
)
如何從線上服務取得 Microsoft 支援檔案 Microsoft 已掃描這個檔案有無病毒。Microsoft 使用已張貼檔案的日期中的 [可用的最新病毒偵測軟體。檔案儲存在安全性強化的伺服器上,以避免任何未經授權的更改至檔案。 ListHorz.exe 包含完整的範例應用程式展示與水平捲軸的清單方塊。必要的支援函式被包含在 C 的模組中,可以編譯及連結到任何 Windows 架構應用程式。 ListHscr.exe 包含必要的清單方塊支援函式的 DLL 包含完整的來源。這些函式完全是那些在 ListHorz.exe 相同。包含在此保存檔是使用 DLL 的服務 ListHorz.exe 中執行相同的函式與應用程式的應用程式。 以下是資訊的大綱的本文中: 答: Windows 支援的水平捲軸] 清單方塊
G.範例程式碼
視窗支援的清單方塊中的水平捲軸Microsoft Windows 版本 3.0 是可辨識 WS_HSCROLL 視窗樣式的清單方塊的第一個版本。這個樣式會加入至清單方塊的水平捲軸。不過,捲軸沒有自動出現太長,無法顯示在清單方塊中的字串加入至該清單方塊時。同樣地,移除最後一個字串長度超過清單方塊時 Windows 將不會隱藏捲軸。這項行為是不同於清單方塊新增並移除所需的垂直捲軸。應用程式必須維持寬度,像個像素清單方塊中的每個字串。LB_SETHORIZONTALEXTENT 清單方塊訊息控制捲動的範圍和水平捲軸的可視性。本文章中詞彙範圍 」 被定義為螢幕像素中之物件的寬度。清單方塊本身一樣,每個字串會有一個範圍。 這份文件的其他各節提供更多有關的詳細資訊必須發生在處理的清單方塊中的水平捲軸列時的特殊考量。 新的清單方塊訊息: LB_SETHORIZONTALEXTENT 和 LB_GETHORIZONTALEXTENT兩個訊息已新增至 Windows 3.0 來支援清單方塊中的水平捲軸列:
Message Description
-------------------------------------------------------------------
LB_SETHORIZONTALEXTENT Sets the width in pixels by which a list
box can be scrolled to the value of wParam
in the message.
LB_GETHORIZONTALEXTENT Retrieves the width in pixels by which a
list box can be scrolled.
但是,LB_SETHORIZONTALEXTENT 訊息並不會影響水平捲軸的可視性。如果可以看到捲軸,與小的範圍指定傳送此訊息並不會移除它。同樣地,如果捲軸不存在,傳送此郵件以大範圍不會建立一個。 本文的下面兩個的章節將說明如何加入和移除水平捲軸加入和刪除字串時。主要的重點是,Windows 會只顯示或隱藏捲軸時新增、 插入,或刪除一個字串。 讓捲軸可見時新增或插入字串清單方塊的寬度大於一個範圍的字串時要加入,應用程式必須傳送傳送一個 LB_ADDSTRING 之前 LB_SETHORIZONTALEXTENT 訊息或 LB_INSERTSTRING 郵件。在新增或插入字串的程序,Windows 會比較水平捲軸範圍儲存在清單方塊中的用戶端區域的寬度清單方塊中。如果用戶端區域範圍小於捲軸範圍,捲軸會進行看得見下一次清單時繪製方塊。 如果可以看到,用戶端區域寬度] 清單方塊的並不會包含 [垂直捲軸] 列的寬度。請考慮不在垂直捲軸填滿與字串的清單方塊。每個這些字串是清單方塊比稍窄。當加入另一個字串,並垂直捲軸造成出現 Windows 發現的水平捲軸範圍現在是大於 [清單] 方塊的寬度,而且新增水平捲軸。 如果捲動列範圍小於工作區的清單方塊寬,捲軸的狀態會保持不變。 如果加入字串後,不會繪製清單方塊,將不會出現捲軸。因此,如果 WM_SETREDRAW 訊息用來關閉重繪,將字串新增才會顯示水平捲軸直到清單方塊會重繪。 刪除字串時,隱藏捲軸Windows 只能 LB_DELETESTRING 訊息的處理期間移除水平捲軸。因此,如果要刪除字串清單方塊中的最長,水平捲軸範圍必須先變更為下一個較小範圍值該字串會被刪除。Windows 字串會被刪除後比較目的工作區清單] 方塊的寬度之預存的捲軸列範圍內,並且如果範圍較小,會移除捲軸。如果刪除字串後,不會繪製清單方塊,捲軸就不會消失。因此,如果 WM_SETREDRAW 訊息用來關閉重繪,刪除字串並不會移除水平捲軸直到清單方塊會重繪。 不過,如果清單方塊向右捲動一點為一個像素,捲軸將會保持可見不管設定的範圍。這是完成,這樣使用者永遠可以捲動回以極端的左邊。如果移除捲軸清單方塊可能會遺留在捲動的其中一種狀態右邊依沒有任何方式來捲動一些量完全回左邊。 如果要解決這個問題,永遠刪除最長的字串之前先捲動極端左邊清單方塊。如果刪除較短的字串代表該範圍將會維持相同,而且水平捲軸不會受到影響還是。如果刪除最長的字串,只捲動清單方塊。 清單方塊可以在捲動,不論是完全向左 (大小寫,其中的長字串仍存在於清單方塊) 或只是夠,以便下一個最長字串顯示,假設清單方塊需要捲軸。(上述) 永遠軟體程式庫中的程式碼範例將捲動清單方塊完全是左使用 WM_HSCROLL] 訊息,如下所示:
計算字串的水平範圍前面討論提及字串,範圍,但提供沒有決定這些值的方法。GetTextExtent 函式,來計算字串的像素範圍。這是計算用目前選取的 hDC 所代表的顯示內容的字型的字串中每個字元的像素寬度的總和的 GDI 呼叫。 如果 lpString 持有代表性的字串,且 hWndListBox 視窗控制代碼至清單方塊,來決定每個字串的大小需要下列步驟:
TEXTMETRIC 結構中的 [tmAveCharWidth] 欄位提供了一致的數個像素將新增至無論何種字型目前正在使用中的字串的長度。這個緩衝區空間可防止字串被裁剪。 為快速筆記 tmAveCharWidth 值會是捲動的像素數清單方塊是水平按一下捲軸箭號時數。如果使用固定字幅的字型清單方塊是一個字元,如每按一下水平捲動。 清單方塊中的所有範圍的維護許多可能的方法來維護一份清單的字串在清單方塊中的範圍。其中一個最方便的方法是使用屬性清單,如範例程式碼所示。每個視窗具有與其相關聯的屬性清單。每個屬性是字串和相關聯的資料控制代碼。視窗儲存和擷取每個資料控點,使用標籤控制代碼的字串。 為清單方塊中的字串範圍的排序的清單可以儲存在本機或全域記憶體物件。這可讓每個視窗來保留它自己的清單,且不需要應用程式維護從清單方塊到資料控制代碼本身的對應。應以遞減順序,排序的範圍清單,使第一個範圍清單中的清單方塊中最長的字串。保留排序此清單也可以讓應用程式使用二進位搜尋來尋找範圍清單中,當其中一個正被插入或刪除。 當加入新的字串,該字串範圍插入維護已排序的順序清單。如果新的範圍放在清單的頂端,傳送 LB_SETHORIZONTALEXTENT 訊息給清單方塊中指定新的範圍。不要傳送訊息的不是最大的範圍。 刪除字串時請從清單中移除該字串的範圍。如果之範圍內是在清單中第一個,那麼該字串是最長清單方塊中。在這種情況下將一個 LB_SETHORIZONTALEXTENT 傳送給指定清單中的下一個最大範圍的清單方塊。如果刪除較小的字串並不會傳送訊息。 使用一個 LB_RESETCONTENT 訊息時,請清除整個清單的範圍。 傳送標題 LB_SETHORIZONTALEXTENT 訊息,指出後面跟著一個 LB_DELETESTRING 0 (零) 範圍上述區段的最後一個部分中所述為 「 隱藏捲軸時刪除 String 時 」。 範例程式碼如上所述,有 Microsoft 軟體程式庫中的兩個保存檔: LISTHORZ 和 LISTHSCR。每一個這些範例提供五個支援功能,可大幅便於維護的清單方塊中的水平捲軸列。在 LISTHORZ,這些函式會在檔案 LISTHELP.C 中找到。這個檔案可以分別編譯,並且連結至應用程式。 LISTHSCR 會包含原始程式檔,為提供這些五個支援函式的 DLL。為 DLL C 檔案方式完全相同 LISTHORZ,請按照不同之處在於其名稱已變更。此保存也包括 LISTHORZ 程式若使用 DLL 的服務來執行相同的函式為程式中其他保存檔。檔案 LISTHAPI.H 是包含檔包含由 DLL 匯出函式原型。 也包含是匯入程式庫,LISTHSCR.LIB 所產生的 Makefile。 DLL 是最有用的因為它可以支援任何數量的任何數量的應用程式中的清單方塊中的水平捲軸列。 本文的其餘部分文件支援函式: 參數: hList HWND 控制碼將使用水平捲軸的清單方塊。 傳回值: BOOL 為 TRUE,如果有沒有錯誤 FALSE 如果無法配置記憶體。 BOOL FFreeListboxExtents(HWND hList) 釋放配置給 hList 所識別的清單方塊的 [範圍] 清單的記憶體。移除儲存記憶體控點由 FInitListboxExtents 所設定的屬性。當終結清單方塊時,應該呼叫這個函式。 參數: hList HWND 控制碼至先前使用所以 FInitListboxExtents 傳回值的清單方塊: BOOL TRUE 如果有沒有錯誤 FALSE 如果可能不會釋放記憶體,在這種情況下不會移除屬性。 參數: hList HWND 控制碼將會重設的清單方塊。 傳回值: 無 將字串加入至清單方塊與 LB_ADDSTRING 或 LB_INSERTSTRING 前,必須呼叫這個函式。 參數: hList HWND 控制碼至字串是要加入清單方塊。 psz LPSTR 指標至字串,是要加入。字串,以便適當地維護水平捲軸加入之前,必須呼叫這個函式。 傳回值: 單字這些三個值之一: 0,如果加入字串不是清單方塊中最長的字串,且並未變更水平捲軸的可視性。 如果加入的字串是最長且可能有變更捲軸的可視性加入字串的範圍。 錯誤-1。 前一個 LB_DELETESTRING 訊息傳送給清單方塊,必須呼叫這個函式。 參數: hList HWND 控制碼至清單方塊,從中字串是被移除。 iSel 要移除的 WORD 索引的字串。 傳回值: 單字這些三個值之一: 0,如果字串中移除無法在長清單方塊中,水平捲軸的可視性未變更的範圍,如果已刪除的字串是最長且可能有變更捲軸的可視性刪除字串。 錯誤-1。
機器翻譯重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。 按一下這裡查看此文章的英文版本:66370?
(http://support.microsoft.com/kb/66370/en-us/
)
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。 | 其他資源 其他支援網站社群文章翻譯 |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


回此頁最上方