① vc6怎樣用DirectShow編寫的攝像頭視頻採集程序
大概就是create一個filter graph
然後枚舉你的視頻捕捉設備,選擇你想要的設備獲取IBaseFilter介面,然後添加到graph
接下來就看你的需求了,如果只是播放,就添加一個render filter然後連接並運行graph
如果你想獲得具體的視頻數據,那麼需要你自己實現一個render filter,從input pin上獲取數據,在filter里處理 或者開放一個介面提供給應用程序
有很多現成的例子
② 請問如何使用VC++獲得從圖像採集卡(連著攝像頭)得來的圖像
現在在vc上採集視頻常用的方法有三:vfw,directshow,opencv
你是要進行圖像處理的話推薦opencv(具體參考:於仕琪,opencv教程基礎篇中的例3-6,稍作修改,估計就能用於你的工程)
下面貼出我自己編的一個小工程:如有疑問,E-mail:[email protected]
進行opencv的預備操作你要看那本書和逛opencv中文網
http://www.opencv.org.cn/index.php/%E9%A6%96%E9%A1%B5
如有問題可以和我討論(我也是菜鳥,剛為解決了這個問題竊喜不已)。
1.新建mfc對話框工程,在其中添加一個picture控制項,除了ID以外什麼都不用改
2.在對話框頭文件(沒有Dlg那個)中添加(最好是在「#include "resource.h" // main symbols之後」):
#include "cxcore.h"
#include "cvcam.h"
#include "windows.h"
#include "cv.h"
#include "highgui.h"
3.在工程-》設置-》選擇所有配置-》link(連接)-》對象/庫模塊-》中添加:
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib
4.在需要觸發攝像頭顯示的地方添加:
void CVideomfcDlg::OnButton1()
{
// TODO: Add your control notification handler code here
int ncams = cvcamGetCamerasCount( );//返回可以訪問的攝像頭數目
HWND MyWin=::GetDlgItem(m_hWnd,IDC_VIDEO); //獲得控制項句柄(IDC_VIDEO就是圖片控制項)
cvcamSetProperty(0, CVCAM_PROP_ENABLE, CVCAMTRUE); //選擇第一個攝像頭
int width=240;
int height=240;
cvcamSetProperty(0,CVCAM_PROP_WINDOW, &MyWin); // Selects a window for
cvcamSetProperty(0,CVCAM_RNDWIDTH, &width);
cvcamSetProperty(0,CVCAM_RNDHEIGHT, &height);
cvcamSetProperty(0, CVCAM_PROP_CALLBACK, callback1);
//回調函數將處理每一幀
cvcamInit( );
cvcamStart( );
}
5.改變顯示的圖像序列大小,在窗口屬性設定了以後,添加如下代碼:
int width=320; //這個就是需要顯示的窗口大小
int height=240; //根據自己需要選擇
cvcamSetProperty(0,CVCAM_RNDWIDTH, &width);
cvcamSetProperty(0,CVCAM_RNDHEIGHT, &height);
6.在對話框類中添加callback成員函數(注意,在添加函數的時候,一定要選擇static,不選的話你就自己郁悶去吧,反正我是為了這個郁悶了2個禮拜)
void CVideomfcDlg::callback1(IplImage *image)
{
IplImage* image1 = image;
int i,j;
assert (image);
//獲取當前系統時間
SYSTEMTIME st2={0};
GetLocalTime(&st2);
char sss[18]={'C',':','\\','\\','1','\\','\\','1','1','1','1','1','1','.','j','p','g'}; //這個是用來存儲所要保存的圖片名的,用的是一個笨辦法,先定義,再修改其中的數組值。
sss[7]=st2.wHour/10+48; //獲取系統當前小時
sss[8]=st2.wHour%10+48;
sss[9]=st2.wMinute/10+48; //獲取系統當前分鍾
sss[10]=st2.wMinute%10+48;
sss[11]=st2.wSecond/10+48; //獲取系統當前秒
sss[12]=st2.wSecond%10+48;
cvSaveImage(sss,image1); //使用系統當前時間為名稱(XXXXXX.jpg)存儲圖片
}
ps:你還需要在c盤根目錄下建立一個叫1的文件夾保存圖片。
祝你成功!
③ VC++中使用DirectShow播發一個視頻文件,顯示兩個屏幕
你還是多懸賞點分吧 可能會有人幫你做
④ 誰能教我配置一下如何在VC6.0中的DirectShow
重新找個教程,網路文庫裡面就有.你這個教程不太實用
⑤ 如何設計自定義的DIrectShow transform filter
對於DIrectShow的初學者而言,最大的困難莫過於嘗試設計自定義的filter。
設計自定義的transform filter是困難的
因為 首先filter是一種dll (後綴名為.ax)而編寫dll工程需要一定的VC基礎 所以建議先補充一點dll的知識
其次 dll的注冊,GUID的生成和工程的配置都很麻煩。
再次 網上缺乏現成的transform filter的例子。DirectShow給的源碼比如NULLINPLACE 和CONTRAST都太復雜,都帶有對話框和屬性頁,不適合初學者,而且這些例子 沒有一個涉及到圖像格式的轉換,而transform filter最大的公用就是媒體類型的轉換,因此這些例子不適用
作為一個初學者,我深深受到這些問題的困擾,經過刻苦鑽研終於走出了這個泥潭,豁然開朗。於是把它記錄下來,希望可以對其他人有幫助,也作為對08年的一個小結。
我的例子是 設計一個 transform filter 把 YUY2 16bit 的媒體轉化為RGB24 24bit的類型。
原因是我的攝像頭只支持YUY2 16bit這種格式, 我想得到點陣圖。。順便學習一下Filter的設計
以下為具體步驟:
一 配置開發環境
1. VC中在Tools->Options->Directories 設置好DirectX SDK的頭文件和庫文件路徑
2. 編譯了基類源碼,生成strmbasd.lib (debug版), strmbase.lib(release版)
3. VC向導新建一個win32 DLL(empty)工程
4. Setting->Link->Output file name: YUV2RGBfilter.ax
5. Setting->Link加入strmbasd.lib winmm.lib quartz.lib vfw32.lib (注意路徑)
6. 定義一個同名.def文件,加入到工程,內容如下:
LIBRARY YUV2RGBfilter.ax
EXPORTS
DllMain PRIVATE
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
7.建立一個類 YUV2RGBfilter 建立他的cpp文件和h文件
8. 在YUV2RGBfilter.cpp中定義DLL的入口函數及注冊 放在cpp文件的最後
//
// DllEntryPoint
//
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
BOOL APIENTRY DllMain(HANDLE hMole,
DWORD dwReason,
LPVOID lpReserved)
{
return DllEntryPoint((HINSTANCE)(hMole), dwReason, lpReserved);
}
////////////////////////////////////////////////////////////////////////
//
// Exported entry points for registration and unregistration
// (in this case they only call through to default implementations).
//
////////////////////////////////////////////////////////////////////////
STDAPI DllRegisterServer()
{
return AMovieDllRegisterServer2( TRUE );
}
STDAPI DllUnregisterServer()
{
return AMovieDllRegisterServer2( FALSE );
}
9. cpp文件中要包含的頭文件
#include <streams.h>
#include <windows.h>
#include <initguid.h>
#include <olectl.h>
#if (1100 > _MSC_VER)
#include <olectlid.h>
#endif
#include "Y2Ruids.h" // our own public guids
#include "YUV2RGBfilter.h"
二 開發Filter
1. 生成GUID( 命令行模式下運行guidgen工具) 為他建立一個文件Y2Ruids.h 單獨引用
#include <initguid.h>
// YUV2toRGB24 Filter Object
// {F91FC8FD-B1A6-49b0-A308-D6EDEAF405DA}
DEFINE_GUID(CLSID_YUV2toRGB24,
0xf91fc8fd, 0xb1a6, 0x49b0, 0xa3, 0x8, 0xd6, 0xed, 0xea, 0xf4, 0x5, 0xda);
2. 構造CYUV2RGBfilter類 繼承自CTransformFilter 寫在TransformFilter.h中
// ----------------------------------------------------------------------------
// Class definitions of CYUV2RGBfilter
// ----------------------------------------------------------------------------
//
//
class CYUV2RGBfilter : public CTransformFilter
{
public:
static CUnknown * WINAPI CreateInstance(LPUNKNOWN punk, HRESULT *phr);
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void ** ppv);
DECLARE_IUNKNOWN;
// override pure virtual function
HRESULT CheckInputType(const CMediaType *mtIn);
HRESULT CheckTransform(const CMediaType *mtIn, const CMediaType *mtOut);
HRESULT DecideBufferSize(IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *pProp);
HRESULT GetMediaType(int iPosition, CMediaType *pMediaType);
HRESULT Transform(IMediaSample *pIn, IMediaSample *pOut);
private:
//Constructor
CYUV2RGBfilter(TCHAR *tszName, LPUNKNOWN punk, HRESULT *phr);
// member function
VOID ChangeFormat(AM_MEDIA_TYPE* pAdjustedType);
DWORD ConvertYUV2toRGB(BYTE* yuv, BYTE* rgb, DWORD dsize);
// member variable
const long m_lBufferRequest;
CCritSec m_Y2RLock; // To serialise access.
};
3. 按格式改寫構造函數
//
// CNullInPlace::Constructor
//
CYUV2RGBfilter::CYUV2RGBfilter(TCHAR *tszName,LPUNKNOWN punk,HRESULT *phr) :
CTransformFilter(tszName, punk, CLSID_YUV2toRGB24),
m_lBufferRequest(1)
{
ASSERT(tszName);
ASSERT(phr);
} // CYUV2RGBfilter
4. 改寫CTransformFilter五個純虛函數(最重要的地方)
HRESULT CheckInputType(const CMediaType *mtIn);
HRESULT CheckTransform(const CMediaType *mtIn, const CMediaType *mtOut);
HRESULT DecideBufferSize(IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *pProp);
HRESULT GetMediaType(int iPosition, CMediaType *pMediaType);
HRESULT Transform(IMediaSample *pIn, IMediaSample *pOut);
5. 設計自己的私有函數 完成一定的功能
6. 注冊Filter信息
// 注冊信息
//setup data
const AMOVIESETUP_MEDIATYPE
sudPinTypes = { &MEDIATYPE_Video // clsMajorType
, &MEDIASUBTYPE_NULL } ; // clsMinorType
const AMOVIESETUP_PIN
psudPins[] = { { L"Input" // strName
, FALSE // bRendered
, FALSE // bOutput
, FALSE // bZero
, FALSE // bMany
, &CLSID_NULL // clsConnectsToFilter
, L"Output" // strConnectsToPin
, 1 // nTypes
, &sudPinTypes } // lpTypes
, { L"Output" // strName
, FALSE // bRendered
, TRUE // bOutput
, FALSE // bZero
, FALSE // bMany
, &CLSID_NULL // clsConnectsToFilter
, L"Input" // strConnectsToPin
, 1 // nTypes
, &sudPinTypes } }; // lpTypes
⑥ win10中vc2010如何配置圖形庫
通常,在使用VC開發圖像時,C/C++的默認庫將不能提供足夠的支持。所以要使用附加的庫來實現圖像的開發工作。通常,這樣的庫包括GDI,GDI+,OpenGL等。本文實現了在VC2010上配置GDI+(圖像庫)環境的方法。
1. 新建一個Win32工程,在這里選擇vc默認的非空白項目。
2. 在頭文件「stdafx.h」最後末尾處中添加:
#include<gidplus.h>
using namespacegdiplus;
#pragmacomment(lib, "gdiplus.lib")
3. 如果直接這樣用的話,編譯就可能會出現錯誤,有上百個錯誤,而且錯誤顯示是在系統文件裡面。
4. 在網上查找原因,有兩種方案解決這個問題: 1)把#define WIN32_LEAN_AND_MEAN宏注釋了,這樣再加入GDI+相關的東西,就不會出錯。2)在stdafx.h頭文件里加入#include <comdef.h>,這樣也可以解決這個問題。
5. 我在自己的工程上實驗了一下,發現在stdafx.h上更本找不到宏定義,所以也不存在注釋的可能。然而,使用第二中情況,也遇到了問題。在頭文件末尾添加<comdef.h>並不能改變編譯錯誤。
6. 最後嘗試變換了添加順序接解決了這個問題。現頭文件如下:
#pragma once
#include "targetver.h"
#include <comdef.h>
#include <stdio.h>
#include <tchar.h>
#define ULONG_PTR ULONG
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment(lib,"gdiplus.lib")
// TODO: 在此處引用程序需要的其他頭文件
7. 除了用以上的方法連接gdiplus.lib之外,還可以在Project->Settings->Link->Object/library moles中輸入gdiplus.lib(若有多個庫,可用空格隔開,但GDI+只有一個庫)。這種方法,可不用在StdAfx.h中輸入#pragma comment。
⑦ 想要在VC++中播放本地TS流視頻文件,可以用directshow,也可以調用其它解碼器的sdk,求指點
1如果僅是播放,可以使用ActiveX播放器控制項,簡單
2用directshow,要復雜很多,也可以實現
3用FFMPEG。可參考《FFMPEG視音頻編解碼零基礎學習方法》
⑧ 在vc6.0下如何配置directx
dll目錄不用你配置的,編譯器自己找dll文件..
include庫直接配置到你安裝DX的目錄的Include目錄上.
如果你找不到這個目錄,有可能你安裝的是runtime,如果開發程序要安裝SDK.
還要配置一個lib 文件目錄,也直接配置到DX安裝目錄下的lib文件夾上就行了..
⑨ 我下了vc++6.0和direct sdk 怎麼用directshow實現視頻實時採集,能不能說詳細點,我兩方面都剛學
s a
⑩ 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