?? camtooldlg.cpp
字號(hào):
// 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, "\\");
}
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);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -