📄 oksource.c
字号:
#include <windows.h>
#include <commdlg.h>
#include "resource.h"
#include "okapi32.h"
extern HANDLE hBoard;
void EnabledDlgItem(HWND hDlg,BOOL Param);
//demo to display current system infos
BOOL APIENTRY IddSource(HWND hDlg,unsigned message,UINT wParam,LONG lParam)
{
//视频源对话框
static long HoriPixels,VertLines;
HWND SourhWnd;
CHAR tstr[80];
int i;
long l;
switch (message)
{
case WM_INITDIALOG:
//获取总采集点与行数
SetScrollRange(GetDlgItem(hDlg,IDC_SCROLLBARHORI),SB_CTL,8,2048,FALSE);
SetScrollRange(GetDlgItem(hDlg,IDC_SCROLLBARVERT),SB_CTL,8,2048,FALSE);
HoriPixels=okSetCaptureParam(hBoard,CAPTURE_HORZPIXELS,-1);
wsprintf(tstr,"%d",HoriPixels);
SetDlgItemText(hDlg,IDC_HORI,tstr);
VertLines=okSetCaptureParam(hBoard,CAPTURE_VERTLINES,-1);
wsprintf(tstr,"%d",VertLines);
SetDlgItemText(hDlg,IDC_VERT,tstr);
SetScrollPos(GetDlgItem(hDlg,IDC_SCROLLBARHORI),SB_CTL,HoriPixels,TRUE);
SetScrollPos(GetDlgItem(hDlg,IDC_SCROLLBARVERT),SB_CTL,VertLines,TRUE);
//写同步同道选项
SourhWnd=GetDlgItem(hDlg,IDC_RGBSYNC);
for(i=0;i<4;i++){
wsprintf(tstr,"VIDEO %d",4-i);
SendMessage(SourhWnd,CB_INSERTSTRING,0,(LPARAM)(LPCSTR)tstr);
}
for(i=0;i<2;i++){
wsprintf(tstr,"复合信号通道 %d",2-i);
SendMessage(SourhWnd,CB_INSERTSTRING,0,(LPARAM)(LPCSTR)tstr);
wsprintf(tstr,"兰色信号通道 %d",2-i);
SendMessage(SourhWnd,CB_INSERTSTRING,0,(LPARAM)(LPCSTR)tstr);
wsprintf(tstr,"绿色信号通道 %d",2-i);
SendMessage(SourhWnd,CB_INSERTSTRING,0,(LPARAM)(LPCSTR)tstr);
wsprintf(tstr,"红色信号通道 %d",2-i);
SendMessage(SourhWnd,CB_INSERTSTRING,0,(LPARAM)(LPCSTR)tstr);
}
//写信号源选项
SourhWnd=GetDlgItem(hDlg,IDC_COMBOSTYPE);
SendMessage(SourhWnd,CB_INSERTSTRING,0,(LPARAM)"隔行");
SendMessage(SourhWnd,CB_INSERTSTRING,0,(LPARAM)"逐行");
SendMessage(SourhWnd,CB_SETCURSEL,0,0);
SourhWnd=GetDlgItem(hDlg,IDC_COMBOGAIN);
SendMessage(SourhWnd,CB_INSERTSTRING,0,(LPARAM)"同步开槽");
SendMessage(SourhWnd,CB_INSERTSTRING,0,(LPARAM)"同步不开槽");
SendMessage(SourhWnd,CB_SETCURSEL,0,0);
EnableWindow(GetDlgItem(hDlg,IDC_RGBSYNC),FALSE);
// EnabledDlgItem(hDlg,FALSE);
break;
case WM_HSCROLL:
//设置采集点数
if(GetDlgItem(hDlg,IDC_SCROLLBARHORI)==(HWND)lParam)
{
switch(LOWORD(wParam)){
case SB_PAGEDOWN:
HoriPixels+=3;
break;
case SB_LINEDOWN:
HoriPixels++;
break;
case SB_PAGEUP:
HoriPixels-=3;
break;
case SB_LINEUP:
HoriPixels--;
break ;
case SB_TOP :
HoriPixels=8;
break ;
case SB_BOTTOM:
HoriPixels=2048;
break;
case SB_THUMBPOSITION:
case SB_THUMBTRACK:
HoriPixels=HIWORD(wParam);
break;
default:
return FALSE;
}
if(HoriPixels<8) HoriPixels=8;
if(HoriPixels>2048) HoriPixels=2048;
SetScrollPos(GetDlgItem(hDlg,IDC_SCROLLBARHORI),SB_CTL,HoriPixels,TRUE);
wsprintf(tstr,"%d",HoriPixels);
SetDlgItemText(hDlg,IDC_HORI,tstr);
}
else
{
switch(LOWORD(wParam)){
case SB_PAGEDOWN:
VertLines+=3;
break;
case SB_LINEDOWN:
VertLines++;
break;
case SB_PAGEUP:
VertLines-=3;
break;
case SB_LINEUP:
VertLines--;
break ;
case SB_TOP :
VertLines=8;
break ;
case SB_BOTTOM:
VertLines=2048;
break;
case SB_THUMBPOSITION:
case SB_THUMBTRACK:
VertLines=HIWORD(wParam);
break;
default:
return FALSE;
}
if(VertLines<8) VertLines=8;
if(VertLines>2048) VertLines=2048;
SetScrollPos(GetDlgItem(hDlg,IDC_SCROLLBARVERT),SB_CTL,VertLines,TRUE);
wsprintf(tstr,"%d",VertLines);
SetDlgItemText(hDlg,IDC_VERT,tstr);
}
break;
case WM_COMMAND:
switch(LOWORD(wParam)){
case IDC_RADIOVIDEO:
//VIDEO视频输入
CheckRadioButton(hDlg, IDC_RADIOVIDEO, IDC_RADIORGB, IDC_RADIOVIDEO);
SendDlgItemMessage(hDlg,IDC_SOURCENUMBER,CB_RESETCONTENT,0,0);
EnableWindow(GetDlgItem(hDlg,IDC_RGBSYNC),FALSE);
SourhWnd=GetDlgItem(hDlg,IDC_SOURCENUMBER);
for(i=0;i<8;i++){
wsprintf(tstr,"VIDEO %d",8-i);
SendMessage(SourhWnd,CB_INSERTSTRING,0,(LPARAM)(LPCSTR)tstr);
}
break;
case IDC_RADIOSVIDEO:
//S-VIDEO输入
CheckRadioButton(hDlg, IDC_RADIOVIDEO, IDC_RADIORGB, IDC_RADIOSVIDEO);
SendDlgItemMessage(hDlg,IDC_SOURCENUMBER,CB_RESETCONTENT,0,0);
EnableWindow(GetDlgItem(hDlg,IDC_RGBSYNC),FALSE);
SourhWnd=GetDlgItem(hDlg,IDC_SOURCENUMBER);
for(i=0;i<4;i++){
wsprintf(tstr,"S-VIDEO %d",4-i);
SendMessage(SourhWnd,CB_INSERTSTRING,0,(LPARAM)(LPCSTR)tstr);
}
break;
case IDC_RADIORGB:
//RGB输入
CheckRadioButton(hDlg, IDC_RADIOVIDEO, IDC_RADIORGB, IDC_RADIORGB);
SendDlgItemMessage(hDlg,IDC_SOURCENUMBER,CB_RESETCONTENT,0,0);
EnableWindow(GetDlgItem(hDlg,IDC_RGBSYNC),TRUE);
SourhWnd=GetDlgItem(hDlg,IDC_SOURCENUMBER);
for(i=0;i<4;i++){
wsprintf(tstr,"R,G,B %d",4-i);
SendMessage(SourhWnd,CB_INSERTSTRING,0,(LPARAM)(LPCSTR)tstr);
}
break;
case IDC_RADIOPAL:
//PAL信号源
CheckRadioButton(hDlg, IDC_RADIOPAL, IDC_RADIONSTD, IDC_RADIOPAL);
EnabledDlgItem(hDlg,FALSE);
break;
case IDC_RADIONTSC:
//NTSC信号源
CheckRadioButton(hDlg, IDC_RADIOPAL, IDC_RADIONSTD, IDC_RADIONTSC);
EnabledDlgItem(hDlg,FALSE);
break;
case IDC_RADIONSTD:
//非标准信号源
CheckRadioButton(hDlg, IDC_RADIOPAL, IDC_RADIONSTD, IDC_RADIONSTD);
EnabledDlgItem(hDlg,TRUE);
break;
case IDC_RADIOLOW:
//低段
CheckRadioButton(hDlg, IDC_RADIOLOW, IDC_RADIOHIGH, IDC_RADIOLOW);
break;
case IDC_RADIOMID:
//中段
CheckRadioButton(hDlg, IDC_RADIOLOW, IDC_RADIOHIGH, IDC_RADIOMID);
break;
case IDC_RADIOHIGH:
//高段
CheckRadioButton(hDlg, IDC_RADIOLOW, IDC_RADIOHIGH, IDC_RADIOHIGH);
break;
case IDOK:
//信号源
if(IsDlgButtonChecked(hDlg,IDC_RADIOVIDEO)) l=0;
else if(IsDlgButtonChecked(hDlg,IDC_RADIOSVIDEO)) l=1;
else if(IsDlgButtonChecked(hDlg,IDC_RADIORGB)) l=2;
else l=-1;
switch (l){
case 0:
//复合视频
l=SendDlgItemMessage(hDlg,IDC_SOURCENUMBER,CB_GETCURSEL,0,0);
if (l!=-1)
okSetVideoParam(hBoard,VIDEO_SOURCECHAN,l);
break;
case 1:
//S-VIDEO
l=SendDlgItemMessage(hDlg,IDC_SOURCENUMBER,CB_GETCURSEL,0,0);
if (l!=-1)
okSetVideoParam(hBoard,VIDEO_SOURCECHAN,0x100+l);
break;
case 2:
//R,G,B
{
long d;
WORD wl,wh;
l=SendDlgItemMessage(hDlg,IDC_SOURCENUMBER,CB_GETCURSEL,0,0);
d=SendDlgItemMessage(hDlg,IDC_RGBSYNC,CB_GETCURSEL,0,0);
if ((l==-1) || (d==-1)) break;
okSetVideoParam(hBoard,VIDEO_SOURCECHAN,0x200+l);
if (d<8)
{
//RGB同步信号
wh=d/4;
wl=d-(d/4)*4;
}
else
{
//VIDEO同步信号
wh=0x100+(d-8);
}
d=MAKELONG(wl,wh);
okSetVideoParam(hBoard,VIDEO_SYNCSIGCHAN,d);
break;
}
default:
break;
}
//信号源类型
{
WORD wl,wh;
wl=(WORD)SendDlgItemMessage(hDlg,IDC_COMBOSTYPE,CB_GETCURSEL,0,0);
wh=(WORD)SendDlgItemMessage(hDlg,IDC_COMBOGAIN,CB_GETCURSEL,0,0);
okSetVideoParam(hBoard,VIDEO_SIGNALTYPE,MAKELONG(wl,wh));
}
if(IsDlgButtonChecked(hDlg,IDC_RADIOPAL)) l=0;
else if(IsDlgButtonChecked(hDlg,IDC_RADIONTSC)) l=1;
else if(IsDlgButtonChecked(hDlg,IDC_RADIONSTD)) l=2;
else l=-1;
switch (l){
case 0:
//PAL制信号
case 1:
//NTSC制信号
okSetVideoParam(hBoard,VIDEO_TVSTANDARD,l);
break;
case 2:
//非标准信号
okSetVideoParam(hBoard,VIDEO_TVSTANDARD,l);
//采集频段
if(IsDlgButtonChecked(hDlg,IDC_RADIOLOW)) l=0;
else if(IsDlgButtonChecked(hDlg,IDC_RADIOMID)) l=1;
else if(IsDlgButtonChecked(hDlg,IDC_RADIOHIGH)) l=2;
else l=-1;
switch(l){
case 0:
//低段
case 1:
//中段
case 2:
//高段
okSetVideoParam(hBoard,VIDEO_FREQSEG,l);
break;
default:
break;
}
//采集点数
okSetCaptureParam(hBoard,CAPTURE_HORZPIXELS,HoriPixels);
okSetCaptureParam(hBoard,CAPTURE_VERTLINES,VertLines);
break;
default:
break;
}
EndDialog(hDlg,TRUE);
return (TRUE);
case IDCANCEL:
EndDialog(hDlg, TRUE);
return (TRUE);
default:
break;
}
break;
default:
break;
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -