// ManualDimAxisDlg.cpp : implementation file // #include "stdafx.h" #include "ManualDimAxisDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // 初始化对话框中的全局变量 BOOL CManualDimAxisDlg::m_bButCon = false; int CManualDimAxisDlg::m_iWhichSlected = 0; int CManualDimAxisDlg::m_iTxtorGrap = 0; CString CManualDimAxisDlg::m_sOneAxis = _T(""); CString CManualDimAxisDlg::m_sMutiAxis = _T(""); CString CManualDimAxisDlg::m_csStartAxis = _T(""); CString CManualDimAxisDlg::m_csEndAxis = _T(""); // add by xly on100826 引线长度控件的变量的初始值 double CManualDimAxisDlg::m_dLeaderLen = 10; IMPLEMENT_DYNAMIC(CManualDimAxisDlg, CModelessDialog) CManualDimAxisDlg::CManualDimAxisDlg(CWnd* pParent /*=NULL*/) : CModelessDialog(CManualDimAxisDlg::IDD, pParent) { //{{AFX_DATA_INIT(CManualDimAxisDlg) //}}AFX_DATA_INIT } void CManualDimAxisDlg::DoDataExchange(CDataExchange* pDX) { CModelessDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CManualDimAxisDlg) DDX_Check(pDX, IDC_CHK_CONTINUE, m_bButCon); DDX_Radio(pDX, IDC_RAD_SINGLE, m_iWhichSlected); DDX_Radio(pDX, IDC_RAD_TEXT, m_iTxtorGrap); DDX_Text(pDX, IDC_EDI_NUMAXIS, m_csAxis); DDX_Text(pDX, IDC_EDT_STNUM, m_csStartAxis); DDX_Text(pDX, IDC_EDT_ENDNUM, m_csEndAxis); // add by xly on100826 增加引线长度控件的变量关联 DDX_Text(pDX, IDC_CMB_LEADERLEN, m_dLeaderLen); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CManualDimAxisDlg, CModelessDialog) //{{AFX_MSG_MAP(CModelessDialog) ON_BN_CLICKED(IDC_RAD_SINGLE,OnBnClickedRadSingle) ON_BN_CLICKED(IDC_RAD_MUTI,OnBnClickedRadMuti) ON_BN_CLICKED(IDC_RAD_TEXT,OnBnClickedRadText) ON_BN_CLICKED(IDC_RAD_GRAPH,OnBnClickedRadGraph) ON_BN_CLICKED(IDC_CHK_CONTINUE, OnBnClickedChkContinue) ON_EN_KILLFOCUS(IDC_EDI_NUMAXIS, OnEnKillfocusEditAxisDim) ON_WM_PAINT() //}}AFX_MSG_MAP END_MESSAGE_MAP() BOOL CManualDimAxisDlg::OnInitDialog() { CModelessDialog::OnInitDialog(); if (m_iWhichSlected == 0) // 单轴号 { m_csAxis = m_sOneAxis; } else // 多轴号 { m_csAxis = m_sMutiAxis; } // 设置控件显示 SetCWndShowOrHide(); // 设置连续按钮是否可编辑 GetDlgItem(IDC_CHK_CONTINUE)->EnableWindow(m_iWhichSlected==1); // 设置幻灯片 SetPicture(); // 控件提示工具 AddTip(IDC_STC_NUM, _T("输入多个轴号, 以逗号或空格做为分隔。")); UpdateData(FALSE); return TRUE; } // 设置控件显示或隐藏 void CManualDimAxisDlg::SetCWndShowOrHide() { int nShow1 = SW_SHOW, // 控制轴号文本框和轴号编辑框 nShow2 = SW_SHOW, // 控制文本和图形按钮 nShow3 = SW_SHOW; // 控制起始、终止文本框和编辑框 if (m_iWhichSlected == 0) // 单轴号 { nShow2 = SW_HIDE; nShow3 = SW_HIDE; } else if (m_bButCon) // 多轴号,连续 { nShow1 = SW_HIDE; nShow2 = SW_HIDE; } else // 多轴号,不连续 { nShow3 = SW_HIDE; } GetDlgItem(IDC_STC_NUM)->ShowWindow(nShow1); GetDlgItem(IDC_EDI_NUMAXIS)->ShowWindow(nShow1); GetDlgItem(IDC_RAD_TEXT)->ShowWindow(nShow2); GetDlgItem(IDC_RAD_GRAPH)->ShowWindow(nShow2); GetDlgItem(IDC_EDT_STNUM)->ShowWindow(nShow3); GetDlgItem(IDC_EDT_ENDNUM)->ShowWindow(nShow3); GetDlgItem(IDC_STC_ST)->ShowWindow(nShow3); GetDlgItem(IDC_STC_ENT)->ShowWindow(nShow3); } // 设置幻灯片显示 void CManualDimAxisDlg::SetPicture() { XString sFilePath(256); if (m_iWhichSlected == 0) // 单轴号 { sFilePath << _T("TArch(manualdim01)"); } else if (m_bButCon) // 多轴号,连续 { sFilePath << _T("TArch(manualdim04)"); } else // 多轴号,不连续 { if (m_iTxtorGrap == 0) // 文字 { sFilePath << _T("TArch(manualdim02)"); } else // 图形 { sFilePath << _T("TArch(manualdim03)"); } } // 获得图片控件 CWnd* pWndBmp = GetDlgItem(IDC_STC_BMP); ASSERT(pWndBmp); // 获得图片区域 CDC *pDC = pWndBmp->GetDC(); CRect rect; pWndBmp->GetClientRect(rect); m_imgPreview.InitDC(pDC, rect, GetAcadBackColor()); m_imgPreview.PaintSlide(sFilePath); m_imgPreview.SetDC(NULL); pWndBmp->ReleaseDC(pDC); } // 单轴号 void CManualDimAxisDlg::OnBnClickedRadSingle() { UpdateData(TRUE); if (m_iWhichSlected == 0) // 单轴号 { m_csAxis = m_sOneAxis; } else // 多轴号 { m_csAxis = m_sMutiAxis; } // 设置连续按钮是否可编辑 GetDlgItem(IDC_CHK_CONTINUE)->EnableWindow(m_iWhichSlected == 1); // 设置控件显示 SetCWndShowOrHide(); // 设置幻灯片 SetPicture(); UpdateData(FALSE); } // 多轴号 void CManualDimAxisDlg::OnBnClickedRadMuti() { UpdateData(TRUE); if (m_iWhichSlected == 0) // 单轴号 { m_csAxis = m_sOneAxis; } else // 多轴号 { m_csAxis = m_sMutiAxis; } // 设置连续按钮是否可编辑 GetDlgItem(IDC_CHK_CONTINUE)->EnableWindow(m_iWhichSlected == 1); // 设置控件显示 SetCWndShowOrHide(); // 设置幻灯片 SetPicture(); UpdateData(FALSE); } // 连续 void CManualDimAxisDlg::OnBnClickedChkContinue() { UpdateData(TRUE); // 设置控件显示 SetCWndShowOrHide(); // 设置幻灯片 SetPicture(); UpdateData(FALSE); } // 文字 void CManualDimAxisDlg::OnBnClickedRadText() { UpdateData(TRUE); // 设置幻灯片 SetPicture(); UpdateData(FALSE); } // 图形 void CManualDimAxisDlg::OnBnClickedRadGraph() { UpdateData(TRUE); // 设置幻灯片 SetPicture(); UpdateData(FALSE); } // 窗口重绘消息 void CManualDimAxisDlg::OnPaint() { CPaintDC dc(this); CRect rcClip, rcImage; dc.GetClipBox(&rcClip); CWnd *pImageBox = GetDlgItem(IDC_STC_BMP); if (pImageBox) { pImageBox->GetWindowRect(&rcImage); ScreenToClient(&rcImage); if (!rcImage.IntersectRect(&rcImage, &rcClip)) return; CDC *pDC = pImageBox->GetDC(); m_imgPreview.SetDC(pDC); m_imgPreview.Redraw(); m_imgPreview.SetDC(NULL); pImageBox->ReleaseDC(pDC); } } // 改变标注内容 void CManualDimAxisDlg::OnEnKillfocusEditAxisDim() { UpdateData(TRUE); m_csAxis.TrimLeft(); m_csAxis.TrimRight(); if (m_iWhichSlected == 0) // 单轴号 { m_sOneAxis = m_csAxis; } else // 多轴号 { m_sMutiAxis = m_csAxis; } UpdateData(FALSE); } // 获得首个轴号内容,试用于单轴号,以及文字类多轴号(圈内部分) CString CManualDimAxisDlg::GetFirstAxis() { UpdateData(TRUE); CString csAxis = m_csAxis; csAxis.TrimLeft(); csAxis.TrimRight(); if (m_iWhichSlected == 0) // 单轴号 { return csAxis; } // 多轴号圈内部分,拆分输入的字符串 CStringArray csAry; SeparatorNum(csAxis, _T(","), csAry); if (csAry.GetSize() == 2) // 以","为分隔,拆分成功 { csAxis = csAry.GetAt(0); return csAxis; } csAry.RemoveAll(); SeparatorNum(csAxis, _T(" "), csAry); if (csAry.GetSize() == 2) // 以" "为分隔,拆分成功 { csAxis = csAry.GetAt(0); return csAxis; } csAry.RemoveAll(); SeparatorNum(csAxis, _T(" "), csAry); if (csAry.GetSize() == 2) // 以全角空格为分隔,拆分成功 { csAxis = csAry.GetAt(0); return csAxis; } csAry.RemoveAll(); SeparatorNum(csAxis, _T(","), csAry); if (csAry.GetSize() == 2) // 以全角逗号为分隔,拆分成功 { csAxis = csAry.GetAt(0); return csAxis; } // 各种连字符拆分均不成功,输出单文本形式 return csAxis; } // 获得其他轴号内容,试用于文字类多轴号(圈外部分) CString CManualDimAxisDlg::GetOtherAxis() { UpdateData(TRUE); CString csAxis = m_csAxis; // 文字类多轴号圈外部分拆分输入的字符串 CStringArray csAry; SeparatorNum(csAxis, _T(","), csAry); if(csAry.GetSize() == 2) // 以","为分隔,拆分成功 { csAxis = csAry.GetAt(1); return csAxis; } csAry.RemoveAll(); SeparatorNum(csAxis, _T(" "), csAry); if (csAry.GetSize() == 2) // 以" "为分隔,拆分成功 { csAxis = csAry.GetAt(1); return csAxis; } csAry.RemoveAll(); SeparatorNum(csAxis, _T(" "), csAry); if (csAry.GetSize() == 2) // 以全角空格为分隔,拆分成功 { csAxis = csAry.GetAt(1); return csAxis; } csAry.RemoveAll(); SeparatorNum(csAxis, _T(","), csAry); if (csAry.GetSize() == 2) // 以全角逗号为分隔,拆分成功 { csAxis = csAry.GetAt(1); return csAxis; } csAxis = _T(" "); // 没有文字部分 return csAxis; } // 获得全部轴号内容,试用于图形类多轴号,包括首个轴号 void CManualDimAxisDlg::GetAllAxis(CStringArray &aryAxis) { UpdateData(TRUE); CString csAxis = m_csAxis; aryAxis.RemoveAll(); // 图形类多轴号拆分输入的字符串 SeparatorNum(csAxis, _T(","), aryAxis); INT_PTR iLenAry = aryAxis.GetSize(); if (iLenAry > 1) // 以","为分隔,拆分成功 { return; } aryAxis.RemoveAll(); SeparatorNum(csAxis, _T(" "), aryAxis); iLenAry = aryAxis.GetSize(); if (iLenAry > 1) // 以" "为分隔,拆分成功 { return; } aryAxis.RemoveAll(); SeparatorNum(csAxis, _T(" "), aryAxis); iLenAry = aryAxis.GetSize(); if (iLenAry > 1) // 以全角空格为分隔,拆分成功 { return; } aryAxis.RemoveAll(); SeparatorNum(csAxis, _T(","), aryAxis); iLenAry = aryAxis.GetSize(); if (iLenAry > 1) // 以全角逗号为分隔,拆分成功 { return; } aryAxis.RemoveAll(); aryAxis.Add(csAxis); } // 获得起始、终止轴号内容 void CManualDimAxisDlg::GetStartAndEndAxis(CString &csStart, CString &csEnd) { UpdateData(TRUE); csStart = m_csStartAxis; csEnd = m_csEndAxis; } // 对用户输入的字符串进行解析,递归调用实现 // csSymb为分隔符,包括全角和半角的逗号,以及空格(多个空格时,自动合并为1个) // csText为等待解析的字符串 // aryAxis为返回的字符串数组:若单轴号,长度为1;若文字类多轴号,长度为2;若图形类多轴号,长度为n void CManualDimAxisDlg::SeparatorNum(CString csText, CString csSymb, CStringArray &aryAxis) { csText.TrimLeft(); // 去掉两侧空格 csText.TrimRight(); // 查找是否存在指定符号 int iPos = csText.Find(csSymb); if (iPos == -1) { aryAxis.Add(csText); // 单行字符串 return; } aryAxis.Add(csText.Left(iPos)); int iLen = (int)aryAxis.GetSize(), iSymbLen = csSymb.GetLength(); if (iLen == 1 && (m_iWhichSlected==1 && !m_bButCon && m_iTxtorGrap==0)) { iLen = csText.GetLength(); csText = csText.Right(iLen - iPos - iSymbLen); csText.TrimLeft(); // 去掉左侧空格 aryAxis.Add(csText); // 多行字符串,文字形式 return; } // 多行字符串,图形形式 iLen = csText.GetLength(); csText = csText.Right(iLen - iPos - iSymbLen); SeparatorNum(csText, csSymb, aryAxis); } // add by xly on 100826 获得引线的长度 double CManualDimAxisDlg::GetLeaderLen() { UpdateData(TRUE); return m_dLeaderLen; }