亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? cappicture.cpp

?? 使用Visual C++提供的AVICap窗口類進(jìn)行視頻捕獲和播放
?? CPP
字號(hào):
#include <windows.h>                   //說(shuō)明嵌入的頭文件
#include <vfw.h>
#include <commdlg.h>
#include "CapPicture.h"

LRESULT WINAPI MainWndProc( HWND, UINT, WPARAM, LPARAM );   //定義函數(shù)
LRESULT WINAPI SelCapDrvProc( HWND, UINT, WPARAM, LPARAM );
int EnumCapDrv();
VOID APIENTRY HandlePopupMenu(HWND, POINT);
DWORD WINAPI videoThreadProc(LPVOID lParam);

 //說(shuō)明常量
HANDLE ghInstance;               
HWND hwndMain;
HWND hwndVideo;
HWND hwndSelCapDrvDlg;
HWND hwndSelCapDrvDlg_LBox;
HWND hwndExit;
HWND hwndMin;
HWND hwndHelp;
HWND hwndRecord;
HANDLE hVideoThread;
HRGN hRegion1;
CAPDRIVERCAPS CapDrvCaps;

//說(shuō)明變量
bool isRecordFileOpen = false;    
char recordFile[260];
bool isPicFileOpen = false;
char pictureFile[260];
bool isRecording = false;
bool threadEnd = false;

//消息循環(huán)函數(shù):每個(gè)C程序的第一個(gè)進(jìn)入點(diǎn)

int PASCAL WinMain( HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszCmdLine,
                    int nCmdShow )
{
   WNDCLASS wc;
   MSG msg;

   if( !hPrevInstance )
   {
      wc.lpszClassName = "GenericAppClass";
      wc.lpfnWndProc = MainWndProc;                //主線程名稱
      wc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW;   //設(shè)置窗口風(fēng)格
      wc.hInstance = hInstance;
      wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
      wc.hCursor = LoadCursor( NULL, IDC_ARROW );            //設(shè)置光標(biāo)
      wc.hbrBackground = CreateSolidBrush (RGB(156, 150, 104)); //設(shè)置窗口背景顏色
      wc.lpszMenuName = "GenericAppMenu";

      wc.cbClsExtra = 0;
      wc.cbWndExtra = 0;

      RegisterClass( &wc );
   }

   ghInstance = hInstance;

   //創(chuàng)建主窗口

   hwndMain = CreateWindow( "GenericAppClass",
      "Super Video",
      WS_POPUP,
      100,
      100,
      500,
      500,
      NULL,
      NULL,
      hInstance,
      NULL
   );

   ShowWindow( hwndMain, nCmdShow );
   SetWindowRgn(hwndMain,hRegion1,1);//設(shè)置窗口位置和尺寸

   while( GetMessage( &msg, NULL, 0, 0 ) ) {
      TranslateMessage( &msg );

      DispatchMessage( &msg );
   }

   return msg.wParam;
}

//第一個(gè)消息處理函數(shù)
LRESULT CALLBACK MainWndProc( HWND hwndMain, UINT msg, WPARAM wParam,
   LPARAM lParam )
{
   HDC hDC = GetDC(hwndMain);
   RECT rc;           
   POINT pt;  

   switch( msg ) {
	  case WM_LBUTTONDBLCLK://調(diào)整窗口位置?這個(gè)消息是由發(fā)出的?
	  	    SetFocus(hwndMain);
	  	    break;
      case WM_RBUTTONDOWN: //彈出窗口?這個(gè)消息是由發(fā)出的?
            GetClientRect(hwndMain, (LPRECT) &rc); 
            pt.x = LOWORD(lParam); 
            pt.y = HIWORD(lParam); 
            if (PtInRect((LPRECT) &rc, pt)) 
                HandlePopupMenu(hwndMain, pt); 
            break; 
      case WM_PAINT: //調(diào)整窗口顏色
         FrameRgn(hDC,hRegion1,CreateSolidBrush(RGB(0,0,0)),2,2); 
  		 BringWindowToTop(hwndSelCapDrvDlg);//調(diào)整對(duì)話框位置
         return( DefWindowProc( hwndMain, msg, wParam, lParam ));
	  case WM_COMMAND:
	  	 CAPSTATUS CapStatus;
	  	 switch( wParam ) {
 		
		 	case SOURCE://這個(gè)消息是由發(fā)出的?答:右鍵電擊主窗口邊緣區(qū)域后彈出一個(gè)對(duì)話框中第一個(gè)按鈕產(chǎn)生的消息
	  	 	   if(CapDrvCaps.fHasDlgVideoSource)
	  	 	   		capDlgVideoSource(hwndVideo);//設(shè)置視頻采樣參數(shù)
	  	 	   break;
	  	 	case FORMAT://這個(gè)消息是由發(fā)出的?答:右鍵電擊主窗口邊緣區(qū)域后彈出一個(gè)對(duì)話框中第二個(gè)按鈕產(chǎn)生的消息
	  	 	   if(CapDrvCaps.fHasDlgVideoFormat)
	  	 	   {		
	  	 	   		capDlgVideoFormat(hwndMain);//這個(gè)函數(shù)的作用?答:設(shè)置攝像窗口參數(shù)
	  	 	   		capGetStatus(hwndVideo, &CapStatus, sizeof(CAPSTATUS));
	  	 	   		SetWindowPos(hwndVideo, NULL, 0, 0, CapStatus.uiImageWidth,
	  	 	   					CapStatus.uiImageHeight, SWP_NOZORDER | SWP_NOMOVE);
	  	 	   }
	  	 	   break;
	  	 	case DISPLAY://這個(gè)消息是由選擇按鈕發(fā)出的?答:右鍵電擊主窗口邊緣區(qū)域后彈出一個(gè)對(duì)話框中第三個(gè)按鈕產(chǎn)生的消息
	  	 		if (CapDrvCaps.fHasDlgVideoDisplay)
	  	 			capDlgVideoDisplay(hwndVideo);//設(shè)置視頻圖像參數(shù)
	  	 		break;
            case EXIT:
               SendMessage(hwndMain, WM_SYSCOMMAND, SC_CLOSE, 0);//該消息接收者為hwndMain或OS
               break;
            case MINIMIZE:
               SendMessage(hwndMain, WM_SYSCOMMAND, SC_MINIMIZE, 0);//該消息接收者為hwndMain或OS
               break;
            case HELP:
               SendMessage(hwndMain, WM_SYSCOMMAND, SC_CONTEXTHELP, 0); //該消息接收者為hwndMain或OS            
               break;
            case RECORDVIDEO: //這個(gè)消息是由HWNDRecord按鈕發(fā)出的 表示要進(jìn)行視頻捕捉
            if(HIWORD(wParam) == BN_CLICKED && (HWND) lParam == hwndRecord)
            {
			   if (!isRecordFileOpen) //設(shè)置錄像存儲(chǔ)文件并進(jìn)行第一次視頻捕捉
			   {
			   		OPENFILENAME ofn;
			   		ZeroMemory(&ofn, sizeof(OPENFILENAME));
					ofn.lStructSize = sizeof(OPENFILENAME);
					ofn.hwndOwner = hwndMain;
					ofn.lpstrFile = recordFile;
					ofn.nMaxFile = sizeof(recordFile);
					ofn.lpstrFilter = "Video\0*.avi";
					ofn.nFilterIndex = 1;
					ofn.lpstrFileTitle = NULL;
					ofn.nMaxFileTitle = 0;
					ofn.lpstrInitialDir = NULL;
					ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
					if(GetSaveFileName(&ofn) == TRUE)
					{
						strcpy(recordFile, ofn.lpstrFile);
						strcat(recordFile, ".avi");
						isRecordFileOpen = true; 
						DWORD id;
						SECURITY_ATTRIBUTES sa;
						sa.nLength = sizeof(SECURITY_ATTRIBUTES);
						sa.lpSecurityDescriptor = NULL;
						sa.bInheritHandle = TRUE;
						hVideoThread = CreateThread(&sa, (ULONG)0, 
											videoThreadProc, (LPVOID)(ULONG)0, (ULONG)0, &id);//第一次視頻捕捉	
						if(hVideoThread == NULL)
							MessageBox(NULL, "Creation of Record Thread failed!", "Thread", MB_OK | MB_ICONEXCLAMATION);
						
						break;
					}
				}

				if (isRecordFileOpen) 
				{
					if(isRecording)
					{
						threadEnd = true;
						capFileSaveAs(hwndVideo, recordFile);
						SetWindowText(hwndRecord, "開(kāi)始下一次錄像");
						isRecording = false;
						break;
					}
					
					if(!isRecording )
					{
						int a = 0;
						
						MessageBox(hwndMain, "Do you want to write over the open file?",
									"File warning", MB_YESNO | MB_ICONWARNING);
						if (a != IDYES)
						{
							isRecordFileOpen = false;
							SendMessage(hwndMain, WM_COMMAND, MAKEWPARAM(RECORDVIDEO, BN_CLICKED), (LPARAM) hwndRecord);
						}
						
						if (a == IDYES)
						{
							capCaptureSequence(hwndVideo);//輸出文件建立前的圖像捕獲
							capGrabFrame(hwndVideo);
							isRecording = true;//圖像捕獲完成
						}
						
					break;
					}
				}
			}	
         	break;
         }
      break;
     case WM_CREATE:  //需要在窗口上建立按鈕,名稱分別為 EXIT,MINIMIZE,HELP,RECORDVIDEO
		              // 這個(gè)消息由誰(shuí)發(fā)出的?
      
      	RECT helpRect, minRect, exitRect;
      	HRGN helpRgn, minRgn, exitRgn;
        hRegion1 = CreateRoundRectRgn(10,100,500, 500,20,20);   
	  	hwndVideo = capCreateCaptureWindow(
	  					(LPSTR) "My Capture Window",
	  					WS_CHILD | WS_VISIBLE,
	  					150, 150, 300, 280,
	  					(HWND) hwndMain,
	  					(int) 1);
		hwndExit = CreateWindow (
				"button",
				"退出",
				WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_CENTER | BS_VCENTER,
				430, 110, 40, 20,
				hwndMain,
				(HMENU) EXIT,
				(HINSTANCE)ghInstance,
				(LPVOID)NULL);
		hwndMin = CreateWindow (
				"button",
				"隱藏",
				WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_CENTER | BS_VCENTER,
				380, 110, 40, 20,
				hwndMain,
				(HMENU) MINIMIZE,
				(HINSTANCE)ghInstance,
				(LPVOID)NULL); // 330, 110, BUTTONSIZE, BUTTONSIZE, 		
		hwndHelp = CreateWindow (
				"button",
				"?",
				WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_CENTER | BS_VCENTER,
				330, 110, 40, 20, 
				hwndMain, 
				(HMENU) HELP,
				(HINSTANCE)ghInstance,
				(LPVOID)NULL);
		hwndRecord = CreateWindow (
				"button", 
				"開(kāi)始第一次錄像", 
				WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_CENTER | BS_VCENTER, 
				250, 464, 120, 28,
				hwndMain, 
				(HMENU) RECORDVIDEO,
				(HINSTANCE)ghInstance,
				(LPVOID)NULL);				
				
	  	GetClientRect(hwndHelp, &helpRect);
	  	GetClientRect(hwndMin, &minRect);
	  	GetClientRect(hwndExit, &exitRect);
	  		  		  	
	  	helpRgn = CreateEllipticRgnIndirect(&helpRect);
		minRgn = CreateEllipticRgnIndirect(&minRect);
		exitRgn = CreateEllipticRgnIndirect(&exitRect);
	  		  		
	    SetWindowRgn(hwndExit,exitRgn,1);
	    SetWindowRgn(hwndMin,minRgn,1);					  		  		
	    SetWindowRgn(hwndHelp,helpRgn,1);				
	//建立設(shè)備選擇對(duì)話框
		hwndSelCapDrvDlg = CreateDialog((HINSTANCE)ghInstance, 
										MAKEINTRESOURCE( SELCAPDRVDLG  ), 
										0, (DLGPROC)SelCapDrvProc);
		hwndSelCapDrvDlg_LBox = GetDlgItem(hwndSelCapDrvDlg, 
   										   SELCAPDRVDLG_LSTBOX);
	    EnumCapDrv();
      break;
      case WM_DESTROY:     //誰(shuí)發(fā)出該消息?本程序中有一個(gè)視頻選擇窗口幾消息處理函數(shù)未建立
      	 capPreview(hwndVideo, FALSE);
      	 capDriverDisconnect(hwndVideo);
         PostQuitMessage( 0 );
         break;
      default:
         return( DefWindowProc( hwndMain, msg, wParam, lParam ));

   }

   return 0;
}


