導航:首頁 > 源碼編譯 > mspaint源碼

mspaint源碼

發布時間:2025-08-14 20:46:22

『壹』 目前有哪些方便集成的截圖控制項

可以使用牛牛截圖控制項,完全免費使用。

牛牛截圖控制項是一個具備當前主流截圖功能的插件,方便集成進不同的應用系統中,節省開發時間。具體可見:http://blog.csdn.net/tragicguy/article/details/20741077

1.本控制項實現的基本功能及特點如下

1).支持窗口區域的自動識別

2).支持矩形、圓形、箭頭、文字的繪制以及撤銷

3).可另存為png、jpg、bmp等格式

4).支持滑鼠所在區域的圖像放大功能,以便精準定位

5).窗口大小、滑鼠坐標顯示以及游標處的顏色拾取

6).採用C++語言開發的Win32動態庫,大小為260KB

7).支持XP、WIN7、WIN8及WIN2003、WIN2008等操作系統;

8).此控制項提供標準的介面,方便集成進其他軟體中;

例如可以與瀏覽器控制項整合,實現Web頁面截圖的功能,也可以與其他如即時通訊等其他任何系統中

先看看使用效果:


2.控制項使用方法

1).在測試程序中點擊啟動截圖[在集成此控制項後,可以自行通過熱鍵進行啟動],按下滑鼠左鍵並拖動,以確定需要截圖的范圍,也可以直接在自動識別到的窗口上點擊一下滑鼠左鍵,確定截圖范圍;此時可以通過放大的區域來精確定位截圖區域。

2).確定截圖范圍後,工具欄將會顯示出來,選中指定的繪制類型[繪制類型、大小、顏色],可以進行二次繪制塗鴉。

3).可以通過點擊撤銷按鈕來取消上一筆所繪制的形狀。

4).在截圖的過程中,可以按ESC鍵或者點擊滑鼠右鍵來取消截圖。

5).按下回車鍵或者在截圖區域內雙擊滑鼠左鍵,可以完成截圖[也可以點擊工具欄上的「完成」按鈕]。

6).點擊「保存」按鈕,可以將所截區域保存至圖片文件。

3.控制項介面的使用方法

可以在程序中使用LoadLibrary的方式載入此控制項,進行初始化後,直接調用啟動截圖的函數即可:


[cpp]view plain

typedefint(*FnStartScreenCapture)(constchar*szAuth,constchar*szDefaultSavePath,void*pCallBack,unsignedlonghWndNotice,unsignedintnoticeMsg);

FnStartScreenCapturem_StartScreenCapture=NULL;

typedefint(*FnInitScreenCapture)(unsignedlongtrackerColor,unsignedlongeditBorderColor,intnTransparent,intflag);

FnInitScreenCapturem_InitCapture=NULL;

//載入截圖控制項

m_hMole=LoadLibrary("NiuniuCapture.dll");

m_StartScreenCapture=(FnStartScreenCapture)GetProcAddress(m_hMole,"StartScreenCapture");

m_InitCapture=(FnInitScreenCapture)GetProcAddress(m_hMole,"InitScreenCapture");

m_InitCapture(RGB(255,0,0),RGB(0,174,255),180,0);

m_StartScreenCapture("niuniu","",NULL,(unsignedlong)m_hWnd,WM_USER+1111);



具體可以參考調用Capturedemo_source.rar [下載地址見本文末尾],介面的具體描述如下:

1).初始化介面

intInitScreenCapture(unsignedlongtrackerColor,unsignedlongeditBorderColor,intnTransparent,intflag);

此介面函數用於初始化界面的顯示效果,如果不調用,則以默認值處理。

參數說明:

參數名

參數類型

參數說明

備注

trackerColor

COLORREF

用於設置橡皮筋框的顏色以及自動識別窗口的邊框色

如果不調用此函數,則此框顏色默認為:

RGB(0,174,255);

editBorderColor

COLORREF

用於設置文本輸入框的邊框顏色

如果不調用此函數,則此框顏色默認為:

RGB(255,0,0);

nTransparent

int

用於指定工具欄窗口的透明度(0-255)

如果不調用此函數,則透明度默認為200

flag

int

暫未使用

2).啟動截圖介面:

intStartScreenCapture(constchar*szAuth,constchar*szDefaultSavePath,void*pCallBack,unsignedlonghWndNotice,unsignedintnoticeMsg);

參數說明:

參數名

參數類型

參數說明

備注

szAuth

字元串

用於調用控制項時的授權

目前固定傳入」niuniu」即可

szDefaultSavePath

字元串

用於指定在截圖完成時自動保存的文件路徑

如:c:\test.jpg,如果此字元串為空,則完成時將只寫入剪貼板

pCallBack

Void*

用於指定在截圖完成時自動回調的函數

用於通知調用程序截圖完成

hWndNotice

UINT

用於指定截圖完成時發送通知的窗口句柄及發送的消息

用於通知調用程序截圖完成,截圖完成時,控制項將會發送消息:

::PostMessage(hWndNotice,noticeMsg,1,1);

noticeMsg

UINT

4.控制項的主要技術點簡介

本控制項採用C++語言,通過Win32程序進行實現,內部使用了Duilib來做工具欄以及圖片放大區域的顯示;對於畫圖部分,主要採用了GDI+,以下對我個人認為需要注意的技術點進行簡要描述:

4.1橡皮筋類的繪制、大小調整以及拖動等

此橡皮筋類是從MFC的源代碼中提取的CRectTracker,進而移植到Win32環境中的,具體橡皮筋類的原理就不描述了,需要重點關注的是TrackRubberBand及Track兩函數:

1)當滑鼠按下,且橡皮筋沒有顯示的情況下,使用TrackRubberBand,以確定橡皮筋所包含區域


[cpp]view plain

if(!gl_rectTracker.TrackRubberBand(hWnd,pt,TRUE))

{//說明滑鼠沒有移動,則獲取自動識別到的窗口

if(gl_borderRt.right!=0&&gl_borderRt.right>gl_borderRt.left)

{

gl_rectTracker.m_rect.SetRect(gl_borderRt.left,gl_borderRt.top,gl_borderRt.right,gl_borderRt.bottom);

}

}

2)當橡皮筋類已經顯示,則需要判斷此時滑鼠的落點,如果在橡皮筋區域內[gl_rectTracker.HitTest(pt)的返回值大於0],則需要調用Track,以便拖動橡皮筋調整大小或者移動它。


4.2自動窗口區域識別

在Windows系統中,所有的窗口都是有一個層級的(ZORDER),此處採用的方法是在獲取屏幕截圖之前,保存下當前所有可見的窗口句柄以及其子窗口句柄[主要利用FindWindowEx],此處值得一提的是,需要過濾掉一些帶WS_EX_LAYERED屬性的窗口[在不過濾的情況下,WIN8下會有問題,存在透明的窗口處於當前窗口之上],同時針對任務欄窗口不能過濾掉。

4.3GDI+繪制矩形、圓形、箭頭、文字

1).繪制箭頭的代碼類似如下:


[cpp]view plain

voidDrawArraw(Graphics&graphics,CPointpt1,CPointpt2,Colorcolor)

{

Pointpt[3]={Point(3,-5),Point(-3,-5),Point(0,0)};

GraphicsPathstrokePath;

strokePath.AddLines(pt,sizeof(pt)/sizeof(Point));

Penpen(color,1);

CustomLineCapcustCap(&strokePath,NULL);

pen.SetCustomEndCap(&custCap);

graphics.DrawLine(&pen,pt1.x,pt1.y,pt2.x,pt2.y);

}

此處需要通過對所畫的直線進行平滑處理,否則線條將會很難看。


2).繪制文字

此處有兩點需要注意,我只解決了其中的第一點:

a).針對每一行需要單獨繪制,否則在EDIT控制項中的行高要比DrawString的行高要少,導致繪制出來的文字佔用高度比在EDIT中要多,感覺文字的Y坐標有移位

b).在同時有中文與英文時,繪制出來的文字的X坐標是有移位的,我暫時沒有處理,估計需要一個字元一個字元的繪制來解決

4.4可變大小、可拖動的EDIT控制項

此處在效果上參考了微軟的mspaint程序的實現,通過將一個EDIT控制項與橡皮筋類進行組合來實現,此處需要重點處理一下滑鼠按下以及防止閃爍;還需要注意與EDIT控制項組合的橡皮筋類的繪制細節

4.5滑鼠所在區域的放大鏡效果顯示

通過一個透明的PNG做背景圖StretchBlt函數,通過游標所在點為基點,以4倍大小放大顯示即可

5.未解決的問題

5.1目前沒有處理當輸入文字或者粘貼文字時,自動改變文本框的大小,此處不太清楚如何處理控制項的自動變更大小

5.2當文本框中有中文與英文混合時,繪制到截圖上後,文字的X坐標會有移位

註:

控制項包及調用說明、代碼見:

牛牛截圖控制項最終版:http://download.csdn.net/detail/tragicguy/7007833

『貳』 電腦系統的分類

電腦系統操作系統是管理計算機硬體與軟體資源的計算機程序,同時也是計算機系統的內核與基石,分類如下:

一、Windows操作系統:

Windows操作系統是最常見的計算機操作系統,是微軟公司開發的操作軟體。該軟體經歷了多年的發展歷程,目前推出的win10系統相當成熟。Windows操作系統具有人機操作互動性好,支持應用軟體多,硬體適配性強等特點。該系統從1985年誕生到現在,經過多年的發展完善,相對比較成熟穩定,是當前個人計算機的主流操作系統。

二、Mac OS系統:

Mac OS是一套運行於蘋果Macintosh系列電腦上的操作系統。Mac OS是首個在商用領域成功的圖形用戶界面操作系統。現行的最新的系統版本是macOS 10.15 beta 4 ,且網上也有在PC上運行的Mac系統。Mac系統是基於Unix內核的圖形化操作系統;一般情況下在普通PC上無法安裝的操作系統。由蘋果自行開發。蘋果機的操作系統已經到了OS 10,代號為Mac OS X(X為10的羅馬數字寫法),它的許多特點和服務都體現了蘋果的理念。

三、linux系統:

Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和Unix的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的Unix工具軟體、應用程序和網路協議。它支持32位和64位硬體。Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多用戶網路操作系統。

閱讀全文

與mspaint源碼相關的資料

熱點內容
編譯一個程序要求老師 瀏覽:231
java請求https證書 瀏覽:601
編譯合法的是 瀏覽:561
加密過的u盤視頻能不能電腦錄屏 瀏覽:575
麻將解壓器價格 瀏覽:619
linuxc編程實戰pdf 瀏覽:470
程序員懷孕的一年怎麼提升自己 瀏覽:898
c代碼工程中的編譯構建腳本 瀏覽:181
反編譯apk修改 瀏覽:488
找程序員當老公 瀏覽:905
androidsetmatrix 瀏覽:177
龍王的命令 瀏覽:453
戰馬pdf 瀏覽:720
slp游戲app是什麼 瀏覽:605
新疆離廣東源碼 瀏覽:205
用命令提示符打開bios 瀏覽:546
java日誌列印 瀏覽:846
聯想筆記本瀏覽器怎麼加密 瀏覽:689
阿里雲主機伺服器配置 瀏覽:423
解壓超好看大自然圖片 瀏覽:914