Files
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

497 lines
16 KiB
C++

#include "stdafx.h"
#include "CroodGridSetDlg.h"
#include "GlwGlobalVariable.h"
#include "CoordGrid.h"
#include "resource.h"
namespace
{
#if ADS <= 18
double _ttof(LPCTSTR psz)
{
if (!psz) return .0;
USES_CONVERSION;
return atof(W2A(psz));
}
#endif
}
int CcoordGridSetDlg::s_nMode = 0;
IMPLEMENT_DYNAMIC(CcoordGridSetDlg, CModelessDialog)
CcoordGridSetDlg::CcoordGridSetDlg(CWnd* pParent /*=NULL*/)
: CModelessDialog(CcoordGridSetDlg::IDD, pParent)
, m_bCheckEquationForm(FALSE)
, m_strTextStyle(_T(""))
, m_strTextHeight(_T(""))
{
}
CcoordGridSetDlg::~CcoordGridSetDlg()
{
}
void CcoordGridSetDlg::DoDataExchange(CDataExchange* pDX)
{
CModelessDialog::DoDataExchange(pDX);
DDX_Check(pDX, IDC_CHECK_EQUATION_FORM, m_bCheckEquationForm);
DDX_Control(pDX, IDC_COMBO_TEXT_STYLE, m_wndCmbTextStyle);
if (!pDX->m_bSaveAndValidate)
{
m_toolbar.CheckButton(IDC_BTN_POLYLINE, s_nMode==0);
m_toolbar.CheckButton(IDC_BTN_DIAGONAL_PT, s_nMode==1);
}
}
BEGIN_MESSAGE_MAP(CcoordGridSetDlg, CModelessDialog)
ON_BN_CLICKED(IDC_BTN_POLYLINE, &CcoordGridSetDlg::OnBnClickedBtnPolyline)
ON_BN_CLICKED(IDC_BTN_DIAGONAL_PT, &CcoordGridSetDlg::OnBnClickedBtnDiagonalPt)
ON_BN_CLICKED(IDC_BTN_TEXT_HEIGHT, &CcoordGridSetDlg::OnBnClickedBtnTextHeight)
ON_BN_CLICKED(IDC_CHECK_EQUATION_FORM, &CcoordGridSetDlg::OnBnClickedCheckEquationForm)
ON_BN_CLICKED(IDC_RADIO_CROSS_GRID, &CcoordGridSetDlg::OnBnClickedRadioCrossGrid)
ON_BN_CLICKED(IDC_RADIO_LINE_GRID, &CcoordGridSetDlg::OnBnClickedRadioLineGrid)
ON_CBN_SELCHANGE(IDC_COMBO_TEXT_HEIGHT, &CcoordGridSetDlg::OnCbnSelchangeComboTextHeight)
ON_CBN_EDITCHANGE(IDC_COMBO_TEXT_HEIGHT, &CcoordGridSetDlg::OnEditchangeComboTextHeight)
ON_CBN_SELCHANGE(IDC_COMBO_GRID_SPACING, &CcoordGridSetDlg::OnCbnSelchangeComboGridSpacing)
ON_CBN_SELCHANGE(IDC_COMBO_TEXT_STYLE, &CcoordGridSetDlg::OnCbnSelchangeComboTextStyle)
ON_WM_CLOSE()
ON_CBN_EDITCHANGE(IDC_COMBO_GRID_SPACING, &CcoordGridSetDlg::OnCbnEditchangeComboGridSpacing)
ON_CBN_KILLFOCUS(IDC_COMBO_GRID_SPACING, &CcoordGridSetDlg::OnCbnKillfocusComboGridSpacing)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()
BOOL CcoordGridSetDlg::LoadTextStyle()
{
XSymbolList lstStyle(_T("STYLE"));//控件初始化
m_wndCmbTextStyle.ResetContent();
for (int m = 0; m < lstStyle.Length(); m++)
{
CString strTemp = lstStyle[m];
m_wndCmbTextStyle.AddString(lstStyle[m]);
}
int nRet = m_wndCmbTextStyle.FindStringExact(0, m_strTextStyle);
if (nRet < 0) //当前图纸没有此文字样式
{
if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage))
SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage);
CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage);
pDataManage->SetDefalutTextStyleAndTextHight();
nRet = m_wndCmbTextStyle.FindStringExact(0, m_strTextStyle);
if (nRet < 0)
nRet = 0;
}
m_wndCmbTextStyle.SetCurSel(nRet);
return TRUE;
}
void CcoordGridSetDlg::LoadTextHeightSize(int iID)
{
((CComboBox*)GetDlgItem(iID))->InsertString(0, _T("1.0")); //0
((CComboBox*)GetDlgItem(iID))->InsertString(1, _T("1.5")); //1
((CComboBox*)GetDlgItem(iID))->InsertString(2, _T("2.0")); //2
((CComboBox*)GetDlgItem(iID))->InsertString(3, _T("2.5")); //3
((CComboBox*)GetDlgItem(iID))->InsertString(4, _T("3.0")); //4
((CComboBox*)GetDlgItem(iID))->InsertString(5, _T("3.5")); //5
((CComboBox*)GetDlgItem(iID))->InsertString(6, _T("5.0")); //6
((CComboBox*)GetDlgItem(iID))->InsertString(7, _T("7.0")); //7
((CComboBox*)GetDlgItem(iID))->InsertString(8, _T("10.0")); //8
((CComboBox*)GetDlgItem(iID))->InsertString(9, _T("14.0")); //9
((CComboBox*)GetDlgItem(iID))->InsertString(10, _T("20.0")); //10
}
void CcoordGridSetDlg::LoadGridSpacingSize(int iID)
{
((CComboBox*)GetDlgItem(iID))->InsertString(0, _T("20")); //0
((CComboBox*)GetDlgItem(iID))->InsertString(1, _T("25")); //1
((CComboBox*)GetDlgItem(iID))->InsertString(2, _T("50")); //2
((CComboBox*)GetDlgItem(iID))->InsertString(3, _T("100")); //3
((CComboBox*)GetDlgItem(iID))->InsertString(4, _T("200")); //4
}
BOOL CcoordGridSetDlg::OnInitDialog()
{
//文字样式
CModelessDialog::OnInitDialog();
CAcModuleResourceOverride vTmp;
m_toolbar.Create( WS_VISIBLE | WS_CHILD |CCS_BOTTOM| TBSTYLE_TOOLTIPS
| CCS_ADJUSTABLE ,CRect(0,0,0,0), this, IDB_BTM_BTNS);
TBBUTTON *pIndex,
*pRTF_Button = new TBBUTTON[2];
pIndex = pRTF_Button;
memset(&pRTF_Button[0] ,NULL, sizeof(TBBUTTON));
pRTF_Button[0].iBitmap = 0;
pRTF_Button[0].idCommand = IDC_BTN_POLYLINE;
pRTF_Button[0].fsStyle = TBSTYLE_CHECKGROUP;
pRTF_Button[0].fsState = TBSTATE_ENABLED;
memset(&pRTF_Button[1] ,NULL, sizeof(TBBUTTON));
pRTF_Button[1].iBitmap = 1;
pRTF_Button[1].idCommand = IDC_BTN_DIAGONAL_PT;
pRTF_Button[1].fsStyle = TBSTYLE_CHECKGROUP;
pRTF_Button[1].fsState = TBSTATE_ENABLED;
CSize size(16, 15);
m_toolbar.SetButtonSize(size);
m_toolbar.AddButtons(2, pRTF_Button);
delete[] pRTF_Button;
m_toolbar.AddBitmap(2, IDB_BTM_BTNS);
m_toolbar.AutoSize();
if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage))
SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage);
CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage);
m_strTextStyle = pDataManage->GetTextStyle();
LoadTextStyle();//设置文字样式下拉框
LoadTextHeightSize(IDC_COMBO_TEXT_HEIGHT);
LoadGridSpacingSize(IDC_COMBO_GRID_SPACING);
if (kCrossGrid == pDataManage->GetGirdType())
{
OnBnClickedRadioCrossGrid();
}
else
{
OnBnClickedRadioLineGrid();
}
//等式形式
m_bCheckEquationForm = pDataManage->GetEquationForm();
//网格间距
int iGridSpacing = 0;
if (DocGetMeterUnitDraw())
iGridSpacing = pDataManage->GetGridSpacing();
else
iGridSpacing = pDataManage->GetGridSpacing() / 1000;
CString strGridSpading(_T(""));
strGridSpading.Format(_T("%d"), iGridSpacing);
m_strGridSpacing = strGridSpading;
int nRet = ((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->FindStringExact(0, strGridSpading);
if (nRet < 0) // 当前图纸没有此网格间距
{
((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->InsertString(0, strGridSpading);
((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->SetCurSel(0);
UpdateData(FALSE);
}
else
((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->SetCurSel(nRet);
//字高
m_strTextHeight.Format(_T("%0.1f"), pDataManage->GetTextHeight());
nRet = ((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->FindStringExact(0, m_strTextHeight);
if (nRet < 0) // 当前图纸没有此文字高度
{
((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->InsertString(0, m_strTextHeight);
((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->SetCurSel(0);
UpdateData(FALSE);
}
else
((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->SetCurSel(nRet);
//绘制模式,等待
if (kSelectPolyLine == pDataManage->GetDrawType())
s_nMode = 0;
else
s_nMode = 1;
EnableToolTips(TRUE);
m_wndToolTip.Create(this, TTS_ALWAYSTIP);
m_wndToolTip.Activate(TRUE); //设置是否启用提示
m_wndToolTip.AddTool(GetDlgItem(IDC_STATIC_LINE), _T("按当前坐标系确定坐标值及网格文字显示方向"));
m_wndToolTip.AddTool(GetDlgItem(IDC_STATIC_CROSS), _T("按世界坐标系确定坐标值及网格文字显示方向"));
//更新界面控件
UpdateData(FALSE);
return TRUE;
}
void CcoordGridSetDlg::OnClose()
{
m_bUseEsc = true;
if (m_bModeless)
{
acedPostCommand(_T("\33\33"));
}
else
{
CModelessDialog::OnClose();
}
}
void CcoordGridSetDlg::OnDestroy()
{
CModelessDialog::OnDestroy();
}
//绘制方式,取多段线
void CcoordGridSetDlg::OnBnClickedBtnPolyline()
{
s_nMode = 0;
if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage))
SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage);
CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage);
pDataManage->SetDrawType(kSelectPolyLine);
m_bUseEsc = false;
acedPostCommand(_T("\33"));
}
//绘制方式,取对角点
void CcoordGridSetDlg::OnBnClickedBtnDiagonalPt()
{
s_nMode = 1;
if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage))
SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage);
CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage);
pDataManage->SetDrawType(kSelectDiagonalPt);
m_bUseEsc = false;
acedPostCommand(_T("\33"));
}
//网格类型,十字交叉
void CcoordGridSetDlg::OnBnClickedRadioCrossGrid()
{
if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage))
SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage);
CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage);
pDataManage->SetGirdType(kCrossGrid);
((CButton *)GetDlgItem(IDC_RADIO_CROSS_GRID))->SetCheck(TRUE);
((CButton *)GetDlgItem(IDC_RADIO_LINE_GRID))->SetCheck(FALSE);
GetDlgItem(IDC_STATIC_X)->SetWindowTextW(_T("X"));
GetDlgItem(IDC_STATIC_Y)->SetWindowTextW(_T("Y"));
}
//网格类型,网格通线
void CcoordGridSetDlg::OnBnClickedRadioLineGrid()
{
if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage))
SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage);
CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage);
pDataManage->SetGirdType(kLineGrid);
((CButton *)GetDlgItem(IDC_RADIO_CROSS_GRID))->SetCheck(FALSE);
((CButton *)GetDlgItem(IDC_RADIO_LINE_GRID))->SetCheck(TRUE);
GetDlgItem(IDC_STATIC_X)->SetWindowTextW(_T("A"));
GetDlgItem(IDC_STATIC_Y)->SetWindowTextW(_T("B"));
}
//拾取字高
void CcoordGridSetDlg::OnBnClickedBtnTextHeight()
{
double dHeight = _tstof(m_strTextHeight)*DocGetPScale();
BeginEditorCommand();
if (GetDist(_T("\n字高"), dHeight, RSG_NOZERO | RSG_NONEG) == RTNORM) {
dHeight /= DocGetPScale();
m_strTextHeight.Format(_T("%.1f"), dHeight);
}
CompleteEditorCommand();
int nRet = ((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->FindStringExact(0, m_strTextHeight);
if (nRet < 0) // 当前没有此文字高度
{
((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->InsertString(0, m_strTextHeight);
((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->SetCurSel(0);
UpdateData(FALSE);
}
else
((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->SetCurSel(nRet);
OnCbnSelchangeComboTextHeight();
acedGetAcadDwgView()->SetFocus();
}
void CcoordGridSetDlg::OnEditchangeComboTextHeight()
{
UpdateData(TRUE);
CString strTextHeight(_T(""));
((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->GetWindowText(strTextHeight);
((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->AddString(strTextHeight);
double dGridSpacing = _ttof(strTextHeight);
if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage))
SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage);
CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage);
pDataManage->SetTextHeight(dGridSpacing);
}
//字高
void CcoordGridSetDlg::OnCbnSelchangeComboTextHeight()
{
if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage))
SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage);
CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage);
int iCurSel = ((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->GetCurSel();
CString strTextHeight(_T(""));
((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->GetLBText(iCurSel, strTextHeight);
double dGridSpacing = _ttof(strTextHeight);
pDataManage->SetTextHeight(dGridSpacing);
}
//等式形式
void CcoordGridSetDlg::OnBnClickedCheckEquationForm()
{
UpdateData(TRUE);
if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage))
SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage);
CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage);
if (m_bCheckEquationForm)
pDataManage->SetEuqationForm(true);
else
pDataManage->SetEuqationForm(false);
}
//网格间距
void CcoordGridSetDlg::OnCbnSelchangeComboGridSpacing()
{
if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage))
SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage);
CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage);
int iCurSel = ((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->GetCurSel();
CString strGrid(_T(""));
((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->GetLBText(iCurSel, strGrid);
int iGridSpacing = _ttoi(strGrid);
m_strGridSpacing = strGrid;
pDataManage->SetGridSpacing(iGridSpacing);
}
//文字样式
void CcoordGridSetDlg::OnCbnSelchangeComboTextStyle()
{
if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage))
SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage);
CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage);
int iCurSel = ((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_STYLE))->GetCurSel();
((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_STYLE))->GetLBText(iCurSel, m_strTextStyle);
pDataManage->SetTextStyle(m_strTextStyle);
}
void CcoordGridSetDlg::OnCbnEditchangeComboGridSpacing()
{
//网格间距允许输入大于0的数值,
//当输入小于等于0的数值、非数值或此项为空时,
//弹出错误对话框提示“请输入大于0的数值!”,同时间距值恢复到修改前数值;
CString strGrid(_T(""));
((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->GetWindowTextW(strGrid);
if (!strGrid.IsEmpty())
{
CString sTem;
sTem.Format(_T("%d"),_ttoi(strGrid));
if (sTem != strGrid || sTem == _T("0"))
{
AfxMessageBox(_T("请输入大于0的数值!"));
}
else
{
m_strGridSpacing = strGrid;
}
}
else
{
AfxMessageBox(_T("请输入大于0的数值!"));
}
}
void CcoordGridSetDlg::OnCbnKillfocusComboGridSpacing()
{
int nRet = ((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->FindStringExact(0, m_strGridSpacing);
if (nRet < 0) // 当前图纸没有此网格间距
{
((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->InsertString(0, m_strGridSpacing);
((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->SetCurSel(0);
}
else
((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->SetCurSel(nRet);
if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage))
SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage);
CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage);
int iGridSpacing = _ttoi(m_strGridSpacing);
pDataManage->SetGridSpacing(iGridSpacing);
}
// add by xly on 11o120 设置控件的显示与灰显
void CcoordGridSetDlg::SetItemEnable(BOOL bEnable)
{
GetDlgItem(IDC_BTN_POLYLINE)->EnableWindow(bEnable);
GetDlgItem(IDC_BTN_DIAGONAL_PT)->EnableWindow(bEnable);
}
HBRUSH CcoordGridSetDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CModelessDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (pWnd-> GetDlgCtrlID() == IDC_STATIC_CROSS || pWnd-> GetDlgCtrlID() == IDC_STATIC_LINE)
{
pDC-> SetTextColor(RGB(0,0,255)); //字体颜色
}
return hbr;
}
BOOL CcoordGridSetDlg::PreTranslateMessage(MSG* pMsg)
{
m_wndToolTip.RelayEvent(pMsg);
return CModelessDialog::PreTranslateMessage(pMsg);
}
// 工具栏提示
BOOL CcoordGridSetDlg::OnToolTipText( UINT, NMHDR * pNMHDR, LRESULT * pResult )
{
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
if (GetRoutingFrame() != NULL)
return FALSE;
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
CString strTipText;
UINT nID = (UINT)pNMHDR->idFrom;
if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{
return FALSE;
}
if (nID != 0)
{
{
CAcModuleResourceOverride vTmp;
strTipText.LoadString(nID);
}
#ifndef _UNICODE
if (pNMHDR->code == TTN_NEEDTEXTA)
{
lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
}
else
{
_mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
#else
if (pNMHDR->code == TTN_NEEDTEXTA)
{
_wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText));
}
else
{
lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
#endif
*pResult = 0;
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,SWP_NOACTIVATE|
SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER); return TRUE;
}
return TRUE;
}