设为首页 加入收藏

TOP

1.5 主窗体设计(3)
2013-10-07 00:19:02 来源: 作者: 【 】 浏览:58
Tags:1.5 窗体 设计

1.5  主窗体设计(3)

(17)向CPanel类中添加RefreshWnd方法,用于刷新预览窗口。代码如下:

 void CPanel::RefreshWnd(int preIndex,int curIndex)
{
//刷新预览窗口
m_pList[preIndex].Invalidate();
m_pList[curIndex].Invalidate();
}
(18)向CPanel类中添加ShowOnly方法,用于显示预览窗口。代码如下:
void CPanel::ShowOnly(int Index)
{
for (int i =0; i<m_Num; i++)
{
if (i==Index)
{
m_pList[i].ShowWindow(SW_SHOW);   //显示预览窗口
}
else
{
m_pList[i].ShowWindow(SW_HIDE);   //隐藏预览窗口
}
}
}
(19)处理CPanel类的WM_SIZE消息,在窗口大小改变时,调整预览窗口的大小。代码如下:
void CPanel::OnSize(UINT nType, int cx, int cy) 
{
CDialog::OnSize(nType, cx, cy);
if (m_Num>0)           //创建了预览窗口
{
CRect rc;
GetClientRect(rc);         //获得父窗口的客户区域
m_PreRC = rc;
m_PreRC.DeflateRect(m_Div,m_Div,m_Div,m_Div);
//预览窗口的宽度
int width  = (rc.Width()-(m_UnitNum+1)*m_Div)/m_UnitNum;
//预览窗口的高度
int height = (rc.Height()-(m_UnitNum+1)*m_Div)/m_UnitNum;
//计算预览窗口的位置
for (int i =0; i<m_Num; i++)
{
int row = i / uNum + 1;           //计算预览窗口的行位置
int col = i % uNum + 1;           //计算预览窗口的列位置
int x = col*m_Div+(col-1)*width;     //计算预览窗口的左上角横坐标
int y = row*m_Div+(row-1)*height;    //计算预览窗口的左上角纵坐标
CRect rect(x,y,x+width,y+height);     //设置预览窗口显示位置
if (m_pList[i].IsWindowVisible())
{
if (!m_pList[i].m_Dbled)     //是否填充父窗口
{
m_pList[i].MoveWindow(rect);   //恢复窗口初始大小及位置
m_pList[i].Invalidate();       //刷新窗口
}
else
{
m_pList[i].MoveWindow(m_PreRC);  //以预览窗口填充父窗口
m_pList[i].Invalidate();          //刷新窗口
}
}
}
}
}
(20)在主对话框中添加如下成员变量。
int     m_DevNum;           //当前芯片数,也就是有多少路
BOOL  m_BStop;           //是否停止预览
CPanel  m_Frame;           //预览窗口的父窗口
BOOL  m_Kinescope;          //是否录像
(21)当主对话框初始化时,创建预览窗口的父窗口,判断使用的显卡类型并初始化SDK开发包。代码如下:
BOOL CCaptureDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CButton* pBmpButton = (CButton*) GetDlgItem(IDC_BMP);
//……此处代码省略
CString strTemp;
m_Frame.Create(IDD_PANEL_DIALOG,NULL);   //创建预览窗口的父窗口
CRect rc;
GetWindowRect(rc);         //获得主窗口的客户区域
//设置预览窗口的父窗口的显示区域
m_Frame.SetWindowPos(&wndTop,0,0,rc.Width()-180,rc.Height
()-10,SWP_SHOWWINDOW);
m_Frame.ShowWindow(SW_SHOW);      //显示预览窗口的父窗口
CButton* pVGAButton = (CButton*) GetDlgItem(IDC_VGA);
CButton* pPCIButton = (CButton*) GetDlgItem(IDC_PCI);
CString str= "temp";
//读取INI文件中的数据
GetPrivateProfileString("显卡设置","类型","VGA" ,str.GetBuffer
(0), 10, "./syssetting.ini"); 
BOOL ret;
if(str=="VGA")          //判断是否选择了VGA显卡
{
pVGAButton->SetCheck(1);       //设置VGA按钮选中
pPCIButton->SetCheck(0);        //设置PCI按钮未选中
//初始化SDK开发包
ret = VCAInitSdk(m_Frame.m_hWnd,PCI_VIEDOMEMORY);
}
else
{
ret = VCAInitSdk(m_Frame.m_hWnd,PCI_MEMORY_VIDEOMEMORY); //初始化SDK开发包
pVGAButton->SetCheck(0);       //设置VGA按钮未选中
pPCIButton->SetCheck(1);        //设置PCI按钮选中

if(ret)            //判断初始化SDK开发包是否成功
{
//获得几路视频
m_DevNum = VCAGetDevNum();
m_Frame.CreatePreWnd((int)sqrt(m_DevNum));  //根据获得路数创建视频预览窗口
for (int i = 0; i<m_DevNum; i++)
{
VCAOpenDevice(i,m_Frame.m_pList[i].m_hWnd); //打开视频预览窗口
BOOL ret = VCAStartVideoPreview(i);       //开始预览
m_Frame.UpdateAllPreView();               //更新视频预览窗口
}
m_BStop = FALSE;
}
SetTimer(1,1000,NULL);        //设置定时器
return TRUE;
}
(22)处理主对话框的WM_TIMER消息,判断某一路是否有视频信号。代码如下:
 void CCaptureDlg::OnTimer(UINT nIDEvent) 
{
//判断某一路是否有信号
eFieldFrequency frequency;
for (int i=0;i<m_DevNum;i++)
{
VCAGetVidFieldFrq(i,frequency);      //获得视频源输入频率
if(frequency == FIELD_FREQ_0HZ)     //无信号
{
if (m_Frame.m_pList[i].m_ShowImage == TRUE)
{
m_Frame.m_pList[i].m_ShowImage = FALSE;
m_Frame.m_pList[i].Invalidate();    //更新预览窗口
}
}
else
{
if(m_Frame.m_pList[i].m_ShowImage == FALSE)  //判断是否显示图片
{
m_Frame.m_pList[i].m_ShowImage = TRUE;
m_Frame.m_pList[i].Invalidate();    //更新预览窗口
if(m_Frame.m_pList[i].m_Stop == psPreview)
{
//更新视频预览窗口
VCAUpdateOverlayWnd(m_Frame.m_hWnd);
VCAUpdateVideoPreview(i,m_Frame.m_pList[i].m_hWnd); 
}
}
}
}
CDialog::OnTimer(nIDEvent);
}
(23)处理主对话框的WM_SIZE消息,在对话框大小改变时调整视频显示窗口的父窗口大小,从而间接调整预览窗口。代码如下:
 void CCaptureDlg::OnSize(UINT nType, int cx, int cy) 
{
CDialog::OnSize(nType, cx, cy); 
CRect rc,frc;
GetClientRect(rc);           //获取窗口的客户区域
//设置父窗口的大小
m_Frame.SetWindowPos(&wndTop,0,0,rc.Width()-180,rc.Height()-10,SWP_SHOWWINDOW);
m_Frame.GetClientRect(frc);         //获得父窗口的客户区域
m_Frame.SetWindowPos(NULL,0,7,frc.Width(),rc.Height()-8,0);
m_Frame.ShowWindow(SW_SHOW);       //显示父窗口
}
【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.5 主窗体设计(2) 下一篇1.5 主窗体设计(4)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: