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

📄 imagelabview.cpp

📁 医学图象处理系统
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	TagDC.SelectObject(OldBmp);

	pDC->SelectStockObject(NULL_BRUSH);
	pDC->Rectangle(showrect);

	// draw footer
	rectPage.bottom -= 3* cyChar;
	CTime time = CTime::GetCurrentTime();
	CString strDate = time.Format(_T("%d/%m/%Y %A %H:%M:%S")); 
	pDC->SetTextAlign( TA_CENTER );
	pDC->TextOut( (rectPage.left + rectPage.right)/ 2, rectPage.bottom, strDate);
	rectPage.bottom -= cyChar / 4;	
	pDC->MoveTo(rectPage.left, rectPage.bottom);
	pDC->LineTo(rectPage.right, rectPage.bottom);

	if( m_OtherDesStore != "")
	{
		pDC->SetTextAlign( TA_LEFT );
		rectPage.top = BottomY + 80;
		pDC->TextOut(60,  rectPage.top, "名    称:");
		pDC->TextOut(560, rectPage.top, pDoc->ImageName);

		rectPage.top += 120;
		pDC->TextOut(60,  rectPage.top, "时    间:");
		pDC->TextOut(560, rectPage.top, m_DesDate);

		rectPage.top += 120;
		pDC->TextOut(60,  rectPage.top, "图像描述:");
		CRect TextRect(560, rectPage.top, rectPage.Width(), rectPage.bottom - 40);
		pDC->DrawText(m_OtherDesStore, TextRect, DT_NOCLIP|DT_NOPREFIX|DT_EXPANDTABS);
	}

	// allow space for footer
	pInfo->m_rectDraw = rectPage;
	pInfo->m_rectDraw.bottom -= cyChar + cyChar/4 + cyChar/4;

	
}
*/

void CImageLABView::ReadDesFile()
{
	CImageLABDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if( IsExistFile(pDoc->ImageDesFileName) )
	{
		CIni IniFile;
		CString msg;

		IniFile.Read( pDoc->ImageDesFileName );
		IniFile.GetValue ("标记个数", "    标记个数", PinNum);
		int tx, ty, ti;

		for(int i= 0; i< PinNum; i++)
		{
			msg.Format("标记点%2d 信息", i+ 1);
			IniFile.GetValue (msg, "    X坐标", tx);
			IniFile.GetValue (msg, "    Y坐标", ty);
			IniFile.GetValue (msg, "    I符号", ti);
			m_pinIconNO[i]   = ti + IDI_ICON1;
			m_PinImagePos[i].x = tx;
			m_PinImagePos[i].y = ty;
		}
		IniFile.GetMultiValue ("图像描述", "    图像印象",	   m_OtherDesStore);
		IniFile.GetMultiValue ("医院信息", "    医生姓名",	m_Docter);
		IniFile.GetMultiValue ("医院信息", "    病室名称",	m_Room);
		IniFile.GetMultiValue ("医院信息", "    科别名称",	m_Depart);
//		IniFile.GetMultiValue ("医院信息", "    医院名称",	m_Hospital);
		IniFile.GetMultiValue ("病人信息", "    病人年龄",	m_Age);
		IniFile.GetMultiValue ("病人信息", "    病人性别",	m_Sex);
		IniFile.GetMultiValue ("病人信息", "    病人姓名",	m_Patient);
		IniFile.GetMultiValue ("门诊信息", "    X 光号",	m_Xray);
		IniFile.GetMultiValue ("门诊信息", "    门诊号",	m_Nomz);
		IniFile.GetMultiValue ("门诊信息", "    住院号",	m_Nozy);
		IniFile.GetValue	  ("其它信息", "    最后修改时间", m_DesDate);//*/
		
		// old
		/*FILE *lpFile;
		CString temp;
		lpFile = fopen(pDoc->ImageDesFileName, "rb");

		// read the tag and tag number
		fscanf(lpFile, "%s %d\n", temp, &PinNum);
		for(int i= 0; i< PinNum; i++)
		{
			fscanf(lpFile, "%d %d %d\n", &m_PinPos[i].x, &m_PinPos[i].y, &m_pinIconNO[i]);
			m_pinIconNO[i]  += IDI_ICON1;
			m_PinImagePos[i] = m_PinPos[i];
		}
		// read the description of the image
		//fscanf(lpFile, "%s\n", temp);
		long NowPos = ftell(lpFile);
		fseek(lpFile, 0, SEEK_END);
		long EndPos = ftell(lpFile);
		int  DesLength = EndPos - NowPos;
		char *sss = new char[DesLength+ 3];

		fseek(lpFile, NowPos, SEEK_SET);
		fread( sss, 1, DesLength, lpFile);

		sss[DesLength  ] = 0x0D;
		sss[DesLength+1] = 0x0A;
		sss[DesLength+2] = '\0';
		m_OtherDesStore = CString(sss);

		if(sss != NULL) delete []sss;
		fclose(lpFile);
		GetDesFileTime();
		//*/

		// older one
		/*CFile * pReadFile = new CFile(pDoc->ImageDesFileName, CFile::modeRead | CFile::shareCompat);
		int ll = pReadFile->GetLength();
		if( lpDesStr != NULL ) 
		{
			delete []lpDesStr;
			lpDesStr = NULL;
		}
		if( ll > 0)
		{
			lpDesStr = new char[ll+ 2];		
			pReadFile->Read( lpDesStr, ll );
			lpDesStr[ll-1] = 0x0D;
			lpDesStr[ll]   = 0x0A;
			lpDesStr[ll+1] = '\0';
		}
		pReadFile->Close();
		delete pReadFile;//*/
	}
}
void CImageLABView::SaveDesFile()
{
	CImageLABDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	/*int IsNewPin = 0;
	for(int i= 0, j= 0; i< MAXPINNUM; i++)
	{
		if( m_Pin[i] != NULL ) IsNewPin++;
	}//*/

	if( IsDesTxtChanged )
	{
		CIni IniFile;
		CString msg;
		CTime time = CTime::GetCurrentTime();
		m_DesDate = time.Format(_T("%d/%m/%Y %A %H:%M:%S")); 

		IniFile.SetValue ("标记个数", "    标记个数", PinNum);
		
		for(int i= 0, j= 1; i< MAXPINNUM; i++)
		{
			if( m_Pin[i] == NULL ) continue;

			m_pinIconNO[i] -= IDI_ICON1;
			msg.Format("标记点%2d 信息", j++);
			IniFile.SetValue (msg, "    X坐标", m_PinImagePos[i].x);
			IniFile.SetValue (msg, "    Y坐标", m_PinImagePos[i].y);
			IniFile.SetValue (msg, "    I符号", m_pinIconNO[i]);
		}
		IniFile.SetMultiValue ("图像描述", "    图像印象",	   m_OtherDesStore);
		IniFile.SetMultiValue ("医院信息", "    医生姓名",	   m_Docter);
		IniFile.SetMultiValue ("医院信息", "    病室名称",	   m_Room);
		IniFile.SetMultiValue ("医院信息", "    科别名称",	   m_Depart);
//		IniFile.SetMultiValue ("医院信息", "    医院名称",	 m_Hospital);
		IniFile.SetMultiValue ("病人信息", "    病人年龄",	   m_Age);
		IniFile.SetMultiValue ("病人信息", "    病人性别",	   m_Sex);
		IniFile.SetMultiValue ("病人信息", "    病人姓名",	   m_Patient);
		IniFile.SetMultiValue ("门诊信息", "    X 光号",	   m_Xray);
		IniFile.SetMultiValue ("门诊信息", "    门诊号",	   m_Nomz);
		IniFile.SetMultiValue ("门诊信息", "    住院号",	   m_Nozy);
		IniFile.SetValue	  ("其它信息", "    最后修改时间", m_DesDate);

		IniFile.Write(pDoc->ImageDesFileName); //*/

		/*FILE *lpFile;
		lpFile = fopen(pDoc->ImageDesFileName, "wb");

		// write the tag and tag number
		fprintf(lpFile, "%s %d", "Tag:", PinNum);
		fprintf(lpFile, "%c%c", 0x0D, 0x0A);
		for(int i= 0, j= 0; i< MAXPINNUM; i++)
		{
			if( m_Pin[i] == NULL ) continue;

			m_pinIconNO[i] -= IDI_ICON1;
			fprintf(lpFile, "%d %d %d", 
					m_PinImagePos[i].x, 
					m_PinImagePos[i].y, 
					m_pinIconNO[i]);
			fprintf(lpFile, "%c%c", 0x0D, 0x0A);
		}
		// write the description of the image
		if( m_OtherDesStore != "No description")
		{
			fprintf(lpFile, "%c%c", 0x0D, 0x0A);
			fprintf(lpFile, "%s", m_OtherDesStore);
			fprintf(lpFile, "%c%c", 0x0D, 0x0A);
		}
		fclose(lpFile);//*/
	}
}
void CImageLABView::OnPinAdd() 
{	
	for(int i= 0, Which= 0; i< MAXPINNUM; i++)
	{
		if( m_Pin[i] == NULL ) 
		{
			Which = i;
			break;
		}
	}
	CString tip;  tip.Format("NO.%2d", Which+ 1);

	m_pinIconNO[Which] = IDI_ICON1 + Which;
	m_Pin[Which] = new CMapPin();
	m_Pin[Which]->m_PinPos = m_PinPos[Which]= m_PopPoint;
	fShowScale = ShowScaleType[ShowScale];
	m_PinImagePos[Which].x = int( m_PinPos[Which].x / fShowScale );
	m_PinImagePos[Which].y = int( m_PinPos[Which].y / fShowScale );
	CPoint p = m_PopPoint - ScrollOrgPt;

	VERIFY(m_Pin[Which]->SetIcon(AfxGetResourceHandle(), m_pinIconNO[PinNum], TRUE));
	VERIFY(m_Pin[Which]->Create(tip, WS_VISIBLE | WS_CHILD, p, this, 0xFFFF));
	m_Pin[Which]->SetPopupMenu(CG_IDR_POPUP_IMAGE_LABVIEW);
	m_Pin[Which]->SetAllowDrag(true);
	m_Pin[Which]->m_NO = Which;
	IsDesTxtChanged  = true;
	PinNum++;
}

