1. 程式人生 > WINDOWS開發 >windows核心程式設計--2、windows的畫筆畫刷以及一些簡單的應用

windows核心程式設計--2、windows的畫筆畫刷以及一些簡單的應用

一、前言

????該系列前幾篇:
?????windows核心程式設計--1、使用vs2019編寫第一個win32專案


二、相關工具

????IDE:vs2019
????其他格式圖片轉ico指令碼(貼在文末)


三、實驗要求

????1、改變win32程式標題欄圖示、滑鼠樣式以及工作列圖示。
????2、給選單欄新增一個退出記事本的子項,並實現該功能。
????3、使用自創的畫筆以及畫刷繪製線、多邊形、橢圓等圖形並填充。


四、實現

????1、使用vs2019建立一個windows桌面應用程式,如下所示:

技術分享圖片

????2、找到wcex處,修改wcex.hCursor屬性,改變滑鼠樣式,這裡改變成IDC_CROSS

即十字形狀,如下所示:

技術分享圖片

????3、在vs2019選單處,開啟檢視-->其他視窗-->資源檢視,點選其右側Icon(右鍵點選)-->新增資源,新增ico圖示資源,在程式碼中找到wcex.hIcon改變其屬性以改變該視窗工作列圖示,找到wcex.hIconSm改變標題欄的小圖示,如下所示:

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

????4、在資源檢視中,找到Menu-->IDC_MY點選,在其左側編輯選單子項和在右下角編輯該子項ID(該ID在我們點選該項時會產生一個這個ID訊息傳給我們的訊息處理函式,以響應使用者),最後在訊息處理函式中的WM_COMMAND訊息中新增相應的事件處理程式碼,如下所示:

技術分享圖片

技術分享圖片

技術分享圖片

??5、在程式碼中找到WM_PAINT,新增我們要繪製的圖形,先說一下繪製的基本過程:
????a、首先利用GetDC或者BeginPaint函式獲取繪製控制代碼,其中,GetDC函式有一個引數,為要繪製的視窗控制代碼。
????b、接著利用::CreatePen函式建立一個自創畫筆,該函式有3個引數,第一個引數為畫筆的形狀,第二個引數為畫筆的粗細,第三個引數為畫筆的顏色,例如HPEN hpen = ::CreatePen(PS_SOLID,2,RGB(138,43,226));,建立完畫筆後,需要用::SelectObject函式將該畫筆選入,該函式有兩個引數,第一個引數為我們用GetDC

函式得到的繪製控制代碼,第二個引數為要選入的物件,例如::SelectObject(hdc,hpen);
????c、接著利用::CreateSolidBrush函式建立一個自創畫刷,該函式只有一個引數,為該畫刷的顏色,例如HBRUSH hbrush = ::CreateSolidBrush(RGB(255,255,0));,同樣的,建立完畫筆後,需要用::SelectObject函式將該畫筆選入。
????接著就是利用LineToArc等函式繪製圖形,這些api就不再細說了,百度去搜索一些這些api即可,會在文末貼一篇寫得比較全的部落格連結。

技術分享圖片


五、實驗結果截圖

技術分享圖片

六、一些連結和圖片轉換程式碼

??繪製圖形api

??圖片轉換程式碼:
????使用說明:python conversion.py -P 要轉換的圖片路徑
實驗程式碼:(命名為不是conversion.py請更改上面相應地方)

import PythonMagick
from optparse import OptionParser

store_position=‘‘
start_position=‘‘
parse = OptionParser()
parse.add_option(‘-P‘,action = ‘store‘,type = ‘string‘,dest = ‘position‘,help = ‘輸入圖片位置‘)
(options,args) = parse.parse_args()
start_position = options.position
x = len(start_position)
store_position = start_position[0:(x - 4)]
store_position += ‘.ico‘
img = PythonMagick.Image(start_position)
img.sample(‘128x128‘)
img.write(store_position)
print(f‘轉換完成!{start_position}已經轉換到了{store_position}‘)