⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oksource.c

📁 OK系列PCI图象卡编程程序,MFC方式,压缩形式
💻 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 + -