Ⅰ 關於vc畫圖編程的問題
用 GDI+ 來做吧,visual stdio自帶的,對二維圖形功能進行了較好的封裝!
類Gaphics可以實現畫點,線,圓,平滑曲線等基本的畫圖功能,功能比較齊全,也可以把畫面做得很精美!
類Region可以支持任意圖形的拾取
同時Graphics還提供了縮放,旋轉,以支持簡單幾何變換
詳細可以參考MSDN
Ⅱ 目前有哪些方便集成的截圖控制項
可以使用牛牛截圖控制項,完全免費使用。
牛牛截圖控制項是一個具備當前主流截圖功能的插件,方便集成進不同的應用系統中,節省開發時間。具體可見: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
Ⅲ 怎麼修改CRectTracker的框的顏色
//把MFC的CRectTracker類源碼的Draw(CDC*pDC)函數源碼,復制到自己的Draw函數。
voidCMyRectTracker::Draw(CDC*pDC)const
{
//......
//drawlines//邊框顏色
if((m_nStyle&(dottedLine|solidLine))!=0)
{
if(m_nStyle&dottedLine)
{
//pOldPen=pDC->SelectObject(CPen::FromHandle(_afxBlackDottedPen));
pOldPen=pDC->SelectObject(/*你自定義的顏色刷子*/);
}
else
{
//pOldPen=(CPen*)pDC->SelectStockObject(BLACK_PEN);
pOldPen=pDC->SelectObject(/*你自定義的顏色刷子*/
}
//......
//drawresizehandles//八個黑角的顏色
if((m_nStyle&(resizeInside|resizeOutside))!=0)
{
UINTmask=GetHandleMask();
for(inti=0;i<8;++i)
{
if(mask&(1<<i))
{
GetHandleRect((TrackerHit)i,&rect);
pDC->FillSolidRect(rect,RGB(/*你想要的顏色*/));//RGB(0,0,0));
}
}
}
//......
Ⅳ 簡單有關問題怎麼畫虛線,畫實心圓點求源碼急用.()
2.滑鼠點下去是畫一個實心圓點(圓點大小可以控制)謝過各位!------解決方案--------------------------------------------------------虛線
CPen( int nPenStyle, int nWidth, COLORREF crColor );nPenStylePS_DASH Creates a dashed pen. Valid only when the pen width is 1 or less, in device units.
------解決方案--------------------------------------------------------畫圓用這個函數:
BOOL Ellipse(
LPCRECT lpRect);其參數是一個指向一個矩形區域的指針,改變它就可以改變大小了。
------解決方案--------------------------------------------------------矩形虛線框?畫線不如用CRectTracker
繪制圓點,先創建一個實心畫刷就行了
CBrush brush(RGB(255,255,0));
CBrush *old = pDC->SelectObject(&brush);
CRect rect;
rect.SetRect(100,100,100,100);
Ⅳ Visual C++典型模塊與項目實戰大全的目錄
《visual c++典型模塊與項目實戰大全》
第1篇 visual c++項目開發基礎
第1章 vc++ 6.0程序設計簡介 2
教學視頻:11分鍾
1.1 visual c++ 6.0集成開發環境 2
1.1.1 vc++ 6.0集成開發環境菜單欄及工具欄簡介 3
1.1.2 vc++ 6.0集成開發環境工作區簡介 3
1.2 visual c++ 6.0的「hello world!」 4
1.2.1 vc++ 6.0可創建的工程簡介 5
1.2.2 創建基於win32 console application的「hello world!」 6
1.2.3 創建基於mfc app wizard(exe)的「hello world!」 7
1.3 vc++集成開發環境使用技巧 8
1.3.1 快速定位 8
1.3.2 快速格式化一段源代碼 9
1.3.3 從工程中徹底刪除一個類 10
1.3.4 在vc++中設置頭文件和庫文件 10
1.3.5 在工作區導入多個項目 10
1.4 vc++集成開發環境常見問題及解決方法 11
1.4.1 工程文件簡介 11
1.4.2 常見問題及解決方法 12
.1.5 小結 13
第2章 c++編程基礎 14
教學視頻:25分鍾
2.1 變數 14
2.1.1 標識 14
2.1.2 基本數據類型 15
2.1.3 變數的聲明 16
2.2 操作、運算符 16
2.2.1 賦值運算 16
2.2.2 算術運算 17
2.2.3 邏輯運算 18
2.2.4 關系運算 19
2.2.5 位操作運算 19
2.2.6 條件操作運算 20
2.2.7 其他操作運算 20
2.2.8 運算符優先順序 22
2.3 控制結構 22
2.3.1 條件控制結構 23
2.3.2 循環控制結構 23
2.3.3 選擇控制結構 25
2.3.4 分支跳轉控制結構 25
2.4 函數 26
2.5 類 26
2.5.1 類的成員變數和成員函數 27
2.5.2 類的繼承 28
2.6 小結 29
第2篇 典型模塊開發
第3章 桌面時鍾(gdi實現) 32
教學視頻:64分鍾
3.1 桌面時鍾界面簡介 32
3.2 桌面時鍾的功能簡介 33
3.2.1 桌面時鍾界面控制功能簡介 33
3.2.2 桌面時鍾時間設置功能簡介 36
3.3 控制項知識 37
3.4 實現桌面時鍾的關鍵技術 39
3.4.1 gdi基礎知識簡介 39
3.4.2 gdi編程基礎簡介 40
3.5 gdi的基礎類 40
3.5.1 cdc類 40
3.5.2 畫筆類(線色類) 41
3.5.3 畫刷類(面色類) 43
3.5.4 字體類 45
3.5.5 點類 46
3.5.6 大小類 47
3.5.7 矩形類 47
3.6 gdi繪制像素點的實際應用 49
3.7 gdi繪制線條的實際應用 50
3.7.1 gdi繪制直線的函數 50
3.7.2 用畫筆繪制線的步驟 52
3.7.3 繪制線條的示例 53
3.8 gdi繪制填充圖的實際應用 58
3.8.1 矩形填充圖 58
3.8.2 扇形填充圖 59
3.8.3 填充拖動矩形 60
3.8.4 填充區域 63
3.9 gdi輸出字體的實際應用 65
3.10 表盤模塊的設計與實現 66
3.10.1 表盤設置模塊 66
3.10.2 表盤的繪制模塊 68
3.11 表針模塊的設計與實現 73
3.11.1 表針設置模塊 73
3.11.2 表針繪制模塊 75
3.12 數字時鍾模塊的設計與實現 77
3.12.1 數字時鍾設置模塊 77
3.12.2 數字時鍾繪制模塊 79
3.13 數字日期模塊的設計與實現 82
3.14 背景模塊的設計與實現 86
3.15 鬧鈴模塊的設計與實現 87
3.15.1 蜂鳴器音樂選擇及播放模塊 88
3.15.2 鬧鈴設置主模塊 89
3.16 系統時間設置模塊的設計與實現 91
3.17 主界面模塊的設計與實現 92
3.17.1 主窗體界面模塊的設計與實現 92
3.17.2 主窗體功能模塊的設計與實現 94
3.17.3 主窗體控制模塊的設計與實現 97
3.18 小結 102
第4章 電子郵件收發管理器(jmail+自定義按鈕) 103
教學視頻:58分鍾
4.1 電子郵件收發管理器簡介 103
4.1.1 主程序簡介 103
4.1.2 郵箱設置信息功能簡介 104
4.1.3 收件箱功能簡介 104
4.1.4 發件箱功能簡介 105
4.1.5 資源管理器技術簡介 106
4.2 自定義的按鈕控制項 107
4.2.1 定義一個新類繼承於cbutton 107
4.2.2 定製按鈕的背景圖像 108
4.2.3 為按鈕添加聲音 115
4.2.4 重載滑鼠事件 117
4.3 定製具有個性背景圖像的對話框 120
4.4 實現電子郵件收發管理器的關鍵技術 122
4.4.1 jmail的基礎知識 122
4.4.2 接收郵件 123
4.4.3 發送郵件 124
4.5 電子郵件收發管理器的實現 126
4.5.1 主窗體的設計與實現 126
4.5.2 設置模塊的設計與實現 130
4.5.3 收件箱模塊的設計與實現 130
4.5.4 寫郵件模塊的設計與實現 135
4.6 小結 138
第5章 系統資源管理器(文件操作+文件檢索+多線程) 139
教學視頻:32分鍾
5.1 系統資源管理器簡介 139
5.1.1 樹形結構瀏覽系統文件資源 139
5.1.2 列表視圖顯示指定目錄下的文件資源 139
5.1.3 搜索文件 140
5.1.4 資源管理器的技術簡介 140
5.2 樹形視圖控制項 141
5.2.1 建立樹形視圖控制項工程 141
5.2.2 為樹形視圖添加名為「根節點」的節點 141
5.2.3 為樹形視圖插入多層節點 142
5.2.4 為樹形視圖添加圖像列表 143
5.2.5 設置樹形視圖的顯示風格 144
5.2.6 為樹形視圖添加項目選中處理函數 145
5.2.7 為樹形視圖添加項目展開處理函數 146
5.3 列表型視圖控制項 147
5.3.1 創建一個列表視圖工程 147
5.3.2 為列表型視圖添加圖像列表 147
5.3.3 為列表型視圖添加新項目 148
5.3.4 為列表型視圖添加項目雙擊事件 148
5.4 windows文件系統的基礎知識 149
5.5 shell命名空間中對象的標識方法 150
5.5.1 文件標識簡介 150
5.5.2 什麼是文件標識列表 150
5.5.3 什麼是文件標識列表指針 150
5.5.4 文件標識列表指針的常用處理函數 151
5.6 通過shell介面遍歷系統文件和文件夾 153
5.6.1 ishellfolder介面的主要方法 153
5.6.2 ienumidlist介面的主要方法 154
5.6.3 遍歷文件系統的步驟 155
5.7 系統資源管理器的實現過程簡介 155
5.8 主框架模塊的設計實現 156
5.8.1 為主框架訂制工具欄 156
5.8.2 分割視圖區 156
5.9 樹形視圖顯示文件系統 157
5.9.1 初始化樹形控制項 157
5.9.2 實現獲取itemidlist文件名稱的功能 158
5.9.3 實現填充樹形控制項的功能 160
5.9.4 實現展開樹形控制項節點的功能 162
5.9.5 實現樹形控制項節點切換的功能 163
5.9.6 實現獲取文件的系統圖標 164
5.10 列表視圖顯示系統文件 165
5.10.1 初始化列表視圖 165
5.10.2 實現樹形視圖項目添加的功能 165
5.10.3 執行滑鼠雙擊對象 168
5.11 路徑的前進、後退與向上操作的實現 170
5.11.1 路徑的前進、後退操作的實現 171
5.11.2 路徑的向上操作 174
5.12 文件查找模塊的實現 174
5.12.1 添加並實現文件查找類 174
5.12.2 文件查找界面設計與實現 178
5.12.3 文件查找控制項屬性 179
5.12.4 實現文件查找功能 179
5.13 小結 183
第6章 系統任務管理工具(系統監控+系統進程) 184
教學視頻:23分鍾
6.1 任務管理器簡介 184
6.1.1 應用程序管理模塊 184
6.1.2 進程管理模塊 184
6.1.3 性能監測模塊 185
6.1.4 任務管理器的技術簡介 185
6.2 控制項知識 186
6.2.1 tab控制項的使用 186
6.2.2 list控制項用作report 187
6.3 實現系統任務管理的關鍵技術 187
6.3.1 如何獲取應用程序信息 187
6.3.2 如何獲取系統進程信息 188
6.3.3 如何啟動、停止進程 189
6.3.4 如何獲取內存信息 190
6.3.5 如何獲取cpu信息 190
6.4 主框架模塊的設計實現 193
6.4.1 設計主窗體菜單欄 193
6.4.2 文件菜單功能實現 194
6.4.3 關機菜單功能實現 194
6.4.4 實現tab控制項的功能 196
6.5 應用程序監控模塊的實現 198
6.5.1 添加並設置列表控制項 198
6.5.2 檢測系統啟動的應用程序 198
6.5.3 實現應用程序實時監測功能 200
6.5.4 實現應用程序的控制功能 200
6.6 進程監控模塊的實現 202
6.6.1 添加並設置列表控制項 202
6.6.2 監測當前的進程信息 202
6.6.3 實現進程的實時監測 205
6.6.4 實現關閉指定進程的功能 206
6.7 內存監測模塊的實現 207
6.8 cpu監測模塊的實現 213
6.9 小結 217
第7章 ftp客戶端程序(internet會話+ftp技術) 218
教學視頻:29分鍾
7.1 ftp客戶端程序簡介 218
7.1.1 樹形結構瀏覽本地系統文件資源 218
7.1.2 列表視圖顯示ftp伺服器上的文件資源 218
7.1.3 拖放實現文件的上傳與下載 218
7.1.4 資源管理器的技術簡介 220
7.2 控制項知識 221
7.2.1 製作浮動對話框 221
7.2.2 為浮動對話框的控制項添加處理事件 222
7.2.3 樹形視圖項目的拖動 223
7.2.4 列表視圖項目的拖動 226
7.3 實現ftp客戶端的關鍵技術 228
7.3.1 cinternetsession類 228
7.3.2 ftpconnection類 229
7.4 ftp客戶端程序的模塊實現 230
7.4.1 ftp連接模塊的設計實現 230
7.4.2 獲取ftp當前路徑下的所有文件信息 233
7.4.3 ftp客戶端文件下載模塊 236
7.4.4 ftp客戶端文件上傳模塊 237
7.5 小結 238
第8章 音樂播放器(active movie control object控制項+不規則按鈕+托盤) 239
教學視頻:37分鍾
8.1 音樂播放器簡介 239
8.1.1 打開音樂文件 239
8.1.2 播放音樂的功能 240
8.1.3 暫停播放及停止播放功能 240
8.1.4 循環播放功能 241
8.1.5 調節音量大小 241
8.1.6 將播放器最小化到托盤 241
8.1.7 音頻播放器的技術簡介 241
8.2 slider控制項 242
8.2.1 用作標識進度的slider控制項 242
8.2.2 調節音量的slider控制項 243
8.3 定製不規則的按鈕控制項 244
8.3.1 自定義按鈕類 244
8.3.2 自定義按鈕的構造及析構的實現 246
8.3.3 創建不規則按鈕的方法 246
8.3.4 實現不規則按鈕的幾個重要方法 248
8.3.5 為不規則按鈕添加背景圖像 249
8.3.6 實現按鈕的狀態背景圖像 250
8.3.7 實現添加按鈕標題及邊框的功能 251
8.3.8 實現繪制按鈕的功能 253
8.3.9 處理按鈕的滑鼠事件 254
8.3.10 滑鼠狀態決斷及點測試功能的實現 255
8.3.11 自定義不規則按鈕的實現實例 256
8.4 實現音樂播放器的關鍵技術 258
8.4.1 active movie control object控制項 258
8.4.2 音樂播放器最小化到托盤的實現方法 260
8.5 音樂播放器的界面設計 262
8.5.1 創建播放器工程 262
8.5.2 設計並載入播放器背景圖像 263
8.5.3 定製並添加不規則按鈕 264
8.6 音樂播放器的功能設計與實現 265
8.6.1 設計播放器的屬性變數 265
8.6.2 利用向導添加功能函數 266
8.6.3 實現打開音頻文件的功能 266
8.6.4 實現開始播放音樂的功能 267
8.6.5 實現暫停播放音樂的功能 267
8.6.6 實現停止播放音樂的功能 268
8.6.7 實現循環播放音樂的功能 268
8.6.8 實現最小化播放器的功能 268
8.6.9 實現關閉播放器的功能 269
8.6.10 處理托盤圖標消息 269
8.6.11 實現播放器的拖動功能 270
8.6.12 實現播放器的音量控制功能 270
8.6.13 繪制播放器界面 271
8.6.14 監控音樂的播放器進度 273
8.7 小結 274
第9章 視頻播放器(directshow技術) 275
教學視頻:37分鍾
9.1 視頻播放器簡介 275
9.1.1 視頻播放器功能總述 275
9.1.2 打開視頻文件 276
9.1.3 播放控制功能簡介 276
9.1.4 視頻播放器的技術簡介 277
9.2 擴展cstatic控制項類 277
9.2.1 重寫presubclasswindow()函數 278
9.2.2 重寫defwindowproc()函數 279
9.2.3 實現控制項的拖曳功能 280
9.3 擴展csliderctrl控制項類 281
9.4 directshow在vc++ 6.0下的環境搭建 282
9.4.1 directshow的安裝環境 282
9.4.2 directshow的參考文檔 282
9.4.3 編譯baseclasses 282
9.4.4 配置directshow針對所有項目的環境 283
9.4.5 引入項目所需要的directshow庫文件 284
9.5 directshow簡介 284
9.5.1 directx組件簡介 285
9.5.2 directshow系統組成 285
9.5.3 directshow開發簡單媒體播放器的過程 287
9.6 directshow介面管理類 288
9.6.1 實例化過濾器圖表管理器 289
9.6.2 創建過濾器圖表 290
9.6.3 過濾器圖表中多媒體數據流方法的介面 290
9.6.4 處理過濾器圖表的事件介面 291
9.6.5 視頻特性設置介面 292
9.6.6 音頻流的音量和平衡控制介面 293
9.6.7 播放器窗口的屬性設置介面 294
9.6.8 搜索數據流位置和設置播放速率的介面 295
9.6.9 釋放介面指針 296
9.7 工具條及狀態欄模塊的實現 297
9.7.1 工具條及狀態欄模塊界面的設計與實現 298
9.7.2 添加界面控制項變數 298
9.7.3 綁定過濾器圖表管理器 298
9.7.4 初始化工具欄 299
9.7.5 調整工具欄的位置 300
9.7.6 繪制狀態欄 300
9.7.7 實現進度條功能 302
9.7.8 實現聲音控制功能 303
9.7.9 功能按鈕使能控制 303
9.8 播放器主窗體的設計與實現 303
9.8.1 播放器主窗體的界面設計與實現 304
9.8.2 主窗體初始化模塊的設計與實現 305
9.8.3 播放窗口消息處理模塊的設計與實現 307
9.8.4 菜單消息處理模塊的設計與實現 311
9.8.5 工具欄控制窗體消息處理模塊的實現 318
9.9 小結 318
第10章 區域網聊天工具(socket+tcp+自定義消息+圖像組合框) 319
教學視頻:33分鍾
10.1 區域網聊天工具簡介 319
10.1.1 視頻播放器功能簡介 319
10.1.2 視頻播放器技術簡介 320
10.2 控制項知識 321
10.2.1 點陣圖按鈕cbitmapbutton 321
10.2.2 ip編輯框 325
10.2.3 圖像列表控制項 328
10.2.4 圖像組合框 330
10.3 socket簡介 332
10.4 socket常用數據類型 332
10.4.1 socket類型數據 333
10.4.2 word類型數據 333
10.4.3 wsadata類型及lpwsadata類型 333
10.4.4 sockaddr_in及in_addr類型數據 334
10.4.5 sockaddr類型 334
10.5 socket常用函數 335
10.5.1 初始化socket環境 335
10.5.2 使用socket()函數實現創建套接字功能 335
10.5.3 使用setsockopt()函數實現設置socket的屬性功能 336
10.5.4 使用closesocket()函數實現關閉套接字功能 336
10.5.5 使用bind()函數實現地址綁定功能 336
10.5.6 使用listen()函數實現監聽埠功能 336
10.5.7 使用accept()函數實現接收連接功能 337
10.5.8 使用connect()函數實現連接伺服器功能 337
10.5.9 使用send()函數實現發送數據功能 338
10.5.10 使用rect()函數實現接收數據功能 338
10.6 csocket的封裝 339
10.7 伺服器端模塊的設計與實現 340
10.7.1 伺服器端模塊界面設計與實現 340
10.7.2 伺服器模塊的功能設計與實現 342
10.8 客戶端模塊的設計與實現 347
10.8.1 客戶端界面的設計與實現 348
10.8.2 客戶端功能的設計與實現 349
10.9 小結 353
第11章 截屏工具(動態鏈接庫+鍵盤鉤子+游標捕獲+類橡皮類crecttracker) 354
教學視頻:25分鍾
11.1 截屏工具簡介 354
11.1.1 主界面使用簡介 354
11.1.2 截圖模塊簡介 355
11.2 動態鏈接庫 356
11.2.1 dll技術簡介 356
11.2.2 vc++ 6.0開發dll實例 357
11.3 鉤子技術 359
11.3.1 鉤子技術簡介 359
11.3.2 鍵盤鉤子dll的實現 361
11.3.3 鍵盤鉤子dll的調用 363
11.4 crecttracker技術簡介 364
11.4.1 crecttracker類的常用數據變數 364
11.4.2 crecttracker類的常用成員函數 365
11.4.3 crecttracker類的應用實例 366
11.5 功能控制模塊的設計與實現 369
11.5.1 功能控制模塊的界面設計及實現 369
11.5.2 截屏模塊跳轉功能的實現 372
11.5.3 控制模塊最小化到托盤功能的實現 372
11.5.4 控制模塊在托盤中消息處理功能的實現 373
11.5.5 關閉截屏工具功能的實現 373
11.5.6 捕獲鍵盤鉤子消息功能的實現 374
11.6 截屏主功能模塊的設計與實現 375
11.6.1 信息提示框的設計與實現 375
11.6.2 截圖模塊主窗體的設計與實現 379
11.6.3 截圖功能的設計與實現 384
11.7 小結 389
第12章 掃雷游戲(定時器+gdi+數字時鍾) 390
教學視頻:41分鍾
12.1 掃雷游戲簡介 390
12.1.1 游戲界面簡介 390
12.1.2 游戲規則及方法簡介 391
12.2 游戲系統資源 392
12.2.1 菜單資源 392
12.2.2 點陣圖資源 392
12.2.3 聲音資源 394
12.3 游戲初始化及游戲界面繪制 394
12.3.1 初始化游戲變數 397
12.3.2 初始化游戲 400
12.3.3 繪制游戲界面 401
12.4 游戲功能控制及使用說明的實現 405
12.4.1 游戲菜單選項的功能實現 405
12.4.2 幫助菜單選項的功能實現 408
12.4.3 菜單選項的選中狀態控制函數 409
12.5 游戲與用戶的交互 411
12.5.1 滑鼠單擊事件的處理 411
12.5.2 滑鼠左鍵抬起事件的處理 412
12.5.3 滑鼠左右鍵同時按下事件的處理 415
12.5.4 滑鼠左右鍵同時按下後滑鼠抬起事件的處理 416
12.5.5 滑鼠右鍵按下事件的處理 417
12.5.6 滑鼠右鍵抬起事件的處理 418
12.6 游戲結果處理函數 419
12.7 掃雷英雄榜模塊的實現 421
12.7.1 注冊表簡介 421
12.7.2 vc++對注冊表的操作 421
12.7.3 注冊表在本實例中的應用 423
12.7.4 查詢英雄榜數據 425
12.7.5 英雄榜新紀錄的更新模塊 427
12.8 小結 428
第13章 串口調試器(串口編程+消息+多線程) 429
教學視頻:38分鍾
13.1 串口調試器簡介 429
13.1.1 串口調試器界面簡介 429
13.1.2 串口設置功能簡介 430
13.1.3 數據收發功能簡介 430
13.1.4 情景模式簡介 431
13.1.5 數據保存功能簡介 432
13.2 圖標工具欄 433
13.2.1 載入工具欄圖像資源 433
13.2.2 添加工具欄資源 434
13.2.3 創建工具欄實例 434
13.2.4 為工具欄添加圖像資源關聯 435
13.2.5 為工具欄添加提示信息 435
13.3 分組單選按鈕 437
13.3.1 創建單選按鈕測試工程 437
13.3.2 修改單選按鈕屬性 437
13.3.3 添加單選按鈕關聯變數 438
13.3.4 檢測單選按鈕效果 438
13.4 串口基礎知識 439
13.4.1 串口簡介 439
13.4.2 串口通信簡介 439
13.5 串口通信編程基礎 440
13.5.1 打開串口 441
13.5.2 配置串口 442
13.5.3 讀寫串口 445
13.5.4 關閉串口 448
13.6 自定義串口類 449
13.6.1 構造及析構函數的實現 450
13.6.2 串口打開函數的實現 451
13.6.3 processerrormessage()函數的實現 453
13.6.4 串口線程函數的實現 454
13.6.5 串口線程監控函數的實現 456
13.6.6 串口關閉函數的實現 457
13.6.7 讀取串口數據函數的實現 457
13.6.8 寫串口函數的實現 458
13.6.9 數據發送函數的實現 460
13.7 主窗體的界面設計 460
13.7.1 主界面布局設計 460
13.7.2 主界面菜單的設計 461
13.7.3 組合框顯示控制及初始化 462
13.7.4 單選按鈕的控制及初始化 462
13.7.5 復選框的控制及初始化 463
13.7.6 添加控制項關聯變數 463
13.8 配置窗體的設計與實現 463
13.8.1 配置窗體的界面設計 464
13.8.2 設置串口控制部分的組合框 464
13.8.3 控制項添加關聯變數 468
13.9 主窗體菜單及工具欄模塊的功能實現 469
13.9.1 串口開關控制功能的實現 469
13.9.2 串口的屬性設置 471
13.9.3 將接收到的數據保存到文件中 472
13.9.4 計數清零 473
13.10 接收數據模塊的功能實現 474
13.10.1 接收數據顯示控制模塊 474
13.10.2 接收數據處理模塊 476
13.11 發送數據模塊的功能實現 478
13.11.1 發送數據控制功能的實現 478
13.11.2 發送數據操作的控制功能 479
13.12 小結 482
第14章 列印工具(文檔視圖+設備環境上下文) 483
教學視頻:18分鍾
14.1 列印編程基礎知識 483
14.1.1 通用列印對話框 483
14.1.2 設備環境上下文 485
14.1.3 視圖列印 490
14.1.4 保存和維護列印作業 491
14.2 列印模塊設計及功能展示 493
14.2.1 列印工具模塊功能展示 493
14.2.2 列印工具程序的流程和原理 493
14.3 列印工具 495
14.3.1 創建列印模塊工程 496
14.3.2 創建各個功能類 496
14.3.3 控制列印對話框 497
14.3.4 創建列印視圖 501
14.3.5 創建列印預覽視圖 504
14.3.6 實現列印列表功能 505
14.4 小結 509
第15章 監控技術(進程+opencv) 510
教學視頻:26分鍾
15.1 監控技術背景相關知識 510
15.2 本地監控 510
15.2.1 windows常用系統性能計數器對象簡介 510
15.2.2 使用性能計數器對象 511
15.2.3 本地監控示例(cpu使用率) 512
15.2.4 本地監控示例——各進程cpu佔用率 514
15.3 遠程監控——遠程攝像頭實例 518
15.3.1 遠程監控實現原理與邏輯流程 518
15.3.2 遠程攝像頭——opencv安裝配置 518
15.3.3 封裝好的網路傳輸單元——類介紹 521
15.3.4 封裝好的網路傳輸單元——類使用(服務方) 522
15.3.5 封裝好的網路傳輸單元——類使用(客戶方) 523
15.3.6 遠程攝像頭——創建客戶方工程 524
15.3.7 遠程攝像頭——創建監控方工程 529
15.4 小結 531
第3篇 項目案例實戰
第16章 人事管理系統(odbc+sql server+多線程) 534
教學視頻:57分鍾
16.1 人事管理系統簡介 534
16.1.1 用戶登錄模塊簡介 534
16.1.2 主界面簡介 534
16.1.3 員工管理模塊簡介 535
16.1.4 保險管理模塊簡介 539
16.1.5 合同管理模塊簡介 539
16.1.6 部門管理模塊簡介 540
16.2 實現人事管理系統的關鍵技術 541
16.2.1 odbc簡介 541
16.2.2 創建odbc數據源 541
16.2.3 odbc在vc++中的應用 543
16.3 人事管理系統資料庫設計 547
16.3.1 需求分析 547
16.3.2 概要設計 548
16.3.3 資料庫設計 548
16.4 人事管理系統主界面的設計與實現 552
16.4.1 主界面的設計與實現 552
16.4.2 主界面的功能設計與實現 553
16.5 綜合信息管理模塊設計與實現 555
16.5.1 社保管理模塊的設計與實現 555
16.5.2 合同管理模塊的設計與實現 562
16.5.3 部門管理模塊的設計與實現 566
16.6 員工信息管理模塊設計與實現 566
16.6.1 員工管理主窗體的設計與實現 566
16.6.2 員工信息管理模塊的設計與實現 570
16.6.3 入職管理模塊的設計與實現 582
16.6.4 轉正管理模塊的設計與實現 584
16.6.5 離職管理模塊的設計與實現 587
16.6.6 借調管理及調動管理模塊的設計與實現 591
16.6.7 月末統計管理模塊的設計與實現 593
16.7 小結 597
第17章 電子相冊(雙緩繪圖+gdi+gdi+) 598
教學視頻:61分鍾
17.1 電子相冊簡介 598
17.1.1 相冊的管理模塊 598
17.1.2 新建相冊模塊 599
17.1.3 相冊瀏覽模塊 599
17.1.4 電子相冊的技術簡介 601
17.2 點陣圖按鈕 601
17.2.1 設置按鈕屬性 601
17.2.2 載入按鈕點陣圖資源 601
17.2.3 將點陣圖資源設置為按鈕的背景圖片 602
17.3 仿木質桌面的全屏對話框 602
17.3.1 設置對話框全屏顯示 602
17.3.2 為對話框設計並載入木質效果的背景圖資源 603
17.3.3 編碼實現圖像作為對話框的背景圖像 603
17.4 設計個性滑鼠游標 604
17.4.1 設計並載入游標資源 604
17.4.2 設置滑鼠左鍵按下時的游標 604
17.5 gdi+的基礎知識 605
17.6 vc++與gdi+開發環境的搭建 607
17.6.1 下載解壓gdi+開發包 607
17.6.2 設置include及lib目錄 607
17.6.3 添加相關的宏定義 607
17.6.4 添加相關的庫文件 608
17.6.5 測試gdi+搭建的環境 608
17.7 gdi+與gdi共同實現雙緩沖繪圖 610
17.7.1 重載窗體的onpaint()函數 610
17.7.2 無雙緩沖的效果 610
17.7.3 利用雙緩沖解決閃屏問題 611
17.8 利用gdi+實現翻頁效果 612
17.9 電子相冊的模塊分析 617
17.9.1 相冊管理模塊的設計與實現 617
17.9.2 新建相冊模塊的設計與實現 622
17.9.3 電子相冊瀏覽模塊的設計與實現 625
17.10 小結 640
第18章 超市管理系統(ado+sql+access) 641
教學視頻:60分鍾
18.1 超市管理系統簡介 641
18.1.1 用戶登錄模塊簡介 641
18.1.2 前台銷售模塊簡介 641
18.1.3 後台員工管理模塊簡介 642
18.1.4 後台倉庫管理模塊簡介 643
18.1.5 後台票據管理模塊簡介 643
18.1.6 後台貨物管理模塊簡介 643
18.1.7 後台營業統計管理模塊簡介 644
18.2 實現超市管理系統的關鍵技術 645
18.2.1 ado簡介 645
18.2.2 ado基礎 645
18.2.3 ado在vc++中的應用 646
18.2.4 ado的封裝類 649
18.3 超市管理系統資料庫設計 651
18.3.1 需求分析 652
18.3.2 概要設計 652
18.3.3 資料庫設計 653
18.4 超市管理系統前台銷售模塊設計與實現 655
18.4.1 登錄模塊的界面設計與實現 655
18.4.2 登錄模塊的功能設計與實現 656
18.4.3 銷售模塊的界面設計與實現 659
18.4.4 銷售模塊的功能設計與實現 662
18.5 超市管理系統後台管理模塊設計與實現 670
18.5.1 員工管理模塊的設計與實現 670
18.5.2 倉庫管理模塊的設計與實現 675
18.5.3 票據管理模塊的設計與實現 678
18.5.4 商品管理模塊的設計與實現 679
18.5.5 營業統計模塊的設計與實現 679
18.6 小結 681
Ⅵ 如何在MFC中實現橡皮條技術
響應WM_LBUTTONDOWN,WM_MOVE和WM_LBUTTONUP消息:
OnLButtonDown:做上左鍵按下標記;
OnMouseMove:如果左鍵按下,用異或方式畫矩形虛框;
OnLButtonUp:取消左鍵按下標記。
注意要重載 CRectTracker,試一下:
至少要重載HitTest,TrackRubberBand,Track。。。
Ⅶ QQ截圖的那個矩形
滑鼠拉出來的。。。