void CImageLABView::OnUpdatePinAdd(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable( PinNum < MAXPINNUM );
}

void CImageLABView::OnPinDel()
{
	if( m_Pin[NowPinNo] != NULL && NowPinNo >= 0) 
	{
		delete m_Pin[NowPinNo];
		m_Pin[NowPinNo] = NULL;
		NowPinNo = -1;
		IsDesTxtChanged  = true;
	}
	PinNum--;
}

void CImageLABView::OnUpdatePinDel(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable( PinNum >0 && NowPinNo >= 0);
}


void CImageLABView::OnPinChangicon() 
{
	CSelectIcon dlg;
	if(dlg.DoModal() == IDOK && NowPinNo > 0)
	{
		m_pinIconNO[NowPinNo] = IDI_ICON1 + dlg.m_SlidePos;
		VERIFY(m_Pin[NowPinNo]->SetIcon(AfxGetResourceHandle(), 
										m_pinIconNO[NowPinNo], TRUE));
		NowPinNo = -1;
		IsDesTxtChanged  = true;
	}	
}

void CImageLABView::OnUpdatePinChangicon(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable( PinNum > 0 );
}

void CImageLABView::OnDescribe() 
{
	CImageLABDoc* pDoc = GetDocument();
	
	CDescribeDlg dlg;
	
	GetDesFileTime();
	dlg.m_Other  = m_OtherDesStore;
	dlg.m_Docter  = m_Docter;
	dlg.m_Patient  = m_Patient;
	dlg.m_Sex  = m_Sex;
	dlg.m_Room  = m_Room;
	dlg.m_Depart  = m_Depart;
	dlg.m_Xray  = m_Xray;
	dlg.m_Nomz  = m_Nomz;
	dlg.m_Nozy  = m_Nozy;
	dlg.m_Age  = m_Age;
	dlg.m_Date = m_DesDate;
	dlg.m_Name = pDoc->ImageName;
	if(dlg.DoModal() == IDOK)
	{
		if( dlg.m_Docter != ""|dlg.m_Patient!= ""|dlg.m_Other!= "")
		{
			m_OtherDesStore = dlg.m_Other;
			m_Docter = dlg.m_Docter;
			m_Patient = dlg.m_Patient;
			m_Sex = dlg.m_Sex;
			m_Age = dlg.m_Age;
			m_Room = dlg.m_Room;
			m_Depart = dlg.m_Depart;
			m_Nomz = dlg.m_Nomz;
			m_Nozy = dlg.m_Nozy;
			m_Xray = dlg.m_Xray;
			IsDesTxtChanged  = true;
		}
	}
}

void CImageLABView::OnChangechannel() 
{
	if( CImageLABApp::SorceType == 1 )
	{
		CG200Channel++;
//		if( CG200Channel > 6 ) CG200Channel -= 6;
		CG200Channel = CG200Channel % 6;
		CString msg; msg.Format("现在使用的是图像卡通道%2d进行图像采集", CG200Channel+1);
		pSB->SetPaneText(0, msg);
		CImageLABDoc* pDoc = GetDocument();
		ASSERT_VALID(pDoc);
		pDoc->SetTitle(msg);
				
		if( hcg200 != NULL) 
		{
			if( !bFreeze )
			{
				CG200Capture(hcg200, false);
				CG200SetADParam( hcg200, AD_SOURCE, CG200Channel);
				CG200SetADParam( hcg200, AD_SATURATION, 255);
				CG200SetADParam( hcg200, AD_BRIGHTNESS, 255);
				CG200SetADParam( hcg200, AD_CONTRAST, 255);
				CG200SetADParam( hcg200, AD_HUE, 255);
				CG200Capture(hcg200, true);
			}
			else
			{
				CG200SetADParam( hcg200, AD_SOURCE, CG200Channel);
				CG200SetADParam( hcg200, AD_SATURATION, 255);
				CG200SetADParam( hcg200, AD_BRIGHTNESS, 255);
				CG200SetADParam( hcg200, AD_CONTRAST, 255);
				CG200SetADParam( hcg200, AD_HUE, 255);
			}
		}
	}
}

void CImageLABView::OnUpdateChangechannel(CCmdUI* pCmdUI) 
{
	//pCmdUI->Enable( hcg200 != NULL && CImageLABApp::SorceType == 1 );
	pCmdUI->Enable(CImageLABApp::SorceType == 1 );
}

void CImageLABView::OnPatrimagesave() 
{
	CPoint p1, p2;
	GetSelectArea(p1, p2);

	CImageLABDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	CImage TempImage1( pDoc->Image, p1,  p2 );
	CAllImage TempImage2;
	TempImage2.CreateEmpty( TempImage1.m_ImageWidth, 
							TempImage1.m_ImageHeight,
							TempImage1.m_wImageDepth, 0);

	memcpy( TempImage2.m_lpDibArray, TempImage1.m_lpDibArray, TempImage1.m_ImageSize );

	CString filt = "(*.JPG)|*.JPG|(*.BMP)|*.BMP|(*.PCX)|*.PCX|(*.GIF)|*.GIF||";
    CFileDialog  dlgFile(false, "*.JPG","", OFN_HIDEREADONLY, filt, NULL);
	dlgFile.m_ofn.Flags |= OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT;
	CString InitDir = "D:\\" + CImageLABApp::SaveFileDir;
	dlgFile.m_ofn.lpstrInitialDir = InitDir;
	if(dlgFile.DoModal()==IDOK)
	{
		TempImage2.SaveImageToFile( dlgFile.GetPathName() );
	}
}

void CImageLABView::OnUpdatePatrimagesave(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable( DashRectDrawed );
}

void CImageLABView::OnPatrimageCrop() 
{
	CPoint p1, p2;
	GetSelectArea(p1, p2);

	CImageLABDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	CImage TempImage1( pDoc->Image, p1,  p2 );
	pDoc->Image.CreateEmpty( TempImage1.m_ImageWidth, 
							 TempImage1.m_ImageHeight,
							 TempImage1.m_wImageDepth, 0);

	memcpy( pDoc->Image.m_lpDibArray, TempImage1.m_lpDibArray, TempImage1.m_ImageSize );
	DashRectDrawed = false;
	pDoc->UpdateAllViews(NULL);
	pDoc->SetModifiedFlag();
}

void CImageLABView::OnUpdatePatrimageCrop(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable( DashRectDrawed );
}
void CImageLABView::OnFilePrintMysetting() 
{
	CPrintModeDlg dlg;
	dlg.m_Select = CImageLABApp::m_iPrintMode;
	if( dlg.DoModal()==IDOK )
	{
		CImageLABApp::m_iPrintMode = dlg.m_Select;
		//TRACE("m_iPrintMode = %d\n", CImageLABApp::m_iPrintMode );
	}
}

void CImageLABView::OnUpdateFilePrintMysetting(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	
}

void CImageLABView::GetDesFileTime()
{	
	CImageLABDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if( IsExistFile(pDoc->ImageDesFileName) )
	{
		struct _stat buf;
		int fh = _open( pDoc->ImageDesFileName,  _O_RDONLY );
		_fstat( fh, &buf );
		_close( fh );
		CTime time( buf.st_ctime );
		m_DesDate = time.Format(_T("%d/%m/%Y %A %H:%M:%S"));
	}
	else
	{
		CTime time = CTime::GetCurrentTime();
		m_DesDate = time.Format(_T("%d/%m/%Y %A %H:%M:%S")); 
	}
}


void CImageLABView::OnPrintNumber() 
{
	// TODO: Add your command handler code here
	CString strBuffer;
	strBuffer = AfxGetApp()->GetProfileString("Settings", "Print Number");
	if(!strBuffer.IsEmpty())
	{
		_stscanf(strBuffer, "%d",  &m_PrintNumber);
	}
	else
		m_PrintNumber = 0;

	char text[30];
	sprintf(text,"打印文件数为: %d",m_PrintNumber);
	AfxMessageBox(text);
	
}

⌨️ 快捷键说明

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