www.pudn.com > colortracker.rar > MPColorTrackerApp.cpp


// MPColorTrackerApp.cpp : Defines the entry point for the application. 
// 
 
#include "stdafx.h" 
#include "resource.h" 
#include  
#include  
#include  
#include "DirectShow/MPDirectShow.h" 
#include  
 
#define MAX_LOADSTRING 100 
 
// Global Variables: 
HINSTANCE hInst;								// current instance 
TCHAR szTitle[MAX_LOADSTRING];								// The title bar text 
TCHAR szWindowClass[MAX_LOADSTRING];								// The title bar text 
 
// Foward declarations of functions included in this code module: 
ATOM				MyRegisterClass(HINSTANCE hInstance); 
BOOL				InitInstance(HINSTANCE, int); 
LRESULT CALLBACK	WndProc(HWND, UINT, WPARAM, LPARAM); 
LRESULT CALLBACK	About(HWND, UINT, WPARAM, LPARAM); 
 
// 
//HWND WINAPI CreateTrackbar( 
//	 HWND hwndDlg, 
//	 UINT iMin, 
//	 UINT iMax, 
//	 UINT iSelMin, 
//	 UINT iSelMAx, 
//	 UINT iXPosition, 
//	 UINT iYPosition, 
//	 UINT iLength); 
 
//LRESULT CALLBACK DlgProc(HWND hGlg, UINT message, WPARAM wParam, LPARAM lParam); 
#define WM_GRAPHNOTIFY   WM_APP + 1 
 
MPDirectShow m_directShow; 
 
//return from callback 'cause graph is stopping 
BYTE bReturnImmediatelyFromCallback = 0; 
 
//////////////////// 
 
// ================================================================ 
 
int APIENTRY WinMain(HINSTANCE hInstance, 
                     HINSTANCE hPrevInstance, 
                     LPSTR     lpCmdLine, 
                     int       nCmdShow) 
{ 
 	// TODO: Place code here. 
	MSG msg; 
	HACCEL hAccelTable; 
 
	// Initialize global strings 
	LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); 
	LoadString(hInstance, IDC_MPCOLORTRACKERAPP, szWindowClass, MAX_LOADSTRING); 
	MyRegisterClass(hInstance); 
 
	// Perform application initialization: 
	if (!InitInstance (hInstance, nCmdShow)) 
	{ 
		return FALSE; 
	} 
 
	hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_MPCOLORTRACKERAPP); 
 
	// Main message loop: 
	while (GetMessage(&msg, NULL, 0, 0)) 
	{ 
		if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
		{ 
			TranslateMessage(&msg); 
			DispatchMessage(&msg); 
		} 
	} 
 
	return msg.wParam; 
} 
 
// ================================================================ 
 
// 
//  FUNCTION: MyRegisterClass() 
// 
//  PURPOSE: Registers the window class. 
// 
//  COMMENTS: 
// 
//    This function and its usage is only necessary if you want this code 
//    to be compatible with Win32 systems prior to the 'RegisterClassEx' 
//    function that was added to Windows 95. It is important to call this function 
//    so that the application will get 'well formed' small icons associated 
//    with it. 
// 
ATOM MyRegisterClass(HINSTANCE hInstance) 
{ 
	WNDCLASSEX wcex; 
 
	wcex.cbSize = sizeof(WNDCLASSEX); 
 
	wcex.style			= CS_HREDRAW | CS_VREDRAW; 
	wcex.lpfnWndProc	= (WNDPROC)WndProc; 
	wcex.cbClsExtra		= 0; 
	wcex.cbWndExtra		= 0; 
	wcex.hInstance		= hInstance; 
	wcex.hIcon			= LoadIcon(hInstance, (LPCTSTR)IDI_MPCOLORTRACKERAPP); 
	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW); 
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1); 
	wcex.lpszMenuName	= (LPCSTR)IDC_MPCOLORTRACKERAPP; 
	wcex.lpszClassName	= szWindowClass; 
	wcex.hIconSm		= LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); 
 
	return RegisterClassEx(&wcex); 
} 
 
// ================================================================ 
 
// 
//   FUNCTION: InitInstance(HANDLE, int) 
// 
//   PURPOSE: Saves instance handle and creates main window 
// 
//   COMMENTS: 
// 
//        In this function, we save the instance handle in a global variable and 
//        create and display the main program window. 
// 
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) 
{ 
   HWND hWnd; 
 
   hInst = hInstance; // Store instance handle in our global variable 
 
   hWnd = CreateWindow(szWindowClass, szTitle, WS_DLGFRAME|WS_SYSMENU|WS_MINIMIZEBOX, 
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); 
 
   if (!hWnd) 
   { 
      return FALSE; 
   } 
	 m_directShow.SetProject(ds_colorTracker);	  
	 m_directShow.SetInput(320, 240); 
	 m_directShow.RunDirectShow(hWnd); 
   SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL-1); 
 
   ShowWindow(hWnd, nCmdShow); 
   UpdateWindow(hWnd); 
 
   return TRUE; 
} 
 
// ================================================================ 
 
// 
//  FUNCTION: WndProc(HWND, unsigned, WORD, LONG) 
// 
//  PURPOSE:  Processes messages for the main window. 
// 
//  WM_COMMAND	- process the application menu 
//  WM_PAINT	- Paint the main window 
//  WM_DESTROY	- post a quit message and return 
// 
// 
void HandleEvent() 
{ 
 
} 
 
// ================================================================ 
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
	int wmId, wmEvent; 
//	PAINTSTRUCT ps; 
//	HDC hdc; 
	TCHAR szHello[MAX_LOADSTRING]; 
	LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING); 
 
	switch (message) 
	{ 
		case WM_GRAPHNOTIFY: 
		    HandleEvent(); 
			break; 
		case WM_COMMAND: 
			wmId    = LOWORD(wParam); 
			wmEvent = HIWORD(wParam); 
			// Parse the menu selections: 
			switch (wmId) 
			{ 
				case IDM_ABOUT: 
				   DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); 
				   break; 
				case IDM_EXIT: 
 
				   DestroyWindow(hWnd); 
				   break; 
				default: 
				   return DefWindowProc(hWnd, message, wParam, lParam); 
			} 
			break; 
 
 
		case WM_PAINT: 
//			hdc = BeginPaint(hWnd, &ps); 
//			// TODO: Add any drawing code here... 
//			RECT rt; 
//			GetClientRect(hWnd, &rt); 
//			DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER); 
//			EndPaint(hWnd, &ps); 
			break; 
//		case WM_SIZE: 
//		{ 
//			int nWidth = LOWORD(lParam);  // width of client area 
//			int nHeight = HIWORD(lParam); // height of client area 
//			switch(wParam) 
//			{ 
//			case SIZE_MINIMIZED: 
//				pWindow->put_Visible(OAFALSE); 
//				break; 
//			default: 
//				pWindow->put_Visible(OATRUE); 
//				break; 
//			} 
//			break; 
//		} 
		case WM_DESTROY: 
			PostQuitMessage(0); 
			break; 
		default: 
			return DefWindowProc(hWnd, message, wParam, lParam); 
   } 
   return 0; 
} 
 
// ================================================================ 
 
// Mesage handler for about box. 
LRESULT CALLBACK About(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
	switch (message) 
	{ 
		case WM_INITDIALOG: 
				return TRUE; 
 
		case WM_COMMAND: 
			if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
			{ 
				EndDialog(hWnd, LOWORD(wParam)); 
				return TRUE; 
			} 
			break; 
	} 
    return FALSE; 
} 
 
// ================================================================ 
 
void Msg(TCHAR *szFormat, ...) 
{ 
    TCHAR szBuffer[1024];  // Large buffer for very long filenames (like HTTP) 
 
    // Format the input string 
 
	va_list pArgs; 
    va_start(pArgs, szFormat); 
    _vstprintf(szBuffer, szFormat, pArgs); 
    va_end(pArgs); 
 
    // Display a message box with the formatted string 
    MessageBox(NULL, szBuffer, TEXT("First Grab Sample"), MB_OK); 
} 
 
// ================================================================