📄 imagelabview.cpp
字号:
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 + -