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

📄 okparam.c

📁 OK系列PCI图象卡编程程序,MFC方式,压缩形式
💻 C
字号:
#include <windows.h>
#include <commdlg.h>

#include "resource.h"

#include "okapi32.h"

extern	HANDLE		hBoard;

extern void SingleCapture(void);

//demo to display current system infos
BOOL APIENTRY IddVideoParam(HWND hDlg,unsigned message,UINT wParam,LONG lParam)
{
	//采集参数对话框
	static long newValue[4],orgValue[4];
	static long newRgb[3][2],orgRgb[3][2];
	char tstr[80];
	long l;
	int i;
	HWND hWnd;

	switch (message)
	{
	case WM_INITDIALOG: 
		//初始化
		hWnd=GetDlgItem(hDlg,IDC_STYPE);
		SendMessage(hWnd,CB_INSERTSTRING,0,(LPARAM)"RGB输入");
		SendMessage(hWnd,CB_INSERTSTRING,0,(LPARAM)"非RGB输入");
		SendMessage(hWnd,CB_SETCURSEL,0,0);

		hWnd=GetDlgItem(hDlg,IDC_OBJECT);
		SendMessage(hWnd,CB_INSERTSTRING,0,(LPARAM)"兰色通道");
		SendMessage(hWnd,CB_INSERTSTRING,0,(LPARAM)"绿色通道");
		SendMessage(hWnd,CB_INSERTSTRING,0,(LPARAM)"红色通道");
		SendMessage(hWnd,CB_SETCURSEL,0,0);

		for(i=0;i<4;i++){
			SetScrollRange(GetDlgItem(hDlg,IDC_SCROLLBARBRIGHTNESS+i),SB_CTL,0,255,FALSE);
			orgValue[i]=okSetVideoParam(hBoard,VIDEO_BRIGHTNESS+i,-1);
			newValue[i]=orgValue[i];
			if(i<2){
				orgRgb[0][i]=(long)LOBYTE(LOWORD(orgValue[i]));
				orgRgb[1][i]=(long)HIBYTE(HIWORD(orgValue[i]));
				orgRgb[2][i]=(long)HIWORD(orgValue[i]);
			}
			SetScrollPos(GetDlgItem(hDlg,IDC_SCROLLBARBRIGHTNESS+i),SB_CTL,newValue[i],TRUE);
			wsprintf(tstr,"%d",newValue[i]);
			SetDlgItemText(hDlg,IDC_BRIGHTNESS+i,tstr);
			if(newValue[i]==-1) EnableWindow(GetDlgItem(hDlg,IDC_SCROLLBARBRIGHTNESS+i),FALSE);
		}

		return TRUE;
	case WM_HSCROLL:
		{
			int n,dx;

			if(GetDlgItem(hDlg,IDC_SCROLLBARBRIGHTNESS)==(HWND)lParam) n=0;		//亮度
			else if(GetDlgItem(hDlg,IDC_SCROLLBARCONTRAST)==(HWND)lParam) n=1;		//对比度
			else if(GetDlgItem(hDlg,IDC_SCROLLBARCOLORHUE)==(HWND)lParam) n=2;		//色度
			else if(GetDlgItem(hDlg,IDC_SCROLLBARSATURATION)==(HWND)lParam) n=3;	//饱和度
			else n=-1;

			switch(LOWORD(wParam)){
            case SB_PAGEDOWN:
				dx=3;
				break;
            case SB_LINEDOWN:
				dx=1;
				break;
            case SB_PAGEUP:
				dx=-3;
				break;
            case SB_LINEUP:
				dx=-1;
                break ;
            case SB_TOP :
				dx=-255;
                break ;
            case SB_BOTTOM:
				dx=255;
                break;
            case SB_THUMBPOSITION:
            case SB_THUMBTRACK:
				switch (n+VIDEO_BRIGHTNESS){
				case VIDEO_BRIGHTNESS:
				case VIDEO_CONTRAST:
					if(SendMessage(GetDlgItem(hDlg,IDC_STYPE),CB_GETCURSEL,0,0)){
						//RGB输入
						i=SendMessage(GetDlgItem(hDlg,IDC_OBJECT),CB_GETCURSEL,0,0);
						switch(i){
						case 0:
							//红色通道
						case 1:
							//绿色通道
						case 2:
							//兰色通道
							newRgb[i][n]=HIWORD(wParam);
							if(newRgb[i][n]<0) newRgb[i][n]=0;
							if(newRgb[i][n]>255) newRgb[i][n]=255;
							SetScrollPos(GetDlgItem(hDlg,IDC_SCROLLBARBRIGHTNESS+n),SB_CTL,newRgb[i][n],TRUE);
							wsprintf(tstr,"%d",newRgb[i][n]);
							SetDlgItemText(hDlg,IDC_BRIGHTNESS+n,tstr);
							break;
						default:
							break;
						}
					}
					else{
						//非RGB输入
						newValue[n]=HIWORD(wParam);
						if(newValue[n]<0) newValue[n]=0;
						if(newValue[n]>255) newValue[n]=255;
						SetScrollPos(GetDlgItem(hDlg,IDC_SCROLLBARBRIGHTNESS+n),SB_CTL,newValue[n],TRUE);
						wsprintf(tstr,"%d",newValue[n]);
						SetDlgItemText(hDlg,IDC_BRIGHTNESS+n,tstr);
					}
					break;
				case VIDEO_COLORHUE:
				case VIDEO_SATURATION:
					newValue[n]=HIWORD(wParam);
					SetScrollPos(GetDlgItem(hDlg,IDC_SCROLLBARCOLORHUE+n),SB_CTL,newValue[n],TRUE);
					wsprintf(tstr,"%d",newValue[n]);
					SetDlgItemText(hDlg,IDC_COLORHUE+n,tstr);
					break;
				default:
					return FALSE;
				}
				dx=0;
				break;
            default:
				return FALSE;
			}

			switch(n+VIDEO_BRIGHTNESS){
			case VIDEO_BRIGHTNESS:
				//亮度
			case VIDEO_CONTRAST:
				//对比度
				if(SendMessage(GetDlgItem(hDlg,IDC_STYPE),CB_GETCURSEL,0,0)){
					//RGB输入
					i=SendMessage(GetDlgItem(hDlg,IDC_OBJECT),CB_GETCURSEL,0,0);
					switch(i){
					case 0:
						//红色通道
					case 1:
						//绿色通道
					case 2:
						//兰色通道
						newRgb[i][n]+=dx;
						if(newRgb[i][n]<0) newRgb[i][n]=0;
						if(newRgb[i][n]>255) newRgb[i][n]=255;
						SetScrollPos(GetDlgItem(hDlg,IDC_SCROLLBARBRIGHTNESS+n),SB_CTL,newRgb[i][n],TRUE);
						wsprintf(tstr,"%d",newRgb[i][n]);
						SetDlgItemText(hDlg,IDC_BRIGHTNESS+n,tstr);
						break;
					default:
						break;
					}
				}
				else{
					//非RGB输入
					newValue[n]+=dx;
					if(newValue[n]<0) newValue[n]=0;
					if(newValue[n]>255) newValue[n]=255;
					SetScrollPos(GetDlgItem(hDlg,IDC_SCROLLBARBRIGHTNESS+n),SB_CTL,newValue[n],TRUE);
					wsprintf(tstr,"%d",newValue[n]);
					SetDlgItemText(hDlg,IDC_BRIGHTNESS+n,tstr);
				}
				break;;
			case VIDEO_COLORHUE:
				//色度
			case VIDEO_SATURATION:
				//饱和度
				newValue[n]+=dx;
				if(newValue[n]<0) newValue[n]=0;
				if(newValue[n]>255) newValue[n]=255;
				SetScrollPos(GetDlgItem(hDlg,IDC_SCROLLBARBRIGHTNESS+n),SB_CTL,newValue[n],TRUE);
				wsprintf(tstr,"%d",newValue[n]);
				SetDlgItemText(hDlg,IDC_BRIGHTNESS+n,tstr);
				break;
			default:
				return FALSE;
			}
			if(SendMessage(GetDlgItem(hDlg,IDC_STYPE),CB_GETCURSEL,0,0)){
				//RGB输入信号源
				WORD wl,wh;

				for(i=0;i<2;i++){
					wl=(WORD)newRgb[0][i];wh=0;
					okSetVideoParam(hBoard,VIDEO_BRIGHTNESS,MAKELONG(wl,wh));
					wl=(WORD)newRgb[1][i];wh=1;
					okSetVideoParam(hBoard,VIDEO_BRIGHTNESS,MAKELONG(wl,wh));
					wl=(WORD)newRgb[2][i];wh=2;
					okSetVideoParam(hBoard,VIDEO_BRIGHTNESS,MAKELONG(wl,wh));
				}
			}
			else{
				//非RGB输入信号源
				for(i=0;i<4;i++){
					okSetVideoParam(hBoard,VIDEO_BRIGHTNESS+i,newValue[i]);
				}
			}
			SingleCapture();
			return TRUE;
		}

    case WM_COMMAND:
		switch(LOWORD(wParam)){
		case IDC_STYPE:
			//视频源类型
			if(SendMessage(GetDlgItem(hDlg,IDC_STYPE),CB_GETCURSEL,0,0)){
				//RGB输入信号源
				for(i=0;i<2;i++){
					l=okSetVideoParam(hBoard,VIDEO_BRIGHTNESS+i,-1);
					newRgb[0][i]=LOBYTE(LOWORD(l));
					newRgb[1][i]=HIBYTE(HIWORD(l));
					newRgb[2][i]=HIWORD(l);
				}

				l=SendMessage(GetDlgItem(hDlg,IDC_OBJECT),CB_SETCURSEL,0,0);
				switch(l){
				case 0:
					//红色通道
				case 1:
					//绿色通道
				case 2:
					//兰色通道
					for(i=0;i<2;i++){
						SetScrollPos(GetDlgItem(hDlg,IDC_SCROLLBARBRIGHTNESS+i),SB_CTL,newRgb[l][i],TRUE);
						wsprintf(tstr,"%d",newRgb[l][i]);
						SetDlgItemText(hDlg,IDC_BRIGHTNESS+i,tstr);
					}
					break;
				default:
					break;
				}
			}
			else{
				//非RGB输入信号源
				for(i=0;i<4;i++){
					newValue[i]=okSetVideoParam(hBoard,VIDEO_BRIGHTNESS+i,-1);
					SetScrollPos(GetDlgItem(hDlg,IDC_SCROLLBARBRIGHTNESS+i),SB_CTL,newValue[i],TRUE);
					wsprintf(tstr,"%d",newValue[i]);
					SetDlgItemText(hDlg,IDC_BRIGHTNESS+i,tstr);
					if(newValue[i]==-1) EnableWindow(GetDlgItem(hDlg,IDC_SCROLLBARBRIGHTNESS+i),FALSE);
					else EnableWindow(GetDlgItem(hDlg,IDC_SCROLLBARBRIGHTNESS+i),TRUE);
				}
			}
			break;
		case IDOK:
			//确认
			EndDialog(hDlg, TRUE);
            return (TRUE);
		case IDCANCEL:
			//取消
			if(SendMessage(GetDlgItem(hDlg,IDC_STYPE),CB_GETCURSEL,0,0)){
				//RGB输入信号源
				WORD wl,wh;

				for(i=0;i<2;i++){
					wl=(WORD)orgRgb[0][i];wh=0;
					okSetVideoParam(hBoard,VIDEO_BRIGHTNESS,MAKELONG(wl,wh));
					wl=(WORD)orgRgb[1][i];wh=1;
					okSetVideoParam(hBoard,VIDEO_BRIGHTNESS,MAKELONG(wl,wh));
					wl=(WORD)orgRgb[2][i];wh=2;
					okSetVideoParam(hBoard,VIDEO_BRIGHTNESS,MAKELONG(wl,wh));
				}
			}
			else{
				//非RGB输入信号源
				for(i=0;i<4;i++){
					okSetVideoParam(hBoard,VIDEO_BRIGHTNESS+i,orgValue[i]);
				}
			}
			EndDialog(hDlg, TRUE);
            return (TRUE);
		default:
			break;
		}
    break;
    }
    return (FALSE);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -