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

📄 c_proc.cpp

📁 对日本KSG震动探测仪器编写的伴侣服务代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/*---------------------------------------------*/
//	1.擔杮岅柤
//		Image File Load張棟(BMP/JPEG)
//	2.Parameter愢柧
//		char	*szFileName		File柤
//	3.奣梫
//	4.婡擻愢柧
//	5.栠傝抣
//	6.旛峫
/*---------------------------------------------*/
BOOL LoadImageFile(LPPICTURE *pImage, char *szFileName)
{
	LPSTREAM	pStream;
	HGLOBAL 	hGlobal;
	HRESULT		hResult;
	CFile		pFile;
    DWORD		dwSize;
	BOOL		bBool, bRet = FALSE;
	void		*pBuf;

	if (*pImage != NULL) {
		(*(LPPICTURE*)pImage)->Release();
	}
	*pImage = NULL;
	// Image File Read
	bBool = pFile.Open(szFileName, CFile::modeRead);
	if (bBool == TRUE) {
		dwSize = pFile.GetLength();
		// Global椞堟 妋曐
		hGlobal = ::GlobalAlloc(GMEM_MOVEABLE, dwSize);
		if (hGlobal != NULL) {
			// Global椞堟Lock
			pBuf = ::GlobalLock(hGlobal);
			if (pBuf != NULL) {
				// File Read
				if (pFile.Read(pBuf, dwSize) == dwSize) {
					// IStream Get
					pStream = NULL;
					// Global椞堟->Make IStream
					hResult = ::CreateStreamOnHGlobal(hGlobal, TRUE, &pStream);
					if (SUCCEEDED(hResult) == TRUE) {
						// IPicture Object Address Get
						hResult = ::OleLoadPicture(pStream, dwSize, FALSE, IID_IPicture, (LPVOID *)pImage);
						if (SUCCEEDED(hResult) == TRUE && pImage != NULL) {
							// 撉崬惉岟
							bRet = TRUE;
						}
						else {
							pImage = NULL;
						}
						// IStream Object Release
						pStream->Release();
					}
				}
				::GlobalUnlock(hGlobal);
			}
			::GlobalFree(hGlobal);
		}
		pFile.Close();
	}
	return bRet;
}

/*---------------------------------------------*/
//	1.擔杮岅柤
//		Image Data Print
//	2.Parameter愢柧
//	3.奣梫
//	4.婡擻愢柧
//	5.栠傝抣
//	6.旛峫
/*---------------------------------------------*/
void ImagePrint(CDC *pDcOrg, LPPICTURE pImage, CPrintInfo *pInfo, int nOfs)
{
	COLORREF	pColor;
	CSize		pSize;
	CRect		pRect;
	CPoint		pPoint;
	long		hmWidth, hmHeight;

	pColor = GetSysColor(COLOR_MENU);
	pRect = pInfo->m_rectDraw;
	CCqMemDC	pDC(pDcOrg, pRect);
	// Image Readed
	if (pImage != NULL) {
		// PICTURE僀儞僞乕僼僃僀僗偐傜暆偲崅偝傪庢摼偡傞
		// 偙偺偲偒偺暆偲崅偝偼丄HIMETRIC 扨埵偱偁傞
		pImage->get_Width(&hmWidth);
		pImage->get_Height(&hmHeight);
		// 僨傿僗僾儗僀偺昞帵僒僀僘偵曄姺偡傞偨傔堦帪揑偵CSize偵奿擺偡傞丅
		// int偺斖埻傪挻偡傛偆側応崌偼丄暿搑MulDiv偱寁嶼偟側偗傟偽側傜側偄
		pSize.cx = hmWidth;
		pSize.cy = hmHeight;
		// HIMETRIC 扨埵傪僨僶僀僗扨埵偵曄姺
		pDC->HIMETRICtoDP(&pSize);
		pImage->Render(pDC,									// Handle of device context on which to render the image
						pRect.left+nOfs,					// Horizontal position of image in hdc
						pRect.top+nOfs,						// Vertical position of image in hdc
						pRect.right-pRect.left-2-(nOfs*2),	// Horizontal dimension of destination rectangle
						pRect.bottom-pRect.top-2-(nOfs*2),	// Vertical dimension of destination rectangle
						0,									// Horizontal offset in source picture
						hmHeight,							// Vertical offset in source picture
						hmWidth,							// Amount to copy horizontally in source picture
						-hmHeight,							// Amount to copy vertically in source picture
						&pRect);							// Pointer to position of destination for a metafile hdc
	}
}

///////////////////////////////////////////////////////////////////////////////////////////
// 22-Mar-2004
void	ParaPrint(char *des, PS_PARA_TABLE p)
{
	if (p->typ == 0) {							// int
		sprintf(des, "%*d", p->len, *((int*) p->p));
	}
	else {										// double
		sprintf(des, "%*.*lf", p->len, p->dp, *((double*) p->p));
	}
}

void	ParaScan(char *src, PS_PARA_TABLE p)
{
	double	dat_d;
	int		dat_i;

	switch (p->typ){
	case TYP_INT:	// 0: int 宆悢抣
		sscanf(src, "%d", &dat_i);
		if (dat_i > p->hi ) dat_i = (int)p->hi;
		if (dat_i < p->low) dat_i = (int)p->low;
		*((int*) p->p) = dat_i;
		break;
	case TYP_DBL:	// 1: double 宆悢抣
		sscanf(src, "%lf", &dat_d);
		if (dat_d > p->hi ) dat_d = p->hi;
		if (dat_d < p->low) dat_d = p->low;
		*((double*) p->p) = dat_d;
		break;
	}
}

// 僥乕僽儖僥僉僗僩昞帵
void	PutTblTxt(CWnd* pParent, S_PARA_TABLE* pTbl, int sel, int ofs)
{
	char buff[64];
	int a, b, keep, id;
	CButton *pBt[5];
	
	//-----( Text )-----
	a = 0;
	if (sel != -1) a = sel;
	keep = 1;
	do{
		switch (pTbl[a].typ){
		case TYP_STR2:	// 2: 暥帤楍
			for (b=0;b<pTbl[a].len;b++){
				buff[b] = *((char *)pTbl[a].p+ofs+b);
			}
			buff[b+0] = 0;

			pParent->SetDlgItemText(pTbl[a].id_1, buff);
			if (pTbl[a].id_2 != 0) pParent->SetDlgItemText(pTbl[a].id_2, (char *)pTbl[a].p+ofs);
			if (pTbl[a].id_3 != 0) pParent->SetDlgItemText(pTbl[a].id_3, (char *)pTbl[a].p+ofs);
			if (pTbl[a].id_4 != 0) pParent->SetDlgItemText(pTbl[a].id_4, (char *)pTbl[a].p+ofs);
			break;
		case TYP_INT:	// 0: int 宆悢抣
		case TYP_DBL:	// 1: double 宆悢抣
			ParaPrint(buff, &pTbl[a]);
			pParent->SetDlgItemText(pTbl[a].id_1, buff);
			break;
		case TYP_STR:	// 2: 暥帤楍
			//ParaPrint(buff, &pTbl[a]);
			pParent->SetDlgItemText(pTbl[a].id_1, (char *)pTbl[a].p+ofs);
			if (pTbl[a].id_2 != 0) pParent->SetDlgItemText(pTbl[a].id_2, (char *)pTbl[a].p+ofs);
			if (pTbl[a].id_3 != 0) pParent->SetDlgItemText(pTbl[a].id_3, (char *)pTbl[a].p+ofs);
			if (pTbl[a].id_4 != 0) pParent->SetDlgItemText(pTbl[a].id_4, (char *)pTbl[a].p+ofs);
			break;
		case TYP_CHK:	// 3: check box
			pBt[0] = (CButton*)pParent->GetDlgItem(pTbl[a].id_1);
			if (*((int*) pTbl[a].p)){
				pBt[0]->SetCheck(1);		// 0:枹check / 1:check
			}
			else{
				pBt[0]->SetCheck(0);		// 0:枹check / 1:check
			}

			for (b=0;b<pTbl[a].len;b++){
				switch (b){
				case 0:	id = pTbl[a].id_2;	break;
				case 1:	id = pTbl[a].id_3;	break;
				case 2:	id = pTbl[a].id_4;	break;
				case 3:	id = pTbl[a].id_5;	break;
				case 4:	id = pTbl[a].id_6;	break;
				}

				if (*((int*) pTbl[a].p) != 0){
					pParent->GetDlgItem(id)->EnableWindow(TRUE);
				}
				else{
					pParent->GetDlgItem(id)->EnableWindow(FALSE);
				}
			}
			break;
		case TYP_CMB:	// 4: combo box
			CComboBox*	pCmbBx;
			pCmbBx = (CComboBox*)pParent->GetDlgItem(pTbl[a].id_1);
			pCmbBx->SetCurSel(*((int*) pTbl[a].p));
			break;
		case TYP_RAD:	// 5: radio botton
			if (pTbl[a].id_1){
				pBt[0] = (CButton*)pParent->GetDlgItem(pTbl[a].id_1);
				pBt[0]->SetCheck(0);		// 0:枹check / 1:check
			}
			if (pTbl[a].id_2){
				pBt[1] = (CButton*)pParent->GetDlgItem(pTbl[a].id_2);
				pBt[1]->SetCheck(0);		// 0:枹check / 1:check
			}
			if (pTbl[a].id_3){
				pBt[2] = (CButton*)pParent->GetDlgItem(pTbl[a].id_3);
				pBt[2]->SetCheck(0);		// 0:枹check / 1:check
			}
			if (pTbl[a].id_4){
				pBt[3] = (CButton*)pParent->GetDlgItem(pTbl[a].id_4);
				pBt[3]->SetCheck(0);		// 0:枹check / 1:check
			}
			if (pTbl[a].id_5){
				pBt[4] = (CButton*)pParent->GetDlgItem(pTbl[a].id_5);
				pBt[4]->SetCheck(0);		// 0:枹check / 1:check
			}

			pBt[*((int*) pTbl[a].p)]->SetCheck(1);		// 0:枹check / 1:check
			break;
		default:
			keep = 0;
			break;
		}
		a ++;
	}while (keep && sel == -1);
}

// 僥乕僽儖僥僉僗僩庢摼
void	GetTblTxt(CWnd* pParent, S_PARA_TABLE* pTbl, int isel, int ofs)
{
	char buff[64];
	int a, b, keep, sel, len;
	CButton *pBt[5];
	
	a = isel;
	if (isel == -1){
		a = 0;
	}

	keep = 1;
	do{
		switch (pTbl[a].typ){
		case TYP_STR2:	// 2: 暥帤楍
			for (b=0;b<pTbl[a].len;b++){
				buff[b] = *((char *)pTbl[a].p+ofs+b);
			}
			buff[b+0] = 0;

			pParent->GetDlgItemText(pTbl[a].id_1, (char*)pTbl[a].p+ofs, pTbl[a].len+1);
			len = pTbl[a].len;
			*((char*)pTbl[a].p+ofs+len+0) = 0x0d;
			*((char*)pTbl[a].p+ofs+len+1) = 0x0a;

//			*((char*)pTbl[a].p+pTbl[a].len) = NULL;
			break;
		case TYP_INT:	// 0: int 宆悢抣
		case TYP_DBL:	// 1: double 宆悢抣
			pParent->GetDlgItemText(pTbl[a].id_1, buff, sizeof(buff));
			ParaScan(buff, &pTbl[a]);
			break;
		case TYP_STR:	// 2: 暥帤楍
			pParent->GetDlgItemText(pTbl[a].id_1, (char*)pTbl[a].p+ofs, pTbl[a].len+1);
			*((char*)pTbl[a].p+pTbl[a].len) = NULL;
			break;
		case TYP_CHK:	// 3: check box
			pBt[0] = (CButton*)pParent->GetDlgItem(pTbl[a].id_1);
			*((int*) pTbl[a].p) = pBt[0]->GetCheck();		// 0:枹check / 1:check
			break;
		case TYP_CMB:	// 4: combo box
			CComboBox*	pCmbBx;
			pCmbBx = (CComboBox*)pParent->GetDlgItem(pTbl[a].id_1);
			*((int*) pTbl[a].p) = pCmbBx->GetCurSel();
			break;
		case TYP_RAD:	// 5: radio botton
			sel = 0;
			if (pTbl[a].id_1){
				pBt[0] = (CButton*)pParent->GetDlgItem(pTbl[a].id_1);
				if (pBt[0]->GetCheck()) sel = 0;
			}
			if (pTbl[a].id_2){
				pBt[1] = (CButton*)pParent->GetDlgItem(pTbl[a].id_2);
				if (pBt[1]->GetCheck()) sel = 1;
			}
			if (pTbl[a].id_3){
				pBt[2] = (CButton*)pParent->GetDlgItem(pTbl[a].id_3);
				if (pBt[2]->GetCheck()) sel = 2;
			}
			if (pTbl[a].id_4){
				pBt[3] = (CButton*)pParent->GetDlgItem(pTbl[a].id_4);
				if (pBt[3]->GetCheck()) sel = 3;
			}
			if (pTbl[a].id_5){
				pBt[4] = (CButton*)pParent->GetDlgItem(pTbl[a].id_5);
				if (pBt[4]->GetCheck()) sel = 4;
			}

			*((int*) pTbl[a].p) = sel;		// 0:枹check / 1:check
			break;
		default:
			keep = 0;
			break;
		}
		a ++;
	}while (keep && isel == -1);
}

// 僥乕僽儖弶婜壔
void	SetDefaultDat(S_PARA_TABLE* pTbl)
{
	int a, keep;
	
	a = 0;
	keep = 1;
	while (keep){
		switch (pTbl[a].typ){
		case TYP_INT:	// 0: int 宆悢抣
		case TYP_CHK:	// 3: check box
		case TYP_CMB:	// 4: combo box
		case TYP_RAD:	// 5: radio botton
			*((int*) pTbl[a].p) = (int)(pTbl[a].def);
			break;
		case TYP_DBL:	// 1: double 宆悢抣
			*((double*) pTbl[a].p) = pTbl[a].def;
			break;
		case TYP_STR:	// 2: 暥帤楍
			*((char*) pTbl[a].p) = NULL;
			break;
		default:
			keep = 0;
			break;
		}
		a ++;
	}
}

⌨️ 快捷键说明

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