// D:\zm\GeomativeV2.5logging\cpp\logging\CDialogLoggingWnd.cpp : 实现文件 // #include "stdafx.h" #include "GeoMative.h" #include "logging\CDialogLoggingWnd.h" #include "logging\CLoggingDataOper.h" //#include "afxdialogex.h" // CDialogLoggingWnd 对话框 IMPLEMENT_DYNAMIC(CDialogLoggingWnd, CDialog) extern void SplitterString(CStringArray &szArray, const CString& szSource, const CString& szSplitter); CDialogLoggingWnd::CDialogLoggingWnd(CWnd* pParent /*=NULL*/) : CDialog(CDialogLoggingWnd::IDD, pParent) { m_fWellDepth = 0; m_fMinSPR = 0; //SP最小电阻率 m_fMaxSPR = 0; //SP最大电阻率 m_fMinLR = 0; //L最小电阻率 m_fMaxLR = 0; //L最大电阻率 m_fMinSR = 0; //short最小电阻率 m_fMaxSR = 0; //short最大电阻率 m_fMinGR = 0;//最小梯度电阻率 m_fMaxGR = 0;//最大梯度电阻率 } CDialogLoggingWnd::~CDialogLoggingWnd() { } CDialogLoggingWnd* CDialogLoggingWnd::GetInstance() { static CDialogLoggingWnd dlgLoggingWnd; return &dlgLoggingWnd; } void CDialogLoggingWnd::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CDialogLoggingWnd, CDialog) ON_WM_PAINT() ON_WM_CTLCOLOR() ON_WM_MOUSEHOVER() ON_WM_MOUSEMOVE() ON_WM_LBUTTONDOWN() END_MESSAGE_MAP() // CDialogLoggingWnd 消息处理程序 BOOL CDialogLoggingWnd::OnInitDialog() { CDialog::OnInitDialog(); if (LANG_ZHCN == g_iUILanguage) { SetDlgItemTextA(IDC_STATIC_COMPANY_NAME, _T("赛盈地脉测井系统")); SetDlgItemTextA(IDC_STATIC_BORING_NUMBER, _T("钻 孔 编 号:")); SetDlgItemTextA(IDC_STATIC_GROUND_TUBE_TYPE, _T("探 管 型 号:")); SetDlgItemTextA(IDC_STATIC_MEASURING_TIME, _T("测 量 时 间:")); SetDlgItemTextA(IDC_STATIC_WELL_DEPTH, _T("井 深(米):")); SetDlgItemTextA(IDC_STATIC_LOGGING_DIRECTION, _T("测 井 方 向:")); SetDlgItemTextA(IDC_STATIC_MEASURING_LOCATION, _T("测 量 地 点:")); SetDlgItemTextA(IDC_STATIC_CALIPER, _T("井 径(毫米):")); SetDlgItemTextA(IDC_STATIC_INITIAL_DEPTH, _T("起 始 深 度(米):")); SetDlgItemTextA(IDC_STATIC_OPERATOR, _T("操 作 员:")); SetDlgItemTextA(IDC_STATIC_SLEEVE_LENGTH, _T("套 管 长 度(米):")); SetDlgItemTextA(IDC_STATIC_TERMINATION_DEPTH, _T("终 止 深 度(米):")); SetDlgItemTextA(IDC_STATIC_HEAD, _T("负 责 人:")); SetDlgItemTextA(IDC_STATIC_WATER_LEVEL, _T("水 位(米):")); SetDlgItemTextA(IDC_STATIC_SAMPLING_INTERVAL, _T("采 样 间 隔(米):")); SetDlgItemTextA(IDC_STATIC_MEASURE_UNIT, _T("测 量 单 位:")); SetDlgItemTextA(IDC_STATIC_ALTITUDE_HIGH, _T("海 拔 高 度(米):")); SetDlgItemTextA(IDC_STATIC_LOGGING_SPEED, _T("测井速度(米/分):")); SetDlgItemTextA(IDC_STATIC_WORKING_DIRECTORY, _T("工 作 目 录:")); SetDlgItemTextA(IDC_STATIC_SCENE_TEMPERATURE, _T("现 场 温 度(℃):")); SetDlgItemTextA(IDC_STATIC_RECORD_ZERO_LONG, _T("记 录 零 长(米):")); SetDlgItemTextA(IDC_STATIC_FILE_NAME, _T("文 件 名:")); SetDlgItemTextA(IDC_STATIC_SP_R, _T("自电(V)")); SetDlgItemTextA(IDC_STATIC_LONG_R, _T("长电位电阻率(Ω)")); SetDlgItemTextA(IDC_STATIC_SHORT_R, _T("短电位电阻率(Ω)")); SetDlgItemTextA(IDC_STATIC_GRADIENT_R, _T("梯度电阻率(Ω)")); } SetColumnNameVisible(FALSE); RECT rcWnd; GetParent()->GetClientRect(&rcWnd); MoveWindow(&rcWnd, TRUE); RECT rcCompanyName; GetDlgItem(IDC_STATIC_COMPANY_NAME)->GetClientRect(&rcCompanyName); GetDlgItem(IDC_STATIC_COMPANY_NAME)->MoveWindow((rcWnd.right - rcWnd.left) / 2 - (rcCompanyName.right - rcCompanyName.left) / 2, COMPANY_NAME_TO_TOP_DISTANCE, rcCompanyName.right - rcCompanyName.left, rcCompanyName.bottom - rcCompanyName.top); // TODO: 在此添加额外的初始化 //绘制Static控件位置 RECT rcLastColumn = DrawFirstColumnStatic(rcWnd); rcLastColumn = DrawSecondColumnStatic(rcWnd, rcLastColumn); rcLastColumn.right = (rcWnd.right - rcWnd.left) / 3; rcLastColumn = DrawThreeColumnStatic(rcWnd, rcLastColumn); rcLastColumn = DrawFourColumnStatic(rcWnd, rcLastColumn); rcLastColumn.right = (rcWnd.right - rcWnd.left) / 3 * 2; rcLastColumn = DrawFiveColumnStatic(rcWnd, rcLastColumn); m_rcDrawData = DrawSixColumnStatic(rcWnd, rcLastColumn); m_rcWnd = rcWnd; CRect rcClientWnd; GetClientRect(&rcClientWnd); m_rcDrawData.left = rcClientWnd.left + 20; m_rcDrawData.right = rcClientWnd.right - 20; m_rcDrawData.top = m_rcDrawData.bottom + DRAW_DATA_TO_STATIC_DISTANCE; m_rcDrawData.bottom = m_rcDrawData.top + CUSTOM_COLUMN_HEIGHT; m_rcLithology.left = m_rcDrawData.left + LITHOLOGY_NAME_COLUMN_WIDTH + BOTTOM_DEPTH_COLUMN_WIDTH + STRATA_THICKNESS_COLUMN_WIDTH; m_rcLithology.right = m_rcDrawData.left + LITHOLOGY_NAME_COLUMN_WIDTH + BOTTOM_DEPTH_COLUMN_WIDTH + STRATA_THICKNESS_COLUMN_WIDTH + LITHOLOGY_COLUMN_WIDTH; m_rcLithology.top = m_rcDrawData.bottom; m_rcLithology.bottom = m_rcLithology.top;//默认情况不需要绘制 DrawTitleStatic(m_rcDrawData); //加载数据库数据 STLoggingLithologyInfo stLithologyInfo; if (LANG_ZHCN == g_iUILanguage) stLithologyInfo = CLoggingDataOper::GetInstance()->QueryLithologyInfoByName(_T("粘土")); else stLithologyInfo = CLoggingDataOper::GetInstance()->QueryLithologyInfoByName(_T("clay")); if (strlen(stLithologyInfo.szLithologyName) != 0 && strlen(stLithologyInfo.szLithologyPic) != 0) { STLithologyProfile stProfile; stProfile.fStartDepth = 1.0; stProfile.fEndDepth = 2.3; stProfile.fLithologyType = 1; strcpy(stProfile.szLithologyName, stLithologyInfo.szLithologyName); strcpy(stProfile.szLithologyPic, stLithologyInfo.szLithologyPic); m_vecLithologyProfile.push_back(stProfile); } return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } RECT CDialogLoggingWnd::DrawFirstColumnStatic(RECT rcWnd) { int iWidth = 0, iHeight = 0; RECT rc; GetDlgItem(IDC_STATIC_BORING_NUMBER)->GetClientRect(&rc); iWidth = rc.right - rc.left; iHeight = rc.bottom - rc.top; rc.left = rcWnd.left + 50; rc.right = rc.left + iWidth; rc.top = rcWnd.top + STATIC_TO_WND_TOP_DISTANCE; rc.bottom = iHeight + rc.top; GetDlgItem(IDC_STATIC_BORING_NUMBER)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeight; GetDlgItem(IDC_STATIC_WELL_DEPTH)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeight; GetDlgItem(IDC_STATIC_CALIPER)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeight; GetDlgItem(IDC_STATIC_SLEEVE_LENGTH)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeight; GetDlgItem(IDC_STATIC_WATER_LEVEL)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeight; GetDlgItem(IDC_STATIC_ALTITUDE_HIGH)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeight; GetDlgItem(IDC_STATIC_SCENE_TEMPERATURE)->MoveWindow(&rc); return rc; } RECT CDialogLoggingWnd::DrawSecondColumnStatic(RECT rcWnd, RECT rcLastColumn) { RECT rc; int iWidth = 0, iHeigh = 0; GetDlgItem(IDC_STATIC_BORING_NUMBER_VALUE)->GetClientRect(&rc); iWidth = rc.right - rc.left; iHeigh = rc.bottom - rc.top; rc.left = rcLastColumn.right + 5; //中文版本间距过大 if (LANG_ZHCN == g_iUILanguage) { rc.left = rcLastColumn.right - 20; } rc.right = rc.left + iWidth; rc.top = rcWnd.top + STATIC_TO_WND_TOP_DISTANCE; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_BORING_NUMBER_VALUE)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_WELL_DEPTH_VALUE)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_CALIPER_VALUE)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_SLEEVE_LENGTH_VALUE)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_WATER_LEVEL_VALUE)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_ALTITUDE_HIGH_VALUE)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_SCENE_TEMPERATURE_VALUE)->MoveWindow(&rc); return rc; } RECT CDialogLoggingWnd::DrawThreeColumnStatic(RECT rcWnd, RECT rcLastColumn) { RECT rc; int iWidth = 0, iHeigh = 0; GetDlgItem(IDC_STATIC_GROUND_TUBE_TYPE)->GetClientRect(&rc); iWidth = rc.right - rc.left; iHeigh = rc.bottom - rc.top; rc.left = rcLastColumn.right + 5; rc.right = rc.left + iWidth; rc.top = rcWnd.top + STATIC_TO_WND_TOP_DISTANCE; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_GROUND_TUBE_TYPE)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_LOGGING_DIRECTION)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_INITIAL_DEPTH)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_TERMINATION_DEPTH)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_SAMPLING_INTERVAL)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_LOGGING_SPEED)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_RECORD_ZERO_LONG)->MoveWindow(&rc); return rc; } RECT CDialogLoggingWnd::DrawFourColumnStatic(RECT rcWnd, RECT rcLastColumn) { RECT rc; int iWidth = 0, iHeigh = 0; GetDlgItem(IDC_STATIC_GROUND_TUBE_TYPE_VALUE)->GetClientRect(&rc); iWidth = rc.right - rc.left; iHeigh = rc.bottom - rc.top; rc.left = rcLastColumn.right + 5; //中文版本间距过大 if (LANG_ZHCN == g_iUILanguage) { rc.left = rcLastColumn.right - 30; } rc.right = rc.left + iWidth; rc.top = rcWnd.top + STATIC_TO_WND_TOP_DISTANCE; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_GROUND_TUBE_TYPE_VALUE)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_LOGGING_DIRECTION_VALUE)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_INITIAL_DEPTH_VALUE)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_TERMINATION_DEPTH_VALUE)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_SAMPLING_INTERVAL_VALUE)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_LOGGING_SPEED_VALUE)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_RECORD_ZERO_LONG_VALUE)->MoveWindow(&rc); return rc; } RECT CDialogLoggingWnd::DrawFiveColumnStatic(RECT rcWnd, RECT rcLastColumn) { RECT rc; int iWidth = 0, iHeigh = 0; GetDlgItem(IDC_STATIC_MEASURING_TIME)->GetClientRect(&rc); iWidth = rc.right - rc.left; iHeigh = rc.bottom - rc.top; rc.left = rcLastColumn.right + 5; rc.right = rc.left + iWidth; rc.top = rcWnd.top + STATIC_TO_WND_TOP_DISTANCE; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_MEASURING_TIME)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_MEASURING_LOCATION)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_OPERATOR)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_HEAD)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_MEASURE_UNIT)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_WORKING_DIRECTORY)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_FILE_NAME)->MoveWindow(&rc); return rc; } RECT CDialogLoggingWnd::DrawSixColumnStatic(RECT rcWnd, RECT rcLastColumn) { RECT rc; int iWidth = 0, iHeigh = 0; GetDlgItem(IDC_STATIC_MEASURING_TIME_VALUE)->GetClientRect(&rc); iWidth = rc.right - rc.left; iHeigh = rc.bottom - rc.top; rc.left = rcLastColumn.right + 5; if (LANG_ZHCN == g_iUILanguage) { rc.left = rcLastColumn.right - 30; } rc.right = rc.left + iWidth; rc.top = rcWnd.top + STATIC_TO_WND_TOP_DISTANCE; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_MEASURING_TIME_VALUE)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_MEASURING_LOCATION_VALUE)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_OPERATOR_VALUE)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_HEAD_VALUE)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_MEASURE_UNIT_VALUE)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_WORKING_DIRECTORY_VALUE)->MoveWindow(&rc); rc.top = rc.bottom + STATIC_HEIGHT_INTERVAL; rc.bottom = rc.top + iHeigh; GetDlgItem(IDC_STATIC_FILE_NAME_VALUE)->MoveWindow(&rc); return rc; } void CDialogLoggingWnd::DrawTitleStatic(RECT rcWnd) { RECT rc; int iWidth = 0, iHeigh = 0, iDrawStartPosition; GetDlgItem(IDC_STATIC_LITHOLOGY_NAME)->GetClientRect(&rc); iWidth = rc.right - rc.left; iHeigh = rc.bottom - rc.top; rc.top = rcWnd.top + 40; rc.bottom = rc.top + iHeigh; iDrawStartPosition = rcWnd.left; rc.left = iDrawStartPosition + LITHOLOGY_NAME_COLUMN_WIDTH / 2 - iWidth / 2; rc.right = rc.left + iWidth; GetDlgItem(IDC_STATIC_LITHOLOGY_NAME)->MoveWindow(&rc); iDrawStartPosition += LITHOLOGY_NAME_COLUMN_WIDTH; rc.left = iDrawStartPosition + BOTTOM_DEPTH_COLUMN_WIDTH / 2 - iWidth / 2; rc.right = rc.left + iWidth; GetDlgItem(IDC_STATIC_BOTTOM_DEPTH)->MoveWindow(&rc); iDrawStartPosition += BOTTOM_DEPTH_COLUMN_WIDTH; rc.left = iDrawStartPosition + STRATA_THICKNESS_COLUMN_WIDTH / 2 - iWidth / 2; rc.right = rc.left + iWidth; GetDlgItem(IDC_STATIC_STRATA_THICKNESS)->MoveWindow(&rc); iDrawStartPosition += STRATA_THICKNESS_COLUMN_WIDTH; rc.left = iDrawStartPosition + LITHOLOGY_COLUMN_WIDTH / 2 - iWidth / 2; rc.right = rc.left + iWidth; GetDlgItem(IDC_STATIC_LITHOLOGY)->MoveWindow(&rc); iDrawStartPosition += LITHOLOGY_COLUMN_WIDTH; rc.left = iDrawStartPosition + DEPTH_COLUMN_WIDTH / 2 - iWidth / 2; rc.right = rc.left + iWidth; GetDlgItem(IDC_STATIC_WELL_DEPTH_M)->MoveWindow(&rc); iDrawStartPosition += DEPTH_COLUMN_WIDTH; float fRemindWidth = (rcWnd.right - iDrawStartPosition) / 4; //绘制SP R Low值位置 RECT rcR, rcLowStatic, rcHighStatic; int iLowHighWidth, iLowHighHeigh; GetDlgItem(IDC_STATIC_SP_R_LOW_VALUE)->GetClientRect(&rcLowStatic); iLowHighWidth = rcLowStatic.right - rcLowStatic.left; iLowHighHeigh = rcLowStatic.bottom - rcLowStatic.top; rcHighStatic.bottom = rcLowStatic.bottom = rcWnd.bottom - DISTANCE_TO_BOTTOM_FRAME; rcHighStatic.top = rcLowStatic.top = rcLowStatic.bottom - iLowHighHeigh; rcLowStatic.left = iDrawStartPosition + 5; rcLowStatic.right = rcLowStatic.left + iLowHighWidth; GetDlgItem(IDC_STATIC_SP_R_LOW_VALUE)->MoveWindow(&rcLowStatic); //绘制SP R标题位置 GetDlgItem(IDC_STATIC_SP_R)->GetClientRect(&rcR); iWidth = rcR.right - rcR.left; iHeigh = rcR.bottom - rcR.top; rc.top = rcWnd.top + CUSTOM_COLUMN_HEIGHT / 2 - iHeigh / 2; rc.bottom = rc.top + iHeigh; rc.left = iDrawStartPosition + fRemindWidth / 2 - iWidth / 2; rc.right = rc.left + iWidth; GetDlgItem(IDC_STATIC_SP_R)->MoveWindow(&rc); //绘制SP R High值位置 iDrawStartPosition += fRemindWidth; rcHighStatic.right = iDrawStartPosition - DISTANCE_TO_RIGHT_FRAME; rcHighStatic.left = rcHighStatic.right - iLowHighWidth; GetDlgItem(IDC_STATIC_SP_R_HIGH_VALUE)->MoveWindow(&rcHighStatic); //绘制Long R Low值位置 rcLowStatic.left = iDrawStartPosition + 5; rcLowStatic.right = rcLowStatic.left + iLowHighWidth; GetDlgItem(IDC_STATIC_LONG_R_LOW_VALUE)->MoveWindow(&rcLowStatic); //绘制LongR标题 rc.left = iDrawStartPosition + fRemindWidth / 2 - iWidth / 2; rc.right = rc.left + iWidth; GetDlgItem(IDC_STATIC_LONG_R)->MoveWindow(&rc); iDrawStartPosition += fRemindWidth; //绘制LongR High值位置 rcHighStatic.right = iDrawStartPosition - DISTANCE_TO_RIGHT_FRAME; rcHighStatic.left = rcHighStatic.right - iLowHighWidth; GetDlgItem(IDC_STATIC_LONG_R_HIGH_VALUE)->MoveWindow(&rcHighStatic); //绘制Short R Low值位置 rcLowStatic.left = iDrawStartPosition + 5; rcLowStatic.right = rcLowStatic.left + iLowHighWidth; GetDlgItem(IDC_STATIC_SHORT_R_LOW_VALUE)->MoveWindow(&rcLowStatic); //绘制Short R标题位置 rc.left = iDrawStartPosition + fRemindWidth / 2 - iWidth / 2; rc.right = rc.left + iWidth; GetDlgItem(IDC_STATIC_SHORT_R)->MoveWindow(&rc); //绘制Gradient R标题 iDrawStartPosition += fRemindWidth; //绘制Short R High值位置 rcHighStatic.right = iDrawStartPosition - DISTANCE_TO_RIGHT_FRAME; rcHighStatic.left = rcHighStatic.right - iLowHighWidth; GetDlgItem(IDC_STATIC_SHORT_R_HIGH_VALUE)->MoveWindow(&rcHighStatic); //绘制Gradient R Low值位置 rcLowStatic.left = iDrawStartPosition + 5; rcLowStatic.right = rcLowStatic.left + iLowHighWidth; GetDlgItem(IDC_STATIC_GRADIENT_R_LOW_VALUE)->MoveWindow(&rcLowStatic); rc.left = iDrawStartPosition + fRemindWidth / 2 - iWidth / 2; rc.right = rc.left + iWidth; GetDlgItem(IDC_STATIC_GRADIENT_R)->MoveWindow(&rc); //绘制Gradient R Hight值位置 rcHighStatic.right = rcWnd.right - DISTANCE_TO_RIGHT_FRAME; rcHighStatic.left = rcHighStatic.right - iLowHighWidth; GetDlgItem(IDC_STATIC_GRADIENT_R_HIGH_VALUE)->MoveWindow(&rcHighStatic); } void CDialogLoggingWnd::SetColumnNameVisible(BOOL bVisible) { GetDlgItem(IDC_STATIC_SP_R)->ShowWindow(bVisible); GetDlgItem(IDC_STATIC_LONG_R)->ShowWindow(bVisible); GetDlgItem(IDC_STATIC_SHORT_R)->ShowWindow(bVisible); GetDlgItem(IDC_STATIC_GRADIENT_R)->ShowWindow(bVisible); GetDlgItem(IDC_STATIC_SP_R_LOW_VALUE)->ShowWindow(bVisible); GetDlgItem(IDC_STATIC_SP_R_HIGH_VALUE)->ShowWindow(bVisible); GetDlgItem(IDC_STATIC_LONG_R_LOW_VALUE)->ShowWindow(bVisible); GetDlgItem(IDC_STATIC_LONG_R_HIGH_VALUE)->ShowWindow(bVisible); GetDlgItem(IDC_STATIC_SHORT_R_LOW_VALUE)->ShowWindow(bVisible); GetDlgItem(IDC_STATIC_SHORT_R_HIGH_VALUE)->ShowWindow(bVisible); GetDlgItem(IDC_STATIC_GRADIENT_R_LOW_VALUE)->ShowWindow(bVisible); GetDlgItem(IDC_STATIC_GRADIENT_R_HIGH_VALUE)->ShowWindow(bVisible); } void CDialogLoggingWnd::UpdateLowHighValue() { SetColumnNameVisible(TRUE); CString strText; strText.Format(_T("%.1f"), (m_fMinSPR - LOW_HIGH_DEVIATION_VALUE)<0 ? 0 : (m_fMinSPR - LOW_HIGH_DEVIATION_VALUE)); SetDlgItemTextA(IDC_STATIC_SP_R_LOW_VALUE, strText); strText.Format(_T("%.1f"), m_fMaxSPR + LOW_HIGH_DEVIATION_VALUE); SetDlgItemTextA(IDC_STATIC_SP_R_HIGH_VALUE, strText); strText.Format(_T("%.1f"), (m_fMinLR - LOW_HIGH_DEVIATION_VALUE)<0 ? 0 : (m_fMinLR - LOW_HIGH_DEVIATION_VALUE)); SetDlgItemTextA(IDC_STATIC_LONG_R_LOW_VALUE, strText); strText.Format(_T("%.1f"), m_fMaxLR + LOW_HIGH_DEVIATION_VALUE); SetDlgItemTextA(IDC_STATIC_LONG_R_HIGH_VALUE, strText); strText.Format(_T("%.1f"), (m_fMinSR - LOW_HIGH_DEVIATION_VALUE)<0 ? 0 : (m_fMinSR - LOW_HIGH_DEVIATION_VALUE)); SetDlgItemTextA(IDC_STATIC_SHORT_R_LOW_VALUE, strText); strText.Format(_T("%.1f"), m_fMaxSR + LOW_HIGH_DEVIATION_VALUE); SetDlgItemTextA(IDC_STATIC_SHORT_R_HIGH_VALUE, strText); strText.Format(_T("%.1f"), (m_fMinGR - LOW_HIGH_DEVIATION_VALUE)<0 ? 0 : (m_fMinGR - LOW_HIGH_DEVIATION_VALUE)); SetDlgItemTextA(IDC_STATIC_GRADIENT_R_LOW_VALUE, strText); strText.Format(_T("%.1f"), m_fMaxGR + LOW_HIGH_DEVIATION_VALUE); SetDlgItemTextA(IDC_STATIC_GRADIENT_R_HIGH_VALUE, strText); } UINT CDialogLoggingWnd::GetStartDrawDataHeight() { return m_uiStartDrawHeigh; } void CDialogLoggingWnd::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: 在此处添加消息处理程序代码 // 不为绘图消息调用 CDialogEx::OnPaint() CRect rcWnd; GetClientRect(&rcWnd); dc.FillSolidRect(rcWnd, RGB(255, 255, 255)); CPen pen; pen.CreatePen(PS_SOLID, 3, RGB(0, 0, 255)); dc.SelectObject(pen); CFont font; font.CreateFontA(25, 15, 0, 0, 700, FALSE, TRUE, FALSE, GB2312_CHARSET, 0, 0, 0, 0, _T("")); GetDlgItem(IDC_STATIC_COMPANY_NAME)->SetFont(&font); RECT rcDrawData = m_rcDrawData; //没有加载数据,或者无效数据 if (m_fWellDepth <= 0.000001) { dc.Rectangle(&rcDrawData); } else { rcDrawData.bottom = m_rcDrawData.bottom + DEPTH_SCALE_DISTANCE*(m_fWellDepth*ONE_DECIMETER_TO_HEIGHT + 10); ::SetWindowPos(m_hWnd, HWND_TOPMOST, m_rcWnd.left, m_rcWnd.top, m_rcWnd.right, rcDrawData.bottom, SWP_NOSIZE | SWP_NOMOVE); m_rcLithology.bottom = rcDrawData.bottom; dc.Rectangle(&rcDrawData); } CPen blackPen; blackPen.CreatePen(PS_SOLID, 1, RGB(0, 0, 0)); dc.SelectObject(blackPen); //横线 dc.MoveTo(rcDrawData.left, rcDrawData.top + CUSTOM_COLUMN_HEIGHT); dc.LineTo(rcDrawData.right, rcDrawData.top + CUSTOM_COLUMN_HEIGHT); m_uiStartDrawHeigh = rcDrawData.top + CUSTOM_COLUMN_HEIGHT; int iDrawStartPosition = rcDrawData.left + LITHOLOGY_NAME_COLUMN_WIDTH; dc.MoveTo(iDrawStartPosition, rcDrawData.top); dc.LineTo(iDrawStartPosition, rcDrawData.bottom); iDrawStartPosition += BOTTOM_DEPTH_COLUMN_WIDTH; dc.MoveTo(iDrawStartPosition, rcDrawData.top); dc.LineTo(iDrawStartPosition, rcDrawData.bottom); iDrawStartPosition += STRATA_THICKNESS_COLUMN_WIDTH; dc.MoveTo(iDrawStartPosition, rcDrawData.top); dc.LineTo(iDrawStartPosition, rcDrawData.bottom); iDrawStartPosition += LITHOLOGY_COLUMN_WIDTH; dc.MoveTo(iDrawStartPosition, rcDrawData.top); dc.LineTo(iDrawStartPosition, rcDrawData.bottom); //绘制深度刻度线 float fRightDepth = rcDrawData.left + LITHOLOGY_NAME_COLUMN_WIDTH + BOTTOM_DEPTH_COLUMN_WIDTH + STRATA_THICKNESS_COLUMN_WIDTH + LITHOLOGY_COLUMN_WIDTH + DEPTH_COLUMN_WIDTH; float fLeftDepth = fRightDepth - DEPTH_COLUMN_WIDTH; dc.MoveTo(fRightDepth, rcDrawData.top); dc.LineTo(fRightDepth, rcDrawData.bottom); if (m_vecDataInfo.size() > 0) { //绘制岩性柱状相关信息 if (m_vecLithologyProfile.size() > 0) { CString strText; int iSub = 0, iBmpIndex= 0;//商 float fMod = 0.0;//余数 int iProfileCount = m_vecLithologyProfile.size(); float fDrawHeight = 0,fTop,fBottom,fLeft; CDC memDC; CBitmap bmp; HBITMAP hBmp; BITMAP bitMap; CBitmap* pBmp = NULL; for (int i = 0; i < iProfileCount; i++) { //岩性柱状顶部线条 fTop = fDrawHeight = rcDrawData.top + CUSTOM_COLUMN_HEIGHT + m_vecLithologyProfile[i].fStartDepth* DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT; fLeft = rcDrawData.left + LITHOLOGY_NAME_COLUMN_WIDTH + BOTTOM_DEPTH_COLUMN_WIDTH + STRATA_THICKNESS_COLUMN_WIDTH; dc.MoveTo(fLeft, fDrawHeight); dc.LineTo(fLeftDepth, fDrawHeight); fBottom = fDrawHeight = rcDrawData.top + CUSTOM_COLUMN_HEIGHT + m_vecLithologyProfile[i].fEndDepth* DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT; //底部虚线 dc.MoveTo(rcDrawData.left, fDrawHeight); dc.LineTo(fLeftDepth, fDrawHeight); //绘制图片 memDC.CreateCompatibleDC(&dc); hBmp = (HBITMAP)LoadImage(AfxGetInstanceHandle(), m_vecLithologyProfile[i].szLithologyPic, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); memDC.SelectObject(hBmp); if (bmp.Attach(hBmp)) { bmp.GetBitmap(&bitMap); pBmp = memDC.SelectObject(&bmp); //分批次绘制 if (fBottom - fTop - 1 > (bitMap.bmHeight/4)) { iSub = (fBottom - fTop - 1) / (bitMap.bmHeight / 4); fMod = ((int)(fBottom - fTop) - 1) % (bitMap.bmHeight / 4); fTop += 1; for (iBmpIndex = 0; iBmpIndex < iSub; iBmpIndex++) { dc.StretchBlt(fLeft + 1, fTop, LITHOLOGY_COLUMN_WIDTH - 1, bitMap.bmHeight/4, &memDC, 0, 0, bitMap.bmWidth, bitMap.bmHeight, SRCCOPY); fTop += bitMap.bmHeight/4; } if (fMod > 0) { dc.StretchBlt(fLeft + 1, fTop, LITHOLOGY_COLUMN_WIDTH - 1, fBottom - fTop - 1, &memDC, 0, 0, bitMap.bmWidth, (fBottom - fTop - 1)*4, SRCCOPY); } } else { //一次可以绘制完 dc.StretchBlt(fLeft + 1, fTop+1, LITHOLOGY_COLUMN_WIDTH - 1, fBottom - fTop - 1, &memDC, 0, 0, bitMap.bmWidth, (fBottom - fTop - 1) * 4, SRCCOPY); } dc.SelectObject(pBmp); } //岩性名称 dc.TextOutA(rcDrawData.left + 10, fDrawHeight - 20, m_vecLithologyProfile[i].szLithologyName); //深度 strText.Format(_T("%.1f"), m_vecLithologyProfile[i].fEndDepth); dc.TextOutA(rcDrawData.left + LITHOLOGY_NAME_COLUMN_WIDTH + 10, fDrawHeight - 20, strText); } } //深度刻度线短横线 int iWellDepth = (int)m_fWellDepth; CString strDepthScale; for (int i = 0; i <= iWellDepth*ONE_DECIMETER_TO_HEIGHT; i++) { if (i % 5 == 0) { dc.MoveTo(fLeftDepth, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + i * DEPTH_SCALE_DISTANCE); dc.LineTo(fLeftDepth + DEPTH_LONG_SCALE_VALUE, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + i * DEPTH_SCALE_DISTANCE); dc.MoveTo(fRightDepth - DEPTH_LONG_SCALE_VALUE, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + i * DEPTH_SCALE_DISTANCE); dc.LineTo(fRightDepth, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + i * DEPTH_SCALE_DISTANCE); } else { dc.MoveTo(fLeftDepth, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + i * DEPTH_SCALE_DISTANCE); dc.LineTo(fLeftDepth + DEPTH_SHORT_SCALE_VALUE, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + i * DEPTH_SCALE_DISTANCE); dc.MoveTo(fRightDepth - DEPTH_SHORT_SCALE_VALUE, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + i * DEPTH_SCALE_DISTANCE); dc.LineTo(fRightDepth, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + i * DEPTH_SCALE_DISTANCE); } if ((i != 0) && (i % 10 == 0)) { strDepthScale.Format(_T("%d"), i/ONE_DECIMETER_TO_HEIGHT); dc.TextOutA(fLeftDepth + DEPTH_LONG_SCALE_VALUE + 10, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + i * DEPTH_SCALE_DISTANCE - 10, strDepthScale); } } //深度刻度线长横线,一米绘制10刻度 for (int i = 1; i <= iWellDepth; i++) { dc.MoveTo(fRightDepth, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + i * DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT); dc.LineTo(rcDrawData.right, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + i * DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT); } //数据部分虚线 CPen penDot; penDot.CreatePen(PS_DOT, 1, RGB(0, 0, 0)); dc.SelectObject(penDot); //竖线 iDrawStartPosition += DEPTH_COLUMN_WIDTH; float fRemindWidth = (rcDrawData.right - rcDrawData.left) - iDrawStartPosition; float fColumnWidth = fRemindWidth / TOTAL_DATA_COLUMN;//总共16列 for (int i = 1; i <= TOTAL_DATA_COLUMN; i++) { if (i % 4 == 0 && (i != TOTAL_DATA_COLUMN)) { //绘制不同电阻率之间的分割线 dc.SelectObject(blackPen); dc.MoveTo(fRightDepth + i*fColumnWidth, rcDrawData.top); dc.LineTo(fRightDepth + i*fColumnWidth, rcDrawData.bottom); } else { //绘制不同电阻率之间的虚线 dc.SelectObject(penDot); dc.MoveTo(fRightDepth + i*fColumnWidth, rcDrawData.top + CUSTOM_COLUMN_HEIGHT); dc.LineTo(fRightDepth + i*fColumnWidth, rcDrawData.bottom); } } //绘制SP数据线 dc.SelectObject(blackPen); float fStartSPPoint = fRightDepth; float fStartLPoint = fStartSPPoint + fColumnWidth * 4; float fStartSPoint = fStartLPoint + fColumnWidth * 4; float fStartGPoint = fStartSPoint + fColumnWidth * 4; float fSPCellWidth = (fColumnWidth * 4) / (m_fMaxSPR + LOW_HIGH_DEVIATION_VALUE - (m_fMinSPR - LOW_HIGH_DEVIATION_VALUE)); float fLRCellWidth = (fColumnWidth * 4) / (m_fMaxLR + LOW_HIGH_DEVIATION_VALUE - (m_fMinLR - LOW_HIGH_DEVIATION_VALUE)); float fSRCellWidth = (fColumnWidth * 4) / (m_fMaxSR + LOW_HIGH_DEVIATION_VALUE - (m_fMinSR - LOW_HIGH_DEVIATION_VALUE)); float fGRCellWidth = (fColumnWidth * 4) / (m_fMaxGR + LOW_HIGH_DEVIATION_VALUE - (m_fMinGR - LOW_HIGH_DEVIATION_VALUE)); for (int i = 0; i < m_vecDataInfo.size(); i++) { if (i == 0) { //SP dc.MoveTo(fStartSPPoint + (m_vecDataInfo[i].fSPV - (m_fMinSPR - LOW_HIGH_DEVIATION_VALUE))*fSPCellWidth, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + m_vecDataInfo[i].fDepth * DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT);//每一个刻度对应一米间距,一米间距对应5个像素 dc.LineTo(fStartSPPoint + (m_vecDataInfo[i].fSPV - (m_fMinSPR - LOW_HIGH_DEVIATION_VALUE))*fSPCellWidth + 1, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + m_vecDataInfo[i].fDepth * DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT + 1); //LR dc.MoveTo(fStartLPoint + (m_vecDataInfo[i].fLR - (m_fMinLR - LOW_HIGH_DEVIATION_VALUE))*fLRCellWidth, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + m_vecDataInfo[i].fDepth* DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT);//每一个刻度对应一米间距,一米间距对应5个像素 dc.LineTo(fStartLPoint + (m_vecDataInfo[i].fLR - (m_fMinLR - LOW_HIGH_DEVIATION_VALUE))*fLRCellWidth + 1, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + m_vecDataInfo[i].fDepth* DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT + 1); //SR dc.MoveTo(fStartSPoint + (m_vecDataInfo[i].fSR - (m_fMinSR - LOW_HIGH_DEVIATION_VALUE))*fSRCellWidth, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + m_vecDataInfo[i].fDepth* DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT);//每一个刻度对应一米间距,一米间距对应5个像素 dc.LineTo(fStartSPoint + (m_vecDataInfo[i].fSR - (m_fMinSR - LOW_HIGH_DEVIATION_VALUE))*fSRCellWidth + 1, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + m_vecDataInfo[i].fDepth* DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT + 1); //GR dc.MoveTo(fStartGPoint + (m_vecDataInfo[i].fGR - (m_fMinGR - LOW_HIGH_DEVIATION_VALUE))*fGRCellWidth, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + m_vecDataInfo[i].fDepth* DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT);//每一个刻度对应一米间距,一米间距对应5个像素 dc.LineTo(fStartGPoint + (m_vecDataInfo[i].fGR - (m_fMinGR - LOW_HIGH_DEVIATION_VALUE))*fGRCellWidth + 1, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + m_vecDataInfo[i].fDepth* DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT + 1); } else { //SP dc.MoveTo(fStartSPPoint + (m_vecDataInfo[i - 1].fSPV - (m_fMinSPR - LOW_HIGH_DEVIATION_VALUE))*fSPCellWidth, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + m_vecDataInfo[i - 1].fDepth* DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT);//每一个刻度对应一米间距,一米间距对应5个像素 dc.LineTo(fStartSPPoint + (m_vecDataInfo[i].fSPV - (m_fMinSPR - LOW_HIGH_DEVIATION_VALUE))*fSPCellWidth, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + m_vecDataInfo[i].fDepth* DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT); //LR dc.MoveTo(fStartLPoint + (m_vecDataInfo[i - 1].fLR - (m_fMinLR - LOW_HIGH_DEVIATION_VALUE))*fLRCellWidth, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + m_vecDataInfo[i - 1].fDepth* DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT);//每一个刻度对应一米间距,一米间距对应5个像素 dc.LineTo(fStartLPoint + (m_vecDataInfo[i].fLR - (m_fMinLR - LOW_HIGH_DEVIATION_VALUE))*fLRCellWidth, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + m_vecDataInfo[i].fDepth* DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT); //SR dc.MoveTo(fStartSPoint + (m_vecDataInfo[i - 1].fSR - (m_fMinSR - LOW_HIGH_DEVIATION_VALUE))*fSRCellWidth, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + m_vecDataInfo[i - 1].fDepth* DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT);//每一个刻度对应一米间距,一米间距对应5个像素 dc.LineTo(fStartSPoint + (m_vecDataInfo[i].fSR - (m_fMinSR - LOW_HIGH_DEVIATION_VALUE))*fSRCellWidth, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + m_vecDataInfo[i].fDepth* DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT); //GR dc.MoveTo(fStartGPoint + (m_vecDataInfo[i - 1].fGR - (m_fMinGR - LOW_HIGH_DEVIATION_VALUE))*fGRCellWidth, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + m_vecDataInfo[i - 1].fDepth* DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT);//每一个刻度对应一米间距,一米间距对应5个像素 dc.LineTo(fStartGPoint + (m_vecDataInfo[i].fGR - (m_fMinGR - LOW_HIGH_DEVIATION_VALUE))*fGRCellWidth, rcDrawData.top + CUSTOM_COLUMN_HEIGHT + m_vecDataInfo[i].fDepth* DEPTH_SCALE_DISTANCE*ONE_DECIMETER_TO_HEIGHT); } } } } HBRUSH CDialogLoggingWnd::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if (CTLCOLOR_STATIC == nCtlColor) { static HBRUSH hbrStatic = ::CreateSolidBrush(RGB(255, 255, 255)); //COLOR是你想设置的背景颜色 此处必须为静态变量,否则不能实现 pDC->SetBkColor(RGB(255, 255, 255)); pDC->SetTextColor(RGB(0, 0, 255)); return hbrStatic; //返回该刷 } // TODO: 在此更改 DC 的任何特性 // TODO: 如果默认的不是所需画笔,则返回另一个画笔 return hbr; } float CDialogLoggingWnd::OpenFile(CString strFolderPath, CString strFileName) { //更新画布大小 RECT rcWnd; GetParent()->GetClientRect(&rcWnd); MoveWindow(&rcWnd); /*if (m_bIsOpenFile) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("已经存在打开的文件")); else MessageBoxEx(NULL, _T("An open file already exists"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return FALSE; }*/ CString strFile; float fWellDepth = 0; //CFileDialog cfd(TRUE, _T(".xml"), _T("*.xml"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("xml Files(*.xml)|*.txt||"), NULL); //if (IDOK == cfd.DoModal()) { //m_bIsOpenFile = TRUE; //CString strFileName = cfd.GetPathName(); if (strFolderPath.IsEmpty() || strFileName.IsEmpty()) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("无效文件名")); else MessageBoxEx(NULL, _T("Invalid file name"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return FALSE; } strFile.Format(_T("%s\\%s.xml"), strFolderPath, strFileName); fWellDepth = LoadParamXMLFile(strFile); //m_strFileName.Format(_T("%s\\%s.dat"), cfd.GetFolderPath(), cfd.GetFileTitle()); strFile.Format(_T("%s\\%s.dat"), strFolderPath, strFileName); LoadDataDATFile(strFile); RedrawWindow(); } return TRUE; } BOOL CDialogLoggingWnd::CloseFile() { //清空参数 SetDlgItemTextA(IDC_STATIC_BORING_NUMBER_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_WELL_DEPTH_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_CALIPER_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_SLEEVE_LENGTH_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_WATER_LEVEL_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_ALTITUDE_HIGH_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_SCENE_TEMPERATURE_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_GROUND_TUBE_TYPE_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_LOGGING_DIRECTION_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_INITIAL_DEPTH_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_TERMINATION_DEPTH_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_SAMPLING_INTERVAL_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_LOGGING_SPEED_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_RECORD_ZERO_LONG_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_MEASURING_TIME_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_MEASURING_LOCATION_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_OPERATOR_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_HEAD_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_MEASURE_UNIT_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_WORKING_DIRECTORY_VALUE, _T("")); SetDlgItemTextA(IDC_STATIC_FILE_NAME_VALUE, _T("")); //清空绘制数据部分 SetColumnNameVisible(FALSE); m_fWellDepth = 0; m_vecDataInfo.clear(); m_vecLithologyProfile.clear(); RedrawWindow(); return TRUE; } //打开文件时,加载参数文件 float CDialogLoggingWnd::LoadParamXMLFile(CString strFilePath) { //加载参数文件 CMarkup xmlFile; bool bRes = xmlFile.Load(strFilePath); if (!bRes) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("解析xml文件失败")); else MessageBoxEx(NULL, _T("Failed to parse the XML file"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return FALSE; } xmlFile.FindElem(_T("measure")); //测试地点 xmlFile.FindChildElem(_T("measure_location")); SetDlgItemTextA(IDC_STATIC_MEASURING_LOCATION_VALUE, xmlFile.GetChildData()); //采样间隔 xmlFile.FindChildElem(_T("sample_interval")); SetDlgItemTextA(IDC_STATIC_SAMPLING_INTERVAL_VALUE, xmlFile.GetChildData()); //温度 xmlFile.FindChildElem(_T("temperature")); SetDlgItemTextA(IDC_STATIC_SCENE_TEMPERATURE_VALUE, xmlFile.GetChildData()); //井深 //xmlFile.FindChildElem(_T("height")); //SetDlgItemTextA(IDC_STATIC_WELL_DEPTH_VALUE, xmlFile.GetChildData()); //修改绘制矩形框的高度 //测试时间 xmlFile.FindChildElem(_T("test_date")); CString strTestTime = xmlFile.GetChildData(); xmlFile.FindChildElem(_T("test_time")); strTestTime += _T(" "); strTestTime += xmlFile.GetChildData(); SetDlgItemTextA(IDC_STATIC_MEASURING_TIME_VALUE, strTestTime); float fWellInitDepth,fWellEndDepth; xmlFile.FindChildElem(_T("initial_depth")); fWellInitDepth = atof(xmlFile.GetChildData()); //测试方向 0:由上往下测试 1:由下往上测试 xmlFile.FindChildElem(_T("WellTestDir")); CString strWellTestDir = xmlFile.GetChildData(); if (0 == atoi(xmlFile.GetChildData())) { if (LANG_ZHCN == g_iUILanguage) SetDlgItemTextA(IDC_STATIC_LOGGING_DIRECTION_VALUE, _T("向下")); else SetDlgItemTextA(IDC_STATIC_LOGGING_DIRECTION_VALUE, _T("down")); } else { if (LANG_ZHCN == g_iUILanguage) SetDlgItemTextA(IDC_STATIC_LOGGING_DIRECTION_VALUE, _T("向上")); else SetDlgItemTextA(IDC_STATIC_LOGGING_DIRECTION_VALUE, _T("up")); } //结束深度 xmlFile.FindChildElem(_T("WellEndDepth")); fWellEndDepth = atof(xmlFile.GetChildData()); SetDlgItemTextA(IDC_STATIC_TERMINATION_DEPTH_VALUE, xmlFile.GetChildData()); m_fWellDepth = fWellEndDepth - fWellInitDepth; //井深 CString strTemp; strTemp.Format(_T("%.2f"), m_fWellDepth); SetDlgItemTextA(IDC_STATIC_WELL_DEPTH_VALUE, strTemp); //测试间隔 xmlFile.FindChildElem(_T("WellInterval")); SetDlgItemTextA(IDC_STATIC_SAMPLING_INTERVAL_VALUE, xmlFile.GetChildData()); xmlFile.OutOfElem(); int iFlag = strFilePath.ReverseFind('\\'); if (iFlag != -1) { //工作目录 strTemp = strFilePath.Mid(0, iFlag); SetDlgItemTextA(IDC_STATIC_WORKING_DIRECTORY_VALUE, strTemp); //文件名 strTemp.Empty(); strTemp = strFilePath.Mid(iFlag + 1); SetDlgItemTextA(IDC_STATIC_FILE_NAME_VALUE, strTemp); } return m_fWellDepth; } //打开文件时,加载数据文件 BOOL CDialogLoggingWnd::LoadDataDATFile(CString strFilePath) { /*读取数据信息*/ CMarkup xmlDataFile; xmlDataFile.Load(strFilePath); xmlDataFile.FindElem(_T("TD")); xmlDataFile.FindChildElem("param"); xmlDataFile.FindChildElem("Data"); xmlDataFile.IntoElem(); int iTsn = 1; CStringArray strTdConArray; CString strNodeName, strTdCon, strShowErr; strNodeName.Format(_T("D%.5d"), iTsn); ST_DATA_INFO stDataInfo; BOOL bFirstEnter = TRUE; while (xmlDataFile.FindChildElem(strNodeName)) { memset(&stDataInfo, 0, sizeof(ST_DATA_INFO)); strTdCon.Empty(); strTdCon = xmlDataFile.GetChildData(); if (strTdCon.IsEmpty()) { if (LANG_ZHCN == g_iUILanguage) { strShowErr.Format(_T("获取 %s 子数据为空!!!"), strTdCon.GetBuffer(0)); AfxMessageBox(strShowErr.GetBuffer(0)); } else { strShowErr.Format(_T("Get %s childdata is empty!!!"), strTdCon.GetBuffer(0)); MessageBoxEx(NULL, strShowErr, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } } SplitterString(strTdConArray, strTdCon, _T(";")); if (strTdConArray.GetSize() < 11) { strShowErr.Empty(); if (LANG_ZHCN == g_iUILanguage) { strShowErr.Format(_T("%s的元素大小错误,应该至少为11,但实际上是%d"), strNodeName.GetBuffer(0), strTdConArray.GetSize()); AfxMessageBox(strShowErr.GetBuffer(0)); } else { strShowErr.Format(_T("%s 's element size error, should be at least 11 but actually is %d"), strNodeName.GetBuffer(0), strTdConArray.GetSize()); MessageBoxEx(NULL, strShowErr, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } xmlDataFile.OutOfElem(); return FALSE; } stDataInfo.fDepth = abs(atoi(strTdConArray.GetAt(0))); stDataInfo.fSPV = atoi(strTdConArray.GetAt(1)); stDataInfo.fLV = atoi(strTdConArray.GetAt(2)); stDataInfo.fLI = atoi(strTdConArray.GetAt(3)); stDataInfo.fLR = atoi(strTdConArray.GetAt(4)); stDataInfo.fSV = atoi(strTdConArray.GetAt(5)); stDataInfo.fSI = (float)atof(strTdConArray.GetAt(6)); stDataInfo.fSR = (float)atof(strTdConArray.GetAt(7)); stDataInfo.fGV = (float)atof(strTdConArray.GetAt(8)); stDataInfo.fGI = (float)atof(strTdConArray.GetAt(9)); stDataInfo.fGR = (float)atof(strTdConArray.GetAt(10)); if (bFirstEnter) { bFirstEnter = FALSE; m_fMinSPR = m_fMaxSPR = stDataInfo.fSPV; m_fMinLR = m_fMaxLR = stDataInfo.fLR; m_fMinSR = m_fMaxSR = stDataInfo.fSR; m_fMinGR = m_fMaxGR = stDataInfo.fGR; } else { //SP if (stDataInfo.fSPV < m_fMinSPR) { m_fMinSPR = stDataInfo.fSPV; } else if (stDataInfo.fSPV > m_fMaxSPR) { m_fMaxSPR = stDataInfo.fSPV; } //L if (stDataInfo.fLR < m_fMinLR) { m_fMinLR = stDataInfo.fLR; } else if (stDataInfo.fLR > m_fMaxLR) { m_fMaxLR = stDataInfo.fLR; } //R if (stDataInfo.fSR < m_fMinSR) { m_fMinSR = stDataInfo.fSR; } else if (stDataInfo.fSR > m_fMaxSR) { m_fMaxSR = stDataInfo.fSR; } //GR if (stDataInfo.fGR < m_fMinGR) { m_fMinGR = stDataInfo.fGR; } else if (stDataInfo.fGR > m_fMaxGR) { m_fMaxGR = stDataInfo.fGR; } } iTsn++; strNodeName.Empty(); if (iTsn <= 99999) { strNodeName.Format(_T("D%.5d"), iTsn); } else { strNodeName.Format(_T("D%d"), iTsn); } m_vecDataInfo.push_back(stDataInfo); } xmlDataFile.OutOfElem(); //更新控件值 UpdateLowHighValue(); return TRUE; } void CDialogLoggingWnd::OnMouseHover(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CString strTime; strTime.Format(_T("CDialogLoggingWnd::OnMouseHover %u\n"), GetCurrentTime()); OutputDebugString(strTime); CDialog::OnMouseHover(nFlags, point); } void CDialogLoggingWnd::OnMouseMove(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CDialog::OnMouseMove(nFlags, point); /*if (m_rcLithology.PtInRect(point)) { CClientDC dc(this); CPen pen; pen.CreatePen(PS_SOLID, 3, RGB(255, 95, 0)); dc.SelectObject(pen); dc.MoveTo(m_rcDrawData.right - 3, point.y); dc.LineTo(m_rcDrawData.left + 3, point.y); ReleaseDC(&dc); Invalidate(TRUE); }*/ // /*if (m_rcLithology.PtInRect(point)) { // CClientDC dc(this); // CPen pen; // pen.CreatePen(PS_SOLID, 3, RGB(255, 0, 0)); // dc.SelectObject(pen); // // dc.MoveTo(m_rcDrawData.right-3, point.y); // dc.LineTo(m_rcDrawData.left+3, point.y); // ReleaseDC(&dc); CPen pen; pen.CreatePen(PS_SOLID, 3, RGB(255, 127, 39)); m_pClientDC->SelectObject(pen); m_pClientDC->MoveTo(m_rcDrawData.right - 3, point.y); m_pClientDC->LineTo(m_rcDrawData.left + 3, point.y); m_pClientDC->SetROP2(R2_NOT); m_pClientDC->MoveTo(m_rcDrawData.right - 3, point.y); m_pClientDC->LineTo(m_rcDrawData.left + 3, point.y); }*/ /*if (m_rcLithology.PtInRect(point)) { CDC *pcdc = this->GetDC(); CPen newPen(PS_SOLID, 1, RGB(255, 0, 0)); CPen *pOldePen; pcdc->SelectStockObject(NULL_BRUSH); pOldePen = pcdc->SelectObject(&newPen); int nNew = SetROP2(pcdc->m_hDC, R2_NOT); //屏幕色取反 pcdc->MoveTo(m_rcDrawData.right - 3, point.y); pcdc->LineTo(m_rcDrawData.left + 3, point.y); SetROP2(pcdc->m_hDC, nNew); //TargetPos = point; pcdc->MoveTo(m_rcDrawData.right - 3, point.y); pcdc->LineTo(m_rcDrawData.left + 3, point.y); newPen.DeleteObject(); ReleaseDC(pcdc); }*/ } void CDialogLoggingWnd::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if (m_rcLithology.PtInRect(point)) { float fCurStartDepth, fCurEndDepth,fMinDifference = -1; float fCurDepth = (point.y - m_uiStartDrawHeigh)*1.0 / DEPTH_SCALE_DISTANCE; STLithologyProfile stProfile; int iItemCount = m_vecLithologyProfile.size(); for (int i = 0; i < iItemCount; i++) { //选出距离最近的线 if (fMinDifference == -1 || abs(m_vecLithologyProfile[i].fStartDepth - fCurDepth) < fMinDifference || abs(m_vecLithologyProfile[i].fEndDepth - fCurDepth) < fMinDifference) { if (abs(m_vecLithologyProfile[i].fStartDepth - fCurDepth) > abs(m_vecLithologyProfile[i].fEndDepth - fCurDepth)) { fCurStartDepth = m_vecLithologyProfile[i].fEndDepth; fMinDifference = abs(m_vecLithologyProfile[i].fEndDepth - fCurDepth); } else { fCurStartDepth = m_vecLithologyProfile[i].fStartDepth; fMinDifference = abs(m_vecLithologyProfile[i].fStartDepth - fCurDepth); } fCurEndDepth = fCurDepth; if (fCurStartDepth > fCurDepth) { fCurEndDepth = fCurStartDepth; fCurStartDepth = fCurDepth; } } } //绘制横线 CClientDC dc(this); CPen pen; pen.CreatePen(PS_SOLID, 3, RGB(255, 95, 0)); dc.SelectObject(pen); dc.MoveTo(m_rcDrawData.right - 3, point.y); dc.LineTo(m_rcDrawData.left + 3, point.y); ReleaseDC(&dc); CDialogLoggingLithologicWnd dlg; dlg.SetProfileList(m_vecLithologyProfile); dlg.SetStartEndDepth(fCurStartDepth, fCurEndDepth/ONE_DECIMETER_TO_HEIGHT); dlg.CenterWindow(); if (IDOK == dlg.DoModal()) { m_vecLithologyProfile = dlg.GetProfileList(); RedrawWindow(); } } CDialog::OnLButtonDown(nFlags, point); }