『壹』 目前有哪些方便集成的截圖控制項
可以使用牛牛截圖控制項,完全免費使用。
牛牛截圖控制項是一個具備當前主流截圖功能的插件,方便集成進不同的應用系統中,節省開發時間。具體可見: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以網路為核心的設計思想,是一個性能穩定的多用戶網路操作系統。