Windows中的畫筆,恐怕讀者不會不知道吧?其繪圖功能雖無法與專業的繪圖軟件相提并論,但也馬馬虎虎能夠應付用戶日常制圖的需求。其實,利用Visual Basic我們也能開發出如“畫筆”一樣的軟件,甚至比它更完善,更出色。我就此制作一例,希望與各位VB的愛好者們交流VB編程的心得與體會。
程序界面制作篇。
一、啟動VB,創建一個“VB企業版控件”文件。
二、添加窗體:一個MDI窗體(MDIPaint)、一個子窗體:繪圖操作區(Paintwin)、七個自由窗體,包括一個版本信息窗體(About1)、一個畫筆大小調節窗體(BrushSroll)、一個啟動界面(Cover)、一個濾鏡信息框(Filterwin)、一個幫助窗體(Helpwin)、一個登陸提示框(password)、一個文本輸入框(Textpaint)。設置MDIPaint為啟動窗體。
三、 在窗體中添加控件
1. 在MDIPaint窗體中先制作菜單:就像你見到的所有Windows程序一樣,包括:文件(新建、打開、清屏、存儲、另存為、關閉、打印、退出)、編輯(復制、粘貼等)、變換(垂直、水平、旋轉、縮放)、濾鏡(浮雕)、工具欄(隱藏、顯示)、視圖(顏色、字體、畫筆、設置桌面)、幫助(版本信息)……并配置快捷鍵。然后,設置一個通用對話框控件(Commondialog1)、兩個圖片列表控件(ImageList1&ImageList2)、兩個工具欄(Toolbar1&Toolbar2)、一個狀態條(StatusBar1)。抓取圖標,將常用的工具欄中的圖標加入到ImageList1中,制作各種圖像代表圖標14個加入到ImageList2中,將圖片列表控件與工具欄連在一起。在狀態條中加入時間、X軸和Y軸坐標顯示。完成界面如圖2所示。其中,Toolbar1是工具欄,類似于Word中位于菜單欄下的工具欄快捷鍵,可根據其所含圖標屬性設定功能。Toolbar2是圖像欄,是繪制固定圖像的快捷鍵,有直線、普通矩形、填充圓等,其填充方式均按圖標屬性設置。
2. 在Paintwin窗體中,主要包括有兩個圖片框(Picture1& Pictureback),將Picture1嵌套在Pictureback中以實現能夠顯示任意尺寸的畫面,添加兩個滾動條(imagescroll1& imagescroll2)配合察看大尺寸圖片。另外,還需要一個標簽(forecolor1)顯示前景色,一個標簽(backcolor1)顯示背景色,一個按鈕交換前景色與背景色,一個復選框(toolbar2c1)切換MDIPaint中的圖像欄與工具欄。完成界面如圖2所示。
3. BrushSroll窗體主要功能是通過滾動條滑動任意調節畫筆的大小,包括一個滾動條(BrushHScroll1)、畫筆數值顯示區(blabel2)及確認、取消按鈕。
4. Cover窗體裝入啟動畫面(施展你的藝術才華吧),啟動時間可自行設定。例如:
技巧篇
在編程中掌握重要方法,靈活利用技巧,往往能事半功倍。
一、像“畫筆”一樣,在繪圖區的任意地方輸入文本
幾乎所有的繪圖軟件都提供了文字輸入的功能,有的(如Photoshop)甚至能夠做一些簡單的文本編輯的工作。此程序也實現了這一特定功能。首先,設置Commondialog1和Picture1關于字體的所有屬性,如:“Picture1.FontName = CommonDialog1.FontName”。通常“新手上路”的朋友會遇到:當執行程序時,會出現一個信息框:“控制面板中未安裝字體”,解決它必須首先聲明兩個變量:Screenfonts=&H1、Printerfonts=&H2。并寫出如下代碼:“CommonDialog1.Flags = Screenfonts + Printerfonts”。同時在VB的屬性窗口中設置Flags的值為1。接下來需要完成在Picture1中單擊左鍵的那個位置輸入文本這一功能,因此需要得到單擊左鍵處的坐標,即在Picture1_Click()中將startx、satrty的值傳給CurrentX、CurrentY。這樣,問題就解決了。
二、靈活運用PaintPicture
用PaintPicture方法來實現圖像的翻轉,比較容易(需要API——StretchBlt的支持)。其語法規則為:object.PaintPicture Picture, x1, y1, width1, height1, x2, y2, width2, height2, (opcode)。只要熟練掌握其中變量的使用,那么圖像變換任你選擇。
以下是幾個簡單變換的例子:
| 水平翻轉:Picture1.PaintPicture Picture1.Picture, Picture1.ScaleWidth, 0, -1 * Picture1.ScaleWidth, Picture1.ScaleHeight 垂直翻轉:Picture1.PaintPicture Picture1.Picture, 0, Picture1.ScaleHeight, Picture1.ScaleWidth, -1 * Picture1.ScaleHeight 旋轉180度:Picture1.PaintPicture Picture1.Picture, Picture1.ScaleWidth, Picture1.ScaleHeight, -1 * Picture1.ScaleWidth, -1 * Picture1.ScaleHeight 縮 小:Picture1.PaintPicture Picture1, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, -Picture1.ScaleWidth, -Picture1.ScaleHeight 放 大:Picture1.PaintPicture Picture1, Picture1.ScaleWidth, Picture1.ScaleHeight, -2 * Picture1.ScaleWidth, -2 * Picture1.ScaleHeight |
三、對Toolbar中某一按鍵狀態的控制
通常,需對Toolbar中某一按鍵進行程序編制:“Select case1 case2 case3 ……” 。
當需要對一按鍵的狀態進行控制,比如要在某一時刻讓第5個按鍵自動按下,則只需要寫出代碼:“Toolbar1.Buttons(5).Value = 1”即可。
四、關于固定圖形的繪制
“畫筆”能夠在圖紙的任意地方畫出直線、虛線、空心圓、實心圓、矩形、多邊形等。我在此程序中也加入了這一功能。你看到MDIPaint窗體上那一排(共14個)小圖標嗎?它們就是為畫固定圖形而設置的。例如:當我點擊任一類型的填充圓后,在Picture1中左鍵按下的坐標會被記錄下來:startx、starty。然后按住左鍵移動鼠標,這時程序會監測左鍵的狀態,一旦左鍵松開,便將此時新的坐標值寫入endx及endy。程序又轉到繪圖函數中,以(startx,starty)為圓心,以(sqr((startx-endx)^2+(starty-endy)^2))為半徑,以預先設定的填充狀態(FillStyle)及顏色(如前景色)畫出一個你所希望得到的填充圓。其它固定圖形的繪制方法皆大同小異。
五、借用API函數
是不是還有許多用VB無法實現的功能?讓API函數幫幫忙吧!查查你的API文本瀏覽器就可以了。建議你看看Visual C++,不過很可能你以后就不會用 VB寫程序了。
代碼篇
(限于篇幅,只列出比較重要的部分源代碼)
一、文本輸入:
'彈出字體對話框
If MDIPaint.Toolbar1.Buttons(11).Value = tbrPressed Then
'調用對話框彈出字