本人利用CCD相机的SDK开发了一个图像采集软件,其中设计了一个改变相机显示参数的属性表单,供用户进行相应设置。该对话框包含2个属性页,其中一个属性页中设计了一个改变相机timebase参数的一个组合框,风格为下拉列表式,当用户点击改变,程序响应CBN_SELCHANGE,在其中添加代码,如下:
void CPropPage2::OnSelchangeTimeBase() 
{
        // TODO: Add your control notification handler code here
UINT n;
n=((CComboBox*)GetDlgItem(IDC_TimeBase))->GetCurSel();
        UCC_SetFeatureValue(CameraID,E_FEAT_TIMEBASE,n);   //相机api函数,改变相机的timebase值
}
    设置好后,点击开始显示图像按钮,预期的话就可以看到显示前后显示效果的改变。但郁闷的是在实际运行中,我选择好一个timebase好后,点击开始显示,图像效果并没有变化,而当我暂停显示,再次进入到属性页,对以上同一个timebase值进行重复选择后,点击图像显示,这时图像效果改变了。
    后来我进行了调试,在OnSelchangeTimeBase这个函数中增加断点,这时我发现当设置好后,进入该函数,运行完毕,点击图像显示,这时效果去发生了。
    现在真有点搞不懂,为什么实际运行时非要设置2次才能产生效果,而调试时却运行很正常,请大家给点意见啊,帮忙帮忙!

解决方案 »

  1.   

    n只是个局部变量,首先获取用户的选择赋给它,然后通过它给相机的timebase(API函数中即E_FEAT_TIMEBASE)赋值,最终改变的是相机状态寄存器中的值,应该对整个程序没有影响把。调试的时候我发觉都是对的,用户做选择,n相应改变,同时相机的timebase值也被赋予该值,当选择开始显示图像时,效果发生了,但搞不懂的是实际运行时,非要重复对同一个值设置2次,显示效果才发生改变,这到底是为什么我实在搞不懂。难道vc调试和运行时有什么区别吗?