999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

GDI+實現自定義集裝箱貝位圖的方法研究

2012-04-12 00:00:00劉磊
現代電子技術 2012年22期

摘 要:為了解決集裝箱船舶貝位圖由以往人工繪制帶來的各種問題,達到由終端用戶在作業現場應用計算機自動繪制的目的,采用DOTNET Framework封裝的GDI+接口及其相關方法,通過在VISUAL Basic.NET 編程環境中實現終端用戶繪制一個基礎網格,根據每次鼠標點擊的網格位置、點的顏色以及二次點擊的水平和垂直距離,判斷如何繪制貝位矩陣,應用GDI+實現貝位繪制,獲得了以鼠標拖動或點擊的方式繪制集裝箱貝位圖的模式,得到了一種通用的使用GDI+技術動態創建集裝箱貝位圖的方法。

關鍵詞:貝位; GDI+; 自定義圖形; 集裝箱

中圖分類號:TN91934 文獻標識碼:A 文章編號:1004373X(2012)22002102

DOTNET Framework 為操作圖形提供了 GDI+ 應用程序編程接口,GDI+ 是 Windows 圖形設備接口的高級實現,通過使用 GDI+,可以創建圖形、繪制文本以及將圖形圖像作為對象操作,軟件開發人員可以使用 GDI+ 在 Windows 窗體和控件上方便地呈現圖形圖像,近年來集裝箱發展突飛猛進,隨著大型集裝箱船舶、集裝箱碼頭及集裝箱場站的建設,傳統人工繪制集裝箱貝位圖的方法已不能滿足現場作業人員的需要,信息系統應用也在向圖形化發展,由軟件開發人員來繪制圖形已經不能滿足終端用戶的需求,很多場景需要終端用戶自己繪制圖形,本文描述了在Visual Basic.NET編程環境中如何開發用戶自定義集裝箱貝位圖的編程方法,使用戶可以方便地以鼠標點擊的方式繪制集裝箱貝位圖。

1 設計思路

(1) 創建一個PictureBox,重寫它的Paint事件\[1\],以其零坐標為基點,繪制一個10行20列的網格(單格長寬均為20),并在左端標注貝層,上端標注貝列編號;

(2) 重寫PictureBox的MouseDown事件,判斷是否為左鍵點擊,右鍵點擊無效,二次左鍵點擊為一組,定義一個mark變量,用以鑒別哪兩次點擊為一組\[2\];

(3) 鼠標點擊事件中根據點擊的位置計算選擇的網格,在第一次有效點擊時根據坐標計算網格、取網格的顏色并記錄在內存中\[3\],用紅色畫筆填充該網格;

(4) 在第二次有效點擊時同樣計算所選擇的網格,并判斷網格的顏色,比較二次所選網格的橫縱坐標,用不同的顏色填充二次選擇網格形成的矩陣\[4\];

(5) 當二次所選網格的顏色都不等于藍色時,用藍色填充網格矩陣,示意定義貝位;

(6) 當二次所選網格的顏色都等于藍色時,用系統色填充網格矩陣,示意取消已定義的貝位\[5\];

(7) 當第一個所選網格為藍色、第二個所選網格為紅色時(二次點擊選擇了同一個網格),用系統色填充該網格\[6\],示意取消該貝位的定義;

(8) 當第一個所選網格為藍色、第二個所選網格不是藍色也不是紅色時(第一次選擇了已定義的貝位,第二次選擇了未定義的貝位),用藍色填充該第一個網格,示意取消本次定義貝位的操作\[7\];

(9) 當第一個所選網格不是藍色、第二個所選網格是藍色時(第一次選擇了未定義的貝位,第二次選擇了已定義的貝位),用系統色填充該第一個網格\[8\],示意取消本次定義貝位的操作;

(10) 當第二個所選網格的橫/縱坐標小于第一個所選網格的橫/縱坐標時(默認從左上向右下繪圖,否則為無效定義),如果第一個所選網格為藍色則用藍色填充,否則用系統色填充,示意取消本次定義貝位操作\[9\]。

2 實現方法

(1) 定義相關變量,用以執行畫筆操作或存儲相關屬性\[10\],重寫PictureBox的Paint事件,繪制網格并標注貝行和貝列編號,主要代碼如下:

′繪制單格長寬均為20的10行20列的網格

g_line.DrawRectangle(pen_line,20 + 20 * i,20 + 20 * j,20,20)

′繪制貝列編號

g_line.DrawString(i,Me.Font,Brushes.Black,20 * i + 6,6)

′個位數的列編號

g_line.DrawString(i,Me.Font,Brushes.Black,20 * i + 2,6)

′十位數的列編號

g_line.DrawString(80 + j * 2,Me.Font,Brushes.Black,2,20 * 10 + 5 20 * j)

′繪制貝層號

(2)重寫PictureBox的MouseDown事件,執行定義貝位操作,主要代碼如下:

p.X = e.X,p.Y = e.Y

′取當前點的橫縱坐標

rectx = p.X / 20,recty = p.Y / 20

′取當前選擇網格左上角的橫縱坐標

rectx = Fix(rectx) * 20,recty = Fix(recty) * 20

color1 = rbmp.GetPixel(e.X,e.Y)

′取第一個所選網格的顏色

rect1_x = point1.X / 20,rect1_y = point1.Y / 20

′取第一次選擇網格左上角的橫縱坐標

rect1_x = Fix(rect1_x) * 20,rect1_y = Fix(rect1_y) * 20

′用紅色填充第一次選擇的網格

rbmpgraphics.FillRectangle(bru_first,rect1_x + 1,rect1_y + 1,19,19) ptbox_board.Refresh()

point2.X = e.X,point2.Y = e.Y

′取第二次點擊的橫縱坐標

color2 = rbmp.GetPixel(e.X,e.Y)

′取第二個所選網格的顏色

rect2_x = point2.X / 20

′取第二次選擇網格左上角的橫縱坐標

rect2_x = Fix(rect2_x) * 20,rect2_y = point2.Y / 20,rect2_y = Fix(rect2_y) * 20

m = (rect2_x rect1_x) / 20

′二次所選網格之間的橫網格的數量

n = (rect2_y rect1_y) / 20

′二次所選網格之間的縱網格的數量

′當二次所選網格的顏色都不等于藍色時用藍色填充網格矩陣

rbmpgraphics.FillRectangle(bru_fill,rect1_x + 20 * j + 1,rect1_y + 20 * k + 1,19,19)

′當二次所選網格的顏色都等于藍色時,用系統色填充網格矩陣

rbmpgraphics.FillRectangle(bru_sys,rect1_x + 20 * j + 1,rect1_y + 20 * k + 1,19,19)

′當第一個所選網格為藍色、第二個所選網格為紅色時,用系統色填充該網格

rbmpgraphics.FillRectangle(bru_sys,rect1_x + 1,

rect1_y + 1,19,19)

′當第一個所選網格為藍色、第二個所選網格不是藍色也不是紅色時,用藍色填充該第一個網格

rbmpgraphics.FillRectangle(bru_fill,rect1_x + 1,

rect1_y + 1,19,19)

′當第一個所選網格不是藍色、第二個所選網格是藍色時,用系統色填充該第一個網格

rbmpgraphics.FillRectangle(bru_sys,rect1_x + 1,

rect1_y + 1,19,19)

′當第二個所選網格的橫/縱坐標小于第一個所選網格的橫/縱坐標時,恢復第一個網格的顏色

rbmpgraphics.FillRectangle(bru_fill,rect1_x + 1,

rect1_y + 1,19,19)

rbmpgraphics.FillRectangle(bru_sys,rect1_x + 1,

rect1_y + 1,19,19)

3 結 語

形象、直觀的圖形化信息管理系統給現場應用人員帶來了極大的方便,不僅提高了工作效率,而且可以解決以往依賴人工不能解決的問題,通過演示程序,實現了在VISUAL Basic.NET編程環境中如何應用GDI+使用戶可以自定義集裝箱貝位圖的方法。作者已把本文的實現方法應用到連云港中理外輪理貨信息管理系統中,用戶使用起來形象、直觀、方便,得到了用戶的一致好評。通過本文示例,希望能增進大家對文中涉及到的相關技術的了解,為以后編程實現中遇到類似的需求提供實踐基礎。

參 考 文 獻

[1] 王小科.C#開發實戰寶典[M].北京:清華大學出版社,2010.

[2] NAGEL C, EVJEN b, GLYNN Jay, et al.C#高級編程[M].北京:清華大學出版社,2008.

[3] 埃斯波西托.Microsoft.NET企業級應用架構設計[M].陳黎夫,譯.北京:人民郵電出版社,2010.

[4] 張紅軍,耿隨心.Visual C++ 6.0編程詳解[M].北京:科學出版社,2003.

主站蜘蛛池模板: 永久免费AⅤ无码网站在线观看| 2022国产无码在线| 香蕉伊思人视频| 精品欧美日韩国产日漫一区不卡| 国内黄色精品| 国产免费好大好硬视频| 国产精品主播| 色婷婷久久| 亚洲a级在线观看| 国产成人精品在线1区| 午夜丁香婷婷| 婷婷午夜影院| 国产69精品久久| 国产门事件在线| 国产亚洲成AⅤ人片在线观看| 永久天堂网Av| 国产高清免费午夜在线视频| 精品国产www| 欧美日韩一区二区三区在线视频| 国产精品专区第1页| 日本一区二区三区精品AⅤ| 中文字幕不卡免费高清视频| 国产欧美日韩视频一区二区三区| 国产午夜一级毛片| 性69交片免费看| 亚洲AV一二三区无码AV蜜桃| 国产精品99久久久久久董美香| 一级看片免费视频| 青草精品视频| 中文字幕在线观看日本| 欧美在线黄| 久久精品娱乐亚洲领先| 欧美日本视频在线观看| 99re热精品视频国产免费| 四虎永久免费地址| 日韩av电影一区二区三区四区| 午夜激情婷婷| 亚洲天堂视频网站| 毛片基地美国正在播放亚洲| 伊人久久综在合线亚洲2019| 久久久黄色片| 欲色天天综合网| 亚洲码一区二区三区| 久久综合成人| 蜜臀av性久久久久蜜臀aⅴ麻豆| 国产福利大秀91| 欧美成人午夜视频免看| 手机在线免费毛片| 伊人大杳蕉中文无码| 99久久精品免费看国产电影| 超碰91免费人妻| 99热最新在线| 欧美日韩北条麻妃一区二区| 欧美日韩午夜| 精品福利视频导航| 久久99蜜桃精品久久久久小说| 亚洲第一极品精品无码| 久久综合一个色综合网| 青青操视频免费观看| 一级做a爰片久久毛片毛片| 国产办公室秘书无码精品| 一区二区偷拍美女撒尿视频| 99久久精彩视频| 2021最新国产精品网站| 国产女人18毛片水真多1| 99视频在线观看免费| 91啦中文字幕| 99偷拍视频精品一区二区| 日韩精品久久久久久久电影蜜臀| 亚洲av片在线免费观看| 亚洲综合经典在线一区二区| 日本在线亚洲| 精品五夜婷香蕉国产线看观看| 国产你懂得| 成人日韩视频| 免费中文字幕在在线不卡 | 露脸一二三区国语对白| 国产一级妓女av网站| 青青草91视频| 奇米影视狠狠精品7777| 国产免费福利网站| 国产原创演绎剧情有字幕的|