自繪下拉列表框

2021-06-19 12:13:28 字數 812 閱讀 7058

**

原始檔 

下拉列表框,又稱組合列表框,他是乙個較為複雜的控制項。它有三種狀態,******、drop down、drop list。由三個控制項組成,編輯框、下拉按鈕、listbox。所以,要實現下拉列表框的綜合自繪,其工作量是蠻大的。而且,在一些特殊場合,要求下拉列表框具有一些特殊要求,所以想在乙個例子中完全實現下拉列表框的所有功能也不太現實。基於上述願因,本例中只是簡單地實現了drop list狀態下的,顯示部分的控制項的重繪,其中包括唯讀的編輯框和下拉按鈕,例子中並未重繪listbox。

明確了目標,我們就可以開始工作了。首先還是觀察,下拉列表框和編輯框一樣都有乙個3d的外觀。不一樣的時,在「自繪編輯框」一文中我提到過,編輯框的3d外觀是非客戶區。而通過實驗我發現,在下拉列表框中3d外觀屬於客戶區,這樣一來我們必須過載onpaint函式來進行重繪。說到這大家應該明白了,在這個例子中,我只是重繪了下拉列表框的客戶區,這其中包括按鈕和編輯框。

重繪客戶區去掉3d外觀,我們需要繪製邊框,繪製背景,繪製顯示文字,繪製按鈕。前三項都好說,有一點繪圖經驗的人都不會對如何繪製這些東西有疑問。但是,對於下拉按鈕的繪製就存在一些問題,按鈕的區域多大?按鈕的狀態如何確定?下拉按鈕是乙個cbutton麼?

為了解決按鈕繪製的問題,我用了comboboxinfo結構,同過getcomboboxinfo函式獲取到了下拉列表框的相關資訊,這個結構中包含了statebutton(按鈕狀態)和rcbutton(按鈕區域)。這樣就可以很好的解決按鈕的繪製問題。具體實現請參考原始碼。

正如文章開始所說,下拉列表框得重繪是較為複雜的,本文只是簡單地實現了客戶區的自繪。希望這篇文章能起到拋磚引玉的作用,期待和大家共同討論,共同提高。

下拉列表框指令碼

目錄 一 概述 二 select標籤 三 option標籤 四 新增移除選項 下拉列表框是通過select和option標籤建立的,為了方便與這個控制項互動,除了所有表單字段共有的屬性和方法外,js還提供了一些屬性和方法。select標籤用來定義下拉列表,包含任意數量的option和optgroup...

下拉列表框和組合框

組合框被操作時會向父視窗傳送通知訊息,這些通知訊息及其含義如下 cbn closeup 組合框的列表框元件被關閉,簡易組合框不會傳送該通知訊息 cbn dblclk 使用者在某列表項上雙擊滑鼠,只有簡易組合框才會傳送該通知訊息 cbn dropdown 組合框的列表框元件下拉,簡易式組合框不會傳送該...

可以多選的下拉列表框

可以多選的下拉列表框 自己做開發的過程中,經常有時候遇到一次要選擇多個值的情況。而用dropdownlist一次只能選擇乙個,沒辦法自己最近抽空寫了乙個 方便自己一戶用,不過很簡單 拿出來跟大家交流一下。介面如下 簡單介紹一下 這是乙個使用者控制項 其中包含了 乙個文字框 用來顯示選中text值,乙...