亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于GDI的動態(tài)數(shù)據(jù)分時走勢控件的設(shè)計與實現(xiàn)

        2020-10-23 02:31:34
        關(guān)鍵詞:橫坐標(biāo)控件列表

        祁 長 興

        (沈陽師范大學(xué) 軟件學(xué)院, 沈陽 110034)

        分時數(shù)據(jù),是股票期貨等金融領(lǐng)域以及生產(chǎn)生活中的面向過程控制等領(lǐng)域的實時數(shù)據(jù),通過對大量分時數(shù)據(jù)做動態(tài)統(tǒng)計分析,可以掌握其分時波動規(guī)律,從而對產(chǎn)品的性質(zhì)好壞做出判斷,對數(shù)據(jù)發(fā)展趨勢做出輔助預(yù)測。但是分時數(shù)據(jù)的數(shù)據(jù)量較大,產(chǎn)品種類繁多,通過畫圖可以直觀反映指定時間段內(nèi)數(shù)據(jù)的發(fā)展變化情況,更利于量化分析。

        GDI(Graphics Device Interface Plus)是Windows系統(tǒng)下負(fù)責(zé)系統(tǒng)與繪圖程序之間的信息交換的接口之一。本文采用了C#語言中的GDI以及GDI+技術(shù),設(shè)計并實現(xiàn)了一個可以靈活拖拽在桌面窗口上的控件,以網(wǎng)絡(luò)上開源的A股實時數(shù)據(jù)為實驗測試數(shù)據(jù),通過設(shè)置數(shù)據(jù)接口和顯示圖形屬性設(shè)定來完成對分時數(shù)據(jù)的即時顯示[1]。

        1 控件架構(gòu)設(shè)計模型

        根據(jù)控件的實現(xiàn)功能要求,控件在架構(gòu)上分為數(shù)據(jù)的采集,數(shù)據(jù)的管理和處理,數(shù)據(jù)的圖形加工處理3個模塊。外部分時數(shù)據(jù)通過數(shù)據(jù)采集模塊進(jìn)入控件數(shù)據(jù)按時間點分布,包括商品代碼,名稱,時間點信息和時間點數(shù)據(jù)等,在模塊內(nèi)拆分為K線數(shù)據(jù)(4種)和普通商品線性數(shù)據(jù)(1個)。拆分后的數(shù)據(jù)進(jìn)入數(shù)據(jù)管理模塊,數(shù)據(jù)管理模塊首先是管理所有的對象,包括商品對象、行情列表列對象以及畫面對象,并提供相關(guān)數(shù)據(jù)的所有操作接口供程序內(nèi)部管理數(shù)據(jù)使用,將相關(guān)分時數(shù)據(jù)保存在本地臨時數(shù)據(jù)表中。數(shù)據(jù)圖形加工模塊對已經(jīng)加工處理過的數(shù)據(jù)進(jìn)行圖形化顯示[2-6]。

        圖1 控件的架構(gòu)模型圖Fig.1 Structure model of control

        2 控件的類的設(shè)計

        控件在設(shè)計上分為2大功能模塊,圖形繪制和數(shù)據(jù)管理(將數(shù)據(jù)采集和數(shù)據(jù)的管理設(shè)計在一起)。圖形繪制的主要作用是按照控件初始化時給定的相關(guān)參數(shù)以及分時數(shù)據(jù)精確的繪制出圖形,并且負(fù)責(zé)響應(yīng)用戶鍵盤和鼠標(biāo)的輸入操作。數(shù)據(jù)管理的主要作用是提供不同的數(shù)據(jù)類型并管理這些數(shù)據(jù)[7]。

        2.1 數(shù)據(jù)管理類的設(shè)計[8-10]

        數(shù)據(jù)管理類的主要作用是用于采集信息、存儲信息和進(jìn)行必要的信息處理,為圖形繪制類提供必需的數(shù)據(jù)接口。

        1) 數(shù)據(jù)管理類DataManager:該類中包含了3組對象:商品對象、行情列表列對象以及畫面對象。該類提供的是這些類的添加、獲取和更新接口,用于控件的所有對象的管理操作[11]。

        2) 商品信息類Commodity:該類存儲了關(guān)于該商品的所有數(shù)據(jù),其中除了包括商品名稱、商品代碼、商品序號(記錄添加的順序,行情列表的默認(rèn)排序字段)和昨日收盤價以外,還包括商品的行情列表數(shù)據(jù),以及對應(yīng)的線數(shù)據(jù)[12]。

        3) 行情列表數(shù)據(jù)類ListSubItems:該類除了存儲具體的數(shù)據(jù)值之外,還存儲了繪制時的相關(guān)字段字體顏色和背景顏色。

        4) 線數(shù)據(jù)管理對象LineDataManager:該類主要提供的就是所有線數(shù)據(jù)對象的數(shù)據(jù)添加接口,由于線數(shù)據(jù)根據(jù)不同的線類型對應(yīng)的是不同的類,因此在添加數(shù)據(jù)時負(fù)責(zé)判斷所屬的線類型并添加對應(yīng)的線數(shù)據(jù)對象。

        5) 線數(shù)據(jù)抽象類LineData:該類是線數(shù)據(jù)的抽象類,所有類型的線數(shù)據(jù)均繼承自該類。該類除了存儲線數(shù)據(jù)基本單位對象以外,還提供了獲取該線的最大值和最小值。其作用是在圖形繪制時判斷繪制區(qū)間的數(shù)據(jù)最大最小值范圍。

        6) 線數(shù)據(jù)基本單位類LineDataUnit:該類是線數(shù)據(jù)的基本單位抽象類,所有類型的線數(shù)據(jù)基本單位均繼承自該類。其存儲了2個基礎(chǔ)數(shù)據(jù)即顯示數(shù)據(jù)值以及日期時間。

        7) 時間段類TimePeriod:該類提供了一個簡單的接口來實現(xiàn)添加一個時間段的所有時間標(biāo)簽。

        8) 控件對象StockChart:該類的作用是打包管理所有的管理對象和繪制對象,并對開發(fā)者提供統(tǒng)一的使用接口。

        2.2 圖形繪制加工模塊[5,7-8,11]

        圖形繪制結(jié)構(gòu)的概念一共有2個:畫面和區(qū)域。畫面是構(gòu)成基礎(chǔ)界面的單位元素,從界面上看到的一個完整圖像則是一個畫面,區(qū)域是指每個畫面中繪制不同類型的數(shù)據(jù)而劃分的不同區(qū)間,其位置構(gòu)成為從上到下,每個畫面包含若干個區(qū)域。

        1) 畫面類ChartImage:指定了邊框的寬度以及添加區(qū)域的方法和繪制畫面時確定該畫面中是否包含有柱線。

        2) 區(qū)域類AreaClass:提供屬性和方法,實例化一個具體的區(qū)域設(shè)置。

        3) 線信息類LineInfoClass:定義一組相關(guān)的數(shù)據(jù)集合為一條線,如K線數(shù)據(jù),該對象保存的是每一條線的相關(guān)參數(shù),供數(shù)據(jù)管理對象實例化具體的線數(shù)據(jù)類,并提供對應(yīng)的數(shù)據(jù)添加和更新方法。

        4) 行情列表列對象類ListColumn:行情列表中每一列都有一個對應(yīng)的對象來存儲其相關(guān)的繪制屬性,其中包括列名稱、最小列寬度、列名稱對齊方式、數(shù)據(jù)對齊方式、數(shù)據(jù)比較類型、是否可見、數(shù)據(jù)項字體顏色、是否在數(shù)據(jù)更新時改變背景色以及數(shù)據(jù)是否根據(jù)比較值顯示漲跌符號等。

        5) 行情列表繪制對象類ListClass:該類包含了所有行情列表的繪制方法及相關(guān)事件,是實際調(diào)用GDI接口及Graphics繪制對象繪制行情列表的類。

        6) 分時走勢圖繪制對象類ChartClass:該類包含了所有走勢圖的繪制方法及相關(guān)事件,是實際調(diào)用GDI接口及Graphics繪制對象繪制走勢圖的類。

        3 圖形繪制算法與實現(xiàn)

        根據(jù)采集并處理過的數(shù)據(jù)信息分類,相應(yīng)的圖形的繪制包括行情列表的繪制和分時走勢圖的繪制[8-10]。

        3.1 行情列表的繪制

        1) 基本功能

        實現(xiàn)的功能主要是以列表的形式顯示每一個股票的基礎(chǔ)數(shù)據(jù),控件提供了統(tǒng)一的配置接口,通過addColumn方法即可在行情列表添加一個列,同時也提供了ShowColumn和HideColumn方法以便在運行時動態(tài)的隱藏或顯示某一列。圖2為A股的行情列表圖實例[12-15]。

        圖2 行情列表圖Fig.2 Market list chart

        2) 繪制算法

        在行情列表中圖形的繪制包括:全局重新繪制、繪制行選擇線、繪制列調(diào)整線、列寬度調(diào)整、清空鼠標(biāo)操作繪制層以及更新數(shù)據(jù)時背景變化[4]。

        3) 繪制過程

        該繪制過程主要分為2步:初始化畫布及繪制數(shù)據(jù)。

        初始化畫布時,整個行情列表主要分為3個圖層:數(shù)據(jù)層、鼠標(biāo)操作標(biāo)識層以及操作標(biāo)志層。根據(jù)PictureBox容器大小初始化對應(yīng)的Graphics對象及Bitmap對象。隨后計算滾動條寬度,并根據(jù)畫面高度和起始數(shù)據(jù)編號計算繪制的數(shù)據(jù)范圍。

        繪制數(shù)據(jù)時首先繪制行情列表列對象,從dataManager對象取到所有的列,逐個繪制。如果該列被設(shè)置為隱藏則不繪制跳過。其次判斷如果該列在排序狀態(tài),則在列名稱前繪制出排序方式,用箭頭表示,整個一列都繪制藍(lán)色的背景色。其中繪制行選擇線的計算公式為

        鼠標(biāo)選擇行index=鼠標(biāo)點擊Y坐標(biāo)/單位行高度-1+rowStartIndex

        (1)

        3.2 分時走勢圖的繪制

        3.2.1 基本功能

        分時走勢圖功能的實現(xiàn)主要是依賴控件聲明時對布局的定義。 在本設(shè)計的演示實例中, 分為2個畫面, 一個是分時走勢, 另一個是K線技術(shù)指標(biāo)。 分時走勢畫面包含2個區(qū)域, 一個是實時走勢, 另一個是對應(yīng)時刻的成交量。K線技術(shù)指標(biāo)也包含2個區(qū)域, 一個是K線數(shù)據(jù), 另一個是對應(yīng)的成交量。

        3.2.2 繪制算法[16]

        1) 坐標(biāo)軸的繪制:對于縱坐標(biāo)軸,系統(tǒng)定義了最小繪制行間隔。在繪制時首先根據(jù)控件尺寸高度計算出需要繪制的行數(shù),橫坐標(biāo)軸單位是固定的,隨著控件尺寸的變化決定的就是2個數(shù)據(jù)點的橫向間隔。

        2) 數(shù)據(jù)值的繪制:數(shù)據(jù)值繪制的重點是需要計算出該數(shù)據(jù)值在區(qū)域繪制的坐標(biāo)中對應(yīng)的坐標(biāo)(X,Y)。其中橫坐標(biāo)的確定是由區(qū)間繪制的數(shù)據(jù)個數(shù)和繪制形態(tài)決定的,縱坐標(biāo)是由區(qū)域最高值和最低值的相對比例決定的。

        假設(shè)一個區(qū)域的寬度為Width,共n個數(shù)據(jù),假設(shè)繪制的是第x個數(shù)據(jù)(1≤x≤n)的K線,橫坐標(biāo)區(qū)間為

        [x×width/(n-1),x×width/n]

        (2)

        對于折線,其繪制橫坐標(biāo)為一個點,橫坐標(biāo)點為

        (x×width/(n-1))

        (3)

        縱坐標(biāo)的計算方式,假設(shè)繪制區(qū)域高度為Height,區(qū)域最大值為Max,最小值為Min,要繪制的數(shù)據(jù)Value的縱坐標(biāo)Y計算公式

        (4)

        3) 柱形線的繪制

        圖3 K線圖的結(jié)構(gòu)Fig.3 Structure of K-line diagram

        以K線為例,一個數(shù)據(jù)單元包含4個數(shù)據(jù):開盤價、收盤價、最高價和最低價。一個K線的結(jié)構(gòu)如圖3。

        假設(shè)收盤價高于開盤價,則3部分的縱坐標(biāo)分別是:上影線:(最高價,收盤價),實體矩形:(收盤價,開盤價),下影線:(開盤價,最低價)。如果收盤價低于開盤價,則3部分的縱坐標(biāo)分別是:上影線:(最高價,開盤價),實體矩形:(開盤價,收盤價),下影線:(收盤價,最低價)。

        橫坐標(biāo)由定義的寬度決定,假設(shè)繪制區(qū)間寬度是spacing,定義的矩形寬度占中間的70%,兩邊各15%的間隔。因此橫坐標(biāo)計算如下:上影線和下影線:spacing÷2,實體矩形:spacing×0.15。據(jù)此加上該數(shù)據(jù)由公式(3)得出的全局橫坐標(biāo)即可。如圖4,是商品“白云機場”的全局K線圖[6-8]。

        圖4 全局K線圖Fig.4 Global K-line diagram

        4 結(jié) 語

        本文主要論述了一個分時走勢繪制控件的設(shè)計模型以及實現(xiàn)的算法和實現(xiàn)過程,實現(xiàn)的功能點主要參考了國內(nèi)外主流的各大A股交易公司推出的行情軟件。最終得到了一個能夠在.NET平臺上各種項目中快速嵌入的一個控件。該控件的接口設(shè)計合理,圖形繪制準(zhǔn)確,基本能滿足用戶讀取數(shù)據(jù)和指標(biāo)分析的要求。該代碼生成的最終動態(tài)鏈接庫只有80 KB左右,十分適合開發(fā)者進(jìn)行二次開發(fā)。實現(xiàn)過程中,代碼架構(gòu)重構(gòu)了多次,目的是為了盡可能的提高該控件的性能和美觀度。由于GDI+本身的性能缺陷,在頻繁的重繪操作下仍然可能出現(xiàn)CPU占用高的情況。亮點和創(chuàng)新點是對控件的適應(yīng)能力,不論呈現(xiàn)設(shè)備尺寸大小如何,都能以準(zhǔn)確美觀的界面呈現(xiàn)用戶想要的數(shù)據(jù)。另外接口定義十分靈活,不論用戶的數(shù)據(jù)取自何處,都不會受控件接口的限制無法顯示。不論是何種指標(biāo)數(shù)據(jù),都可以用統(tǒng)一的接口調(diào)用傳入并繪制呈現(xiàn)。

        猜你喜歡
        橫坐標(biāo)控件列表
        巧用列表來推理
        不可輕用的位似形坐標(biāo)規(guī)律
        學(xué)習(xí)運用列表法
        例談二次函數(shù)的頂點橫坐標(biāo)x=-b/2a的簡單應(yīng)用
        “平面直角坐標(biāo)系”解題秘籍
        擴列吧
        關(guān)于.net控件數(shù)組的探討
        軟件(2018年7期)2018-08-13 09:44:42
        不含3-圈的1-平面圖的列表邊染色與列表全染色
        用坐標(biāo)關(guān)系判斷圖象變換
        就這樣玩會VBA中常見的自定義控件
        電腦迷(2012年24期)2012-04-29 00:44:03
        韩国三级中文字幕hd | 国产精品农村妇女一区二区三区| 在线观看一区二区中文字幕| 男人和女人做爽爽视频| 在线观看人成视频免费| 久久人妻内射无码一区三区| 亚洲色大成网站www在线观看| 国产一区二区三区免费小视频| 中文字幕乱码在线人妻| 玩50岁四川熟女大白屁股直播| 99re这里只有热视频| 台湾自拍偷区亚洲综合| 亚洲中文字幕精品乱码2021| 初女破初的视频| av色综合网站| 国产不卡av一区二区三区| 未发育成型小奶头毛片av| 无码三级在线看中文字幕完整版| 在线成人tv天堂中文字幕| 成人水蜜桃视频在线观看| 中国精品18videosex性中国| 综合久久给合久久狠狠狠97色| 国产精品亚洲综合色区丝瓜| 精品色老头老太国产精品| 香蕉成人伊视频在线观看| 亚洲av成人一区二区三区| 国产视频网站一区二区三区| 国产精品美女主播一区二区| 麻豆蜜桃av蜜臀av色欲av| 丰满少妇被猛烈进入无码| 扒开双腿操女人逼的免费视频| 久久国内精品自在自线| 亚洲精品~无码抽插| 欧美高大丰满freesex| 国产真实二区一区在线亚洲| 人成综合视频在线播放| 亚洲处破女av日韩精品| 成人无码网www在线观看| 日本a爱视频二区三区| 狠狠综合久久av一区二区| 一本到无码AV专区无码|