lz现在在制作一个程序进行摄像头图像采集和处理的系统,图像的处理对话框作为主对话框,摄像头采集图像使用非模态对话框进行调用,但是现在出现了一个问题是每当我点击运行这个摄像头采集程序时,弹出的对话框不会有任何反应,但是主对话框上却又一部分在显示采集的图像,而且关掉这个图像采集对话框以后,主对话框还会不停的显示。鄙人刚刚接触这个摄像头的采集程序,所以还不是很熟悉,希望大家指教。这个对话框采集数据的类代码如下:BOOL CCAPUTURE::OnInitDialog()
{
CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// TODO: Add extra initialization here

m_bInit=FALSE;
CWnd *pWnd=AfxGetMainWnd()->GetDlgItem(IDC_VIDEO);//得到预示窗口指针
CRect rect;
pWnd->GetWindowRect(&rect); // 得到窗口大小
m_hCapWnd=capCreateCaptureWindow((LPTSTR)TEXT("视频捕捉测试程序"),
WS_CHILD|WS_VISIBLE|WS_EX_CLIENTEDGE|WS_EX_DLGMODALFRAME,
0,0,rect.Width(),rect.Width(),
pWnd->GetSafeHwnd(),0); // 设置预示窗口
ASSERT(m_hCapWnd);

if(capDriverConnect(m_hCapWnd,0))
{
// 连接第0 号驱动器
m_bInit=TRUE;

//得到驱动器的性能
capDriverGetCaps(m_hCapWnd,sizeof(CAPDRIVERCAPS), &m_CapDrvCap);

if(m_CapDrvCap.fCaptureInitialized)
{// 如果初始化成功
capGetStatus(m_hCapWnd, &m_CapStatus,sizeof(m_CapStatus)); // 得到驱动器状态
capPreviewRate(m_hCapWnd,30); // 设置预示帧频
capPreview(m_hCapWnd,TRUE); // 设置预示方式
}
else{// 初始化未成功
AfxMessageBox("视频捕捉卡初始化失败!");
AfxGetMainWnd()->PostMessage(WM_CLOSE);
}
}
else{// 未能连接到驱动器
AfxMessageBox("与视频捕捉卡连接失败!");
}


return TRUE;  // return TRUE  unless you set the focus to a control
}void CCAPUTURE::OnPaint() 
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CCAPUTURE::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}void CCAPUTURE::capture()
{
    SetCursor(LoadCursor(NULL, IDC_ARROW));
capCaptureSequence(m_hCapWnd); // 捕捉到文件
}void CCAPUTURE::OnPhoto() 
{
// TODO: Add your control notification handler code here
char szNewFile[256]="";
GetDlgItem(IDC_EDIT)->GetWindowText(szNewFile,256);
if(strlen(szNewFile)==0)
{
memcpy(szNewFile,"NewFile.bmp",strlen("NewFile.bmp"));
}
capCaptureSingleFrame(m_hCapWnd);
capFileSaveDIB(m_hCapWnd,szNewFile);
}void CCAPUTURE::OnOK() 
{
// TODO: Add extra validation here
CDialog::OnOK();
}

解决方案 »

  1.   

    非模态对话框关闭后,窗口只是隐藏了,并没有销毁
      

  2.   


    那对于这个情况我应该如何更改呢?模态对话框我也试过了,还是不行呢......
      

  3.   

    你就搞一个对话框,两个按钮(一个启动摄像头采集,一个关闭摄像头采集)不就行了现在你的问题是你根本控制不了摄像头采集/关闭,跟模态还是非模态对话框没什么关系吧
      

  4.   


    这样是可以的啊,不过根本问题没有解决,我觉得现在的问题就是我只取得了主窗口的句柄,而没有找到子窗口的,所以才会出现这种情况啊........