//第二個(gè)消息處理函數(shù)
LRESULT CALLBACK SelCapDrvProc( HWND hWnd, UINT msg, 
								WPARAM wParam, LPARAM lParam )
{

	switch(msg)
	{
		case WM_INITDIALOG:
		    return TRUE;
		case WM_COMMAND:
			switch ( wParam )
			{
				case SELCAPDRVDLG_BUTTON://SELECTDRVDLG中的按鈕發(fā)出的消息
					int sel = 0;
					SendMessage( hwndSelCapDrvDlg_LBox, LB_GETSELITEMS, 1, sel);
					SendMessage( hwndVideo, WM_CAP_DRIVER_CONNECT, sel, 0L); 
					//將攝像機(jī)與窗口hwndVideo連接,操作系統(tǒng)的線程接收該消息
					SendMessage( hwndSelCapDrvDlg, WM_CLOSE, 0, 0);
				  // 關(guān)閉該對(duì)話窗口
					SendMessage( hwndVideo, WM_CAP_DRIVER_GET_CAPS,
								 sizeof(CAPDRIVERCAPS), (LONG) (LPVOID) &CapDrvCaps);
			        //啟動(dòng)攝像機(jī) 
					capPreviewRate( hwndVideo, 66 );
					//capPreview( hwndVideo, TRUE );
                 //將攝像機(jī)圖像顯示到窗口hwndVideo
			}
			return TRUE;
		case WM_CLOSE:
			DestroyWindow(hwndSelCapDrvDlg);
			//銷毀窗口hwndSelCapDrvDlg
			return TRUE;
	}

	return( 0L );
}

int EnumCapDrv()
{
	char szDeviceName[80];
	char szDeviceVersion[80];
	char item[161];
	int i;

	for (i=0; i<10; i++)
	{
		if ( capGetDriverDescription(i, szDeviceName, sizeof(szDeviceName),
									szDeviceVersion, sizeof(szDeviceVersion)) )
		{
				strcpy(item, szDeviceName);
				strcat(item, " ");
				strcat(item, szDeviceVersion);
				SendMessage(hwndSelCapDrvDlg_LBox, LB_ADDSTRING, 0, 
            			   (LPARAM) item);
            	SendMessage(hwndSelCapDrvDlg_LBox, LB_SETITEMDATA, i, (LPARAM) i);
        }
    }
    
    return 0;
}

VOID APIENTRY HandlePopupMenu(HWND hwnd, POINT pt) 
{ 
    HMENU hmenu;    
    HMENU hmenuTrackPopup;
	hmenu = LoadMenu((HINSTANCE)ghInstance, "PopupMenu"); 
    if (hmenu == NULL) 
        return; 
    hmenuTrackPopup = GetSubMenu(hmenu, 0); 
    ClientToScreen(hwnd, (LPPOINT) &pt); 
    TrackPopupMenu(hmenuTrackPopup, TPM_LEFTALIGN | TPM_LEFTBUTTON, 
        pt.x, pt.y, 0, hwnd, NULL); 
    DestroyMenu(hmenu); 
}

DWORD WINAPI videoThreadProc(LPVOID lParam)
{
	SetWindowText(hwndRecord, "停止本次錄像");
	capCaptureSequence(hwndVideo);
	capGrabFrameNoStop(hwndVideo);
	//capCaptureSingleFrameOpen(hwndVideo);已通過(guò)受動(dòng)打開(kāi)輸出文件
	capCaptureSingleFrame(hwndVideo);
	char *szName="H:/MyFrame.bmp";
	capFileSaveDIB(hwndVideo,szName);//將當(dāng)前frame存儲(chǔ)到位圖文件H:/MyFrame.bmp中
	//capCaptureSingleFrameClose(hwndVideo);
	isRecording = true;
	while (!threadEnd)
		;
	MessageBox(NULL, "關(guān)閉本次錄像線程", "thread", NULL);
	return 0;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美欧美欧美欧美| 自拍偷拍国产精品| 久久九九99视频| 国产精品人妖ts系列视频| 日韩欧美色电影| 国产亚洲一区二区三区| 亚洲国产成人午夜在线一区| 成人欧美一区二区三区小说| 亚洲精品国产第一综合99久久| 中文字幕一区免费在线观看| 一区二区三区国产精华| 日本一不卡视频| 性做久久久久久| 一区二区三区自拍| 免费人成黄页网站在线一区二区 | 亚洲午夜羞羞片| 国产精品蜜臀在线观看| 最新日韩av在线| 亚洲成av人片www| 国产做a爰片久久毛片| 成人av电影观看| 91美女福利视频| 欧美亚洲国产一区二区三区va| 欧美少妇性性性| 欧美精品三级在线观看| 久久综合九色综合欧美98| 中文字幕亚洲一区二区av在线| 成人欧美一区二区三区视频网页| 亚洲黄色小视频| 亚洲国产精品久久久男人的天堂| 日韩国产欧美在线观看| 麻豆一区二区三| 国产成人精品免费| 欧美色中文字幕| 精品少妇一区二区三区日产乱码 | 久久精品国产亚洲一区二区三区| aaa欧美日韩| 日韩亚洲欧美高清| 亚洲人成网站在线| 久久成人精品无人区| 色综合久久天天| 久久综合久久综合亚洲| 中文字幕欧美国产| 秋霞成人午夜伦在线观看| 北岛玲一区二区三区四区| 欧美人成免费网站| 中文子幕无线码一区tr| 日本va欧美va精品发布| 丁香一区二区三区| 欧美一级黄色录像| 夜夜精品视频一区二区| 国产精品69久久久久水密桃 | 中文字幕乱码日本亚洲一区二区 | 国产一区二区三区四区五区入口 | 7777精品伊人久久久大香线蕉的| 久久综合久久综合亚洲| 天天综合日日夜夜精品| 波多野结衣在线一区| 欧美一级xxx| 亚洲视频一二区| 国产在线播放一区二区三区 | 一卡二卡欧美日韩| 成人永久免费视频| 26uuu精品一区二区| 日韩av不卡一区二区| 日本精品裸体写真集在线观看| 国产欧美一区二区三区在线看蜜臀| 日韩av一区二区在线影视| 日本精品裸体写真集在线观看| 国产精品日日摸夜夜摸av| 国产精品18久久久久久久久| 欧美一区二区视频在线观看2020| 国产欧美中文在线| 韩国毛片一区二区三区| 日韩视频免费观看高清完整版 | 欧美一区二区不卡视频| 一区二区激情小说| 色综合久久综合网欧美综合网 | 久久久久久9999| 日本vs亚洲vs韩国一区三区二区| 欧美亚洲另类激情小说| 亚洲精品中文在线影院| 精品一区二区三区香蕉蜜桃| 日韩你懂的在线播放| 亚洲综合激情小说| 欧美视频三区在线播放| 亚洲午夜久久久久久久久电影院| 欧美色男人天堂| 欧美日韩激情在线| 亚洲成人自拍网| 欧美老肥妇做.爰bbww视频| 亚洲一区二区视频在线观看| 欧美日免费三级在线| 亚洲一级不卡视频| 欧美人伦禁忌dvd放荡欲情| 日韩中文字幕麻豆| 欧美刺激脚交jootjob| 精一区二区三区| 久久理论电影网| 丰满白嫩尤物一区二区| 国产精品水嫩水嫩| 97se狠狠狠综合亚洲狠狠| 亚洲人123区| 欧美系列日韩一区| 天天色图综合网| 日韩精品一区二区在线| 久久99精品久久久久久动态图| 精品国偷自产国产一区| 国产999精品久久久久久| 自拍偷拍国产亚洲| 欧美性一二三区| 美女性感视频久久| 久久久99精品免费观看不卡| heyzo一本久久综合| 夜色激情一区二区| 欧美一区二区精品在线| 国模冰冰炮一区二区| 综合久久综合久久| 欧美在线短视频| 蜜桃av一区二区三区电影| 久久亚洲二区三区| 91免费视频网| 日韩和欧美一区二区三区| 欧美大片免费久久精品三p| 懂色av中文字幕一区二区三区| 亚洲人精品一区| 日韩欧美一区二区在线视频| 国产91精品在线观看| 亚洲最新在线观看| 欧美xxxx老人做受| 一本色道亚洲精品aⅴ| 免费人成精品欧美精品| 中文字幕欧美日本乱码一线二线 | 欧美电影免费观看高清完整版在线观看 | 亚洲一级二级在线| 日韩精品一区二区三区视频在线观看 | 最近日韩中文字幕| 欧美伦理视频网站| 国产99久久久精品| 亚洲成人av在线电影| 久久综合狠狠综合久久综合88 | 欧美成人aa大片| 成人avav影音| 青娱乐精品在线视频| 国产精品九色蝌蚪自拍| 欧美区视频在线观看| 成人综合在线观看| 日韩成人dvd| 亚洲精品中文字幕乱码三区| 精品国产成人系列| 欧美性色aⅴ视频一区日韩精品| 国产最新精品精品你懂的| 一区二区欧美国产| 久久久国产精华| 91精品国产黑色紧身裤美女| av动漫一区二区| 韩国精品主播一区二区在线观看| 亚洲影院免费观看| 国产精品免费视频观看| 日韩久久精品一区| 欧美三级在线看| 91亚洲男人天堂| 青青草视频一区| 依依成人综合视频| 久久久精品欧美丰满| 欧美人狂配大交3d怪物一区| 高清shemale亚洲人妖| 麻豆精品在线播放| 亚洲成av人综合在线观看| 一区二区中文字幕在线| 久久一夜天堂av一区二区三区| 欧美精选一区二区| 91蜜桃传媒精品久久久一区二区| 国产成人精品在线看| 久久成人麻豆午夜电影| 亚洲国产精品一区二区www| 亚洲欧洲av色图| 国产精品久久久久婷婷| 精品久久五月天| 欧美色图片你懂的| 91丨九色丨国产丨porny| 国产精品一区一区| 免费观看在线综合色| 国产日产欧产精品推荐色| 久久久久久久久蜜桃| 久久久91精品国产一区二区精品| 精品国产一区二区在线观看| 欧美精品一区二区不卡| 久久亚洲私人国产精品va媚药| 亚洲精品在线三区| 精品国产免费一区二区三区香蕉| 亚洲精品一区二区三区在线观看| 精品捆绑美女sm三区| 国产亚洲一区二区在线观看| 国产欧美在线观看一区| 国产精品视频麻豆| 亚洲免费av在线| 亚洲国产成人tv| 美女视频黄 久久| 国产一区二区主播在线|