⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 camtooldlg.cpp

📁 CAM-TOOL 是高效率高质量的模具制造的最好CAM解决方案。在当今的 Windows 操作环境里
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	// 2 - Calculate margin between property sheet
	// and tab control
	int dcx = rcPSheet.Width() - rcTabCtrl.Width();
	int dcy = rcPSheet.Height() - rcTabCtrl.Height();

	// 3 - Move and resize property sheet window
	// (also moves the tab window because it is a child
	// of the property sheet window)
	pPSheet->MoveWindow( 	rcNewPosition .left, rcNewPosition.top,
							rcNewPosition .Width(), rcNewPosition.Height() );

	// 4 - Resize tab control window to restore
	// right / bottom margins
	pTabCtrl->SetWindowPos(	NULL,
							0, 0,
							rcNewPosition.Width() - dcx,
							rcNewPosition.Height() - dcy, 
							SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE );

	// 5 - Activate each property page to prevent drawing
	// problem
	int nCurrentPage = pPSheet->GetActiveIndex();
	for( int i = 0; i < pPSheet->GetPageCount(); ++i )
	{
		pPSheet->SetActivePage( i );
	}

	pPSheet->SetActivePage( nCurrentPage );
}

void EkPositionEmbeddedPropertySheet(	CWnd* pParent, CPropertySheet* pPSheet,
										UINT nIDPSheetArea )
{
	ASSERT_VALID( pParent );
	ASSERT_VALID( pPSheet );

	// 1 - Retrieve property sheet destination position
	CRect rcNewPosition;
	CWnd* pWndNewArea = pParent->GetDlgItem( nIDPSheetArea );
	if( pWndNewArea == NULL )
	{
		ASSERT( FALSE );	// Invalid nIDPSheetArea
		return;
	}

	pWndNewArea->GetWindowRect( &rcNewPosition );
	pParent->ScreenToClient( &rcNewPosition );

	// 2 - Call overloaded function
	EkPositionEmbeddedPropertySheet( pParent, pPSheet, rcNewPosition );
}

void CCamToolDlg::InitUserInterface()
{
	int len;

	m_capture =		(CButton *)GetDlgItem(IDC_CAPTURE);
	m_connect =		(CButton *)GetDlgItem(IDC_CONNECT);
	m_exit =		(CButton *)GetDlgItem(IDC_OK);
	m_path =		(CEdit   *)GetDlgItem(IDC_PATH);
	m_download =	(CButton *)GetDlgItem(IDC_DOWNLOAD);
	m_zoompos =		(CSliderCtrl*)GetDlgItem(IDC_ZOOMPOS);
	m_apply =		(CButton *)GetDlgItem(IDC_APPLY);

	m_zoompos->SetLineSize(50);
	m_zoompos->SetPageSize(100);
	m_zoompos->SetRange(START_FNUM_ITEM, END_FNUM_ITEM, TRUE);
	m_zoompos->SetPos(START_FNUM_ITEM);

	GetCurrentDirectory(255, ImagePath);
	len = strlen(ImagePath);
	if(ImagePath[len-1] != '\\') strcat(ImagePath, "\\");
	m_path->SetWindowText(ImagePath);

	//Init property sheet
	EkCreateEmbeddedPropertySheet( this, &m_ctrlsheet );
	EkPositionEmbeddedPropertySheet( this, &m_ctrlsheet, IDS_SETTING );
}

void CCamToolDlg::EnableAllUI(BOOL En)
{
	if(m_connect->GetCheck()) {
		m_capture->EnableWindow(En);
	}
	m_connect->EnableWindow(En);
	m_download->EnableWindow(En);
	m_zoompos->EnableWindow(En);
	if(ApplyEn) m_apply->EnableWindow(En);
	m_exit->EnableWindow(En);
	m_ctrlsheet.EnableWindow(En);

//	m_default->EnableWindow(En);
}

BOOL CCamToolDlg::DestroyWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
	CloseGraphInterface();
	if(!method.Open()) {
		method.ViewMode();
		method.Close();
	}
	CoUninitialize();
	return CDialog::DestroyWindow();
}

void CCamToolDlg::OnCapture() 
{
	// TODO: Add your control notification handler code here
	unsigned short PicsNum;

	EnableAllUI(FALSE);

	if( m_connect->GetCheck() ) CloseGraphInterface();

	method.Open();
	PicsNum = method.RemainPics();	//Check remain memory size
	if(PicsNum == 0) {
		Error( TEXT("Memory Full !!!\r\n\r\n")
			   TEXT("Could not capture Still Images.\r\n"));
		method.IdleMode();
		method.ViewMode();
		if(m_connect->GetCheck()) PreviewOn();
#ifdef SET_PROPERTY_AGAIN	//No needed
		method.SetExposureBias(CapImgInfo[CAP_MANUAL_EXPOSURE_BIAS]);
		method.SetWBValue(CapImgInfo[CAP_MANUAL_WB_MODE]);
#endif
		method.Close();
		EnableAllUI(TRUE);
		return;
	}
	method.IdleMode();
	method.ViewMode();
	method.SetManualSaturation(SaturaionValue);
	I43_SetEdgeEnhancement((_I43_UINT3)SharpnessValue);
	if(OBValue) I43_SetMeanBlackNoiseRGB((I43_UINT8)OBValue,(I43_UINT8)OBValue,(I43_UINT8)OBValue);
	method.CaptureImage();
	method.Close();

	DLLastOne = 1;
	ShowCurrentState("Downloading...", 0);
	AfxBeginThread(DownloadThreadProc, GetSafeHwnd(), THREAD_PRIORITY_HIGHEST);
	StartProcedureEvent.SetEvent();
}

void CCamToolDlg::DLLastFinish()
{
	char path[255];
	CString str;

	strcpy(path, DLFilePath);
//	ViewstillImage(path);
	str += path;
	LoadJPG(str);
	DrawPics(0);

	if(!method.Open()) {
		method.IdleMode();
		if(!DLError) method.DeleteLastOne();
		method.Close();
	}
}

void CCamToolDlg::Error( TCHAR * pText )
{
    ::MessageBox( NULL, pText, TEXT("Error!"), MB_OK | MB_TASKMODAL | MB_SETFOREGROUND );
}

void CCamToolDlg::ViewstillImage(TCHAR * pFilename)
{
    // Open the bitmap with the system-default application
    ShellExecute(this->GetSafeHwnd(), TEXT("open\0"), pFilename, 
                 NULL, NULL, SW_SHOWNORMAL);
}

void CCamToolDlg::OnBrowse() 
{
	// TODO: Add your control notification handler code here
	char title[255] = "Image Path";
	int len;

	SHELLFLAGSTATE sfs;
	SHGetSettings(&sfs, SSF_DESKTOPHTML | SSF_SHOWALLOBJECTS | SSF_MAPNETDRVBUTTON | SSF_SHOWATTRIBCOL | SSF_SHOWEXTENSIONS);

	BROWSEINFO lpbi;
	LPITEMIDLIST pidl;

	ZeroMemory(&lpbi, sizeof(BROWSEINFO));
	lpbi.hwndOwner = GetSafeHwnd();
	lpbi.lpszTitle = title;
	lpbi.pszDisplayName = ImagePath;
	lpbi.lpfn = NULL;
	lpbi.pidlRoot = 0;
	lpbi.ulFlags = BIF_EDITBOX | BIF_VALIDATE;
	pidl = SHBrowseForFolder(&lpbi);

	SHGetPathFromIDList(pidl, ImagePath);
	if(ImagePath[0] == NULL) GetCurrentDirectory(255, ImagePath);
	len = strlen(ImagePath);
	if(ImagePath[len-1] != '\\') strcat(ImagePath, "\\");
	
	m_path->SetWindowText(ImagePath);
}

void CCamToolDlg::PreviewOn()
{
	HRESULT hr;
    if(PreviewHwnd)
    {
        // Create DirectShow graph and start capturing video
        hr = CaptureVideo();
	}
	if(FAILED(hr)) {
		CloseGraphInterface();
		Error( TEXT("Failed to initialize Camera!"));
	}
}

void CCamToolDlg::OnConnect() 
{
	// TODO: Add your control notification handler code here
	BOOL flag;

	EnableAllUI(FALSE);

	if(!DefaultFlag)
	{
		flag = InitPropertySheetSetting();
		if(!flag) {
			DefaultFlag = 1;
			method.Open();
			method.TurnLCD(0);
			method.Close();
			ShowCurrentState("Initial the camera successfully.", 0);
		}
		else {
			DefaultFlag = 0;
			ShowCurrentState("No video device was detected on your system.", 1);
			m_connect->SetCheck(FALSE);
			EnableAllUI(TRUE);
			return;
		}
		ApplyEn = 0;
	}

	if(!method.Open()) {
		if(m_connect->GetCheck()) {
			PreviewOn();
			m_connect->SetWindowText("Preview Off");
			m_capture->EnableWindow(TRUE);
		}
		else {
			CloseGraphInterface();
			method.ViewMode();
			m_connect->SetWindowText("Preview On");
			m_capture->EnableWindow(FALSE);
		}
#ifdef SET_PROPERTY_AGAIN	//No needed
		method.SetExposureBias(CapImgInfo[CAP_MANUAL_EXPOSURE_BIAS]);
		method.SetWBValue(CapImgInfo[CAP_MANUAL_WB_MODE]);
#endif
		method.Close();
	}
	else {
		Error( TEXT("No video device was detected on your system.\r\n\r\n")
			   TEXT("Please connect the camera to PC, and press\r\n")
			   TEXT("[Preview On] button again.") );
		m_connect->SetCheck(FALSE);
		ShowCurrentState("No video device was detected on your system.", 1);
	}
	EnableAllUI(TRUE);
}

void CCamToolDlg::OnDefault()
{
}

void CCamToolDlg::OnDownload()
{
	// TODO: Add your control notification handler code here
	char FolderName[255];

	if(method.Open()) {
		Error( TEXT("No video device was detected on your system.\r\n\r\n")
			   TEXT("Please connect the camera to PC, and press\r\n")
			   TEXT("[Preview On] button again.") );
		m_download->SetCheck(FALSE);
		ShowCurrentState("No video device was detected on your system.", 1);
		return;
	}

	EnableAllUI(FALSE);
	BeginWaitCursor();

	if(m_download->GetCheck()) {
		ShowCurrentState("Downloading......", 0);
		if(m_connect->GetCheck()) {
			CloseGraphInterface();
		}
		method.IdleMode();
		DLLastOne = 0;		//Download all images
		m_path->GetWindowText(DLFilePath);
		strcpy(FolderName, DLFilePath);
		ViewstillImage(FolderName);

		AfxBeginThread(DownloadThreadProc, GetSafeHwnd(), THREAD_PRIORITY_HIGHEST);
		StartProcedureEvent.SetEvent();
		m_download->SetWindowText("Break");

		m_download->EnableWindow(TRUE);
	}
	else {
		ShowCurrentState("Download interrupting......", 0);
		EndProcedureEvent.SetEvent();
	}

}

void CCamToolDlg::OnDownloadFinish()
{
	CProgressCtrl *progress;
	CStatic *percentage;
	CWnd *wnd;
//	unsigned short Version;
	unsigned long CapNum;

	wnd = AfxGetMainWnd();
	progress = (CProgressCtrl*)wnd->GetDlgItem(IDC_PROGRESS);
	percentage = (CStatic*)wnd->GetDlgItem(IDC_PERCENTAGE);

	if(DLLastOne) DLLastFinish();

	method.Open();

	CapNum = method.GetCaptureCount();
	sprintf(InfoStr[1],"%d", CapNum);
	m_ctrlsheet.m_infoctrl.ReDrawItem(InfoStr);

	method.IdleMode();
	method.ViewMode();

	if(m_connect->GetCheck()) {
		PreviewOn();
#ifdef SET_PROPERTY_AGAIN	//No needed
		method.SetExposureBias(CapImgInfo[CAP_MANUAL_EXPOSURE_BIAS]);
		method.SetWBValue(CapImgInfo[CAP_MANUAL_WB_MODE]);
#endif
	}
	method.Close();

	m_download->SetWindowText("Download");
	m_download->SetCheck(FALSE);

	percentage->SetWindowText("100%");
	progress->SetRange(0,1);
	progress->SetPos(1);

	if(DLError) ShowCurrentState("Download fail!!.", 1);
	else ShowCurrentState("Download finished.", 0);
	EnableAllUI(TRUE);
}

void CCamToolDlg::OnApply() 
{
	// TODO: Add your control notification handler code here

	EnableAllUI(FALSE);
	ShowCurrentState("Apply the capture setting to camera..", 0);

	if( m_connect->GetCheck() ) CloseGraphInterface();

	if(!method.Open()) {
		method.SaveCameraDefaultValue();
		method.DoFlashCharge(CapImgInfo[CAP_MANUAL_FLASH_MODE]);
		method.Close();
	}
	else {
		Error( TEXT("No video device was detected on your system.\r\n\r\n")
			   TEXT("Please connect the camera to PC, and press\r\n")
			   TEXT("[Preview On] button again.") );
		ShowCurrentState("No video device was detected on your system.", 1);
		EnableAllUI(TRUE);
		return;
	}

	method.Open();
	if( m_connect->GetCheck())
	{
		PreviewOn();
#ifdef SET_PROPERTY_AGAIN	//No needed
		method.SetExposureBias(CapImgInfo[CAP_MANUAL_EXPOSURE_BIAS]);
		method.SetWBValue(CapImgInfo[CAP_MANUAL_WB_MODE]);
#endif
	}
	method.Close();

	ApplyEn = 0;
	ShowCurrentState("The setting has applied.", 0);
	EnableAllUI(TRUE);
}

void CCamToolDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	char str[80];
	static BOOL flag = 0;
	CStatic *s_fnum;
	unsigned short FNum;

	s_fnum = (CStatic *) GetDlgItem(IDS_FNUM);

	if(nSBCode == TB_ENDTRACK && !flag) {
		flag = 1;
		EnableAllUI(FALSE);
		if(!method.Open()) {
			ShowCurrentState("Zoom position changing...", 0);

			if(m_connect->GetCheck()) CloseGraphInterface();

			FNum = method.ZoomAction(method.FnoToZPos(m_zoompos->GetPos()));

			sprintf(str,"f%2.1f", FNum /1000.0);
			s_fnum->SetWindowText(str);

			if(m_connect->GetCheck())
			{
				method.IdleMode();
				method.ViewMode();
				PreviewOn();
#ifdef SET_PROPERTY_AGAIN	//No needed
				method.SetExposureBias(CapImgInfo[CAP_MANUAL_EXPOSURE_BIAS]);
				method.SetWBValue(CapImgInfo[CAP_MANUAL_WB_MODE]);
#endif	
			}
			ShowCurrentState("Zoom action finished.", 0);
		}
		method.Close();
		EnableAllUI(TRUE);
		flag = 0;
	}
	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

HBRUSH CCamToolDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO: Change any attributes of the DC here
	if(nCtlColor == CTLCOLOR_STATIC) 
	{
		if(pWnd->GetDlgCtrlID() == IDS_STATE) {
			if(MessageState) pDC->SetTextColor(RGB(255,0,0));
			else pDC->SetTextColor(RGB(0,0,255));
		}
	}
	// TODO: Return a different brush if the default is not desired
	return hbr;
}

void CCamToolDlg::ShowCurrentState(char *str, BOOL flag)
{
	MessageState = flag;
	GetDlgItem(IDS_STATE)->SetWindowText(str);
}

void CCamToolDlg::Msg(char *szFormat, ...)
{
    TCHAR szBuffer[512];

    va_list pArgs;
    va_start(pArgs, szFormat);
    vsprintf(szBuffer, szFormat, pArgs);
    va_end(pArgs);

    MessageBox(szBuffer, "PlayCap Message", MB_OK | MB_ICONERROR);
}

void CCamToolDlg::ResizeVideoWindow()
{
    RECT rc;

    // Make the preview video fill our window
    ::GetClientRect(PreviewHwnd, &rc);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -