// VariableStringDlg.cpp : 实现文件 // #include "stdafx.h" #include "LaiPuLaser.h" #include "DlgVariableString.h" #include "afxdialogex.h" #include "ValStrFixed.h" #include "ValStrDate.h" #include "DlgValStrFixed.h" #include "DlgValStrDate.h" #include "DlgValStrTime.h" #include "DlgValStrSN.h" #include "DlgFontset.h" #include "GlobalFunction.h" #include "ObjTxt.h" #include "FontTypeMgr.h" #include "LogMgr.h" #include "MarkObjPropertieMgr.h" #include "CommandModifiString.h" #include "DlgFill.h" #include "CommandMgr.h" // CDlgVariableString 对话框 IMPLEMENT_DYNAMIC(CDlgVariableString, CDialogEx) CDlgVariableString::CDlgVariableString(CWnd* pParent /*=NULL*/) { IniCtrVal(); } CDlgVariableString::~CDlgVariableString() { } void CDlgVariableString::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_VAL_STR_LIST, m_ValStrList); DDX_Control(pDX, IDC_VAL_STR_TYPE_COMBO, m_ValStrTypeComb); DDX_Control(pDX, IDC_FONT_COMBO, m_FontNameComb); DDX_Control(pDX, IDC_FONT_TYPE_COMBO, m_FontTypeComb); DDX_Control(pDX, IDC_VAL_STR_CHECK, m_bValStrCheck); DDX_Text(pDX, IDC_STR_EDIT, m_String); } BEGIN_MESSAGE_MAP(CDlgVariableString, CDialogEx) ON_BN_CLICKED(IDC_ADD_VAL_STR_BTN, &CDlgVariableString::OnBnClickedAddValStrBtn) ON_BN_CLICKED(IDC_DEL_VAL_STR_BTN, &CDlgVariableString::OnBnClickedDelValStrBtn) ON_BN_CLICKED(IDC_UP_VAL_STR_BTN, &CDlgVariableString::OnBnClickedUpValStrBtn) ON_BN_CLICKED(IDC_DOWN_VAL_STR_BTN, &CDlgVariableString::OnBnClickedDownValStrBtn) ON_NOTIFY(NM_CLICK, IDC_VAL_STR_LIST, &CDlgVariableString::OnNMClickValStrList) ON_BN_CLICKED(IDC_MODIF_VAL_STR_BTN, &CDlgVariableString::OnBnClickedModifValStrBtn) ON_BN_CLICKED(IDC_FONT_BTN, &CDlgVariableString::OnBnClickedFontBtn) ON_BN_CLICKED(IDC_VAL_STR_CHECK, &CDlgVariableString::OnBnClickedValStrCheck) ON_BN_CLICKED(IDC_COMMIT_BTN, &CDlgVariableString::OnBnClickedCommitBtn) ON_CBN_SELCHANGE(IDC_FONT_COMBO,OnCbnFontNameChange) ON_CBN_SELCHANGE(IDC_FONT_TYPE_COMBO,OnCbnFontTypeChange) ON_BN_CLICKED(IDC_FILL_BTN, &CDlgVariableString::OnBnClickedFillBtn) END_MESSAGE_MAP() // CDlgVariableString 消息处理程序 #if 1//初始化 BOOL CDlgVariableString::OnInitDialog() { CDialogEx::OnInitDialog(); //初始化可变字符类型下拉列表 IniValStrTypeComb(); //初始化可变字符list IniValStrList(); //初始化字库文件下拉列表 IniFontStyleComb(); UpdateData(FALSE); return TRUE; } //初始化可变字符类型下拉列表 void CDlgVariableString::IniValStrTypeComb() { for(VAL_STR_TYPR type = _STR_FIXED;type<_STR_ERROR;type = (VAL_STR_TYPR)(type+1)) { CValStrBase ValStrBase; ValStrBase.SetValStrType(type); m_ValStrTypeComb.InsertString(type,ValStrBase.GetValTypeStr()); } m_ValStrTypeComb.SetCurSel(0); } //初始化控件变量 void CDlgVariableString::IniCtrVal() { m_CurSelListIdx = -1; m_pObjString = NULL;//当前操作对象的指针 m_bValStr = false; m_String = ""; } //初始化字库文件下拉列表 void CDlgVariableString::IniFontStyleComb() { CFontTypeMgr &pFontTypeMgr = CFontTypeMgr::Instance(); //字体类型 pFontTypeMgr.FontTypeNameInsertToComb(m_FontTypeComb); //插入到下拉列表---------------------------------------------------------------------- pFontTypeMgr.UpdateFontNameComb(m_FontNameComb); } #endif //检查绑定 bool CDlgVariableString::Check() { if((m_pObjString)) return true; return false; } //DlgValStr 工厂 CDlgValStrBase *CDlgVariableString::DlgValStrFactory(VAL_STR_TYPR type) { CDlgValStrBase *p = NULL; switch(type) { case _STR_FIXED: p = new CDlgValStrFixed; break; case _STR_SN: p = new CDlgValStrSN; break; case _STR_DATE: p = new CDlgValStrDate; break; case _STR_TIME: p = new CDlgValStrTime; break; default: break; } return p; } #if 1//可变文本 //初始化可变字符list void CDlgVariableString::IniValStrList() { //设置风格 m_ValStrList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); //设置列 int idx = 0; m_ValStrList.InsertColumn(idx,"类型",LVCFMT_CENTER,50,-1); idx++; m_ValStrList.InsertColumn(idx,"内容",LVCFMT_CENTER,90,-1); } void CDlgVariableString::RefreshValStrList() { m_ValStrList.DeleteAllItems(); m_CurSelListIdx = -1; if(Check()) { m_ValString.InsertList(m_ValStrList); } UpdateData(FALSE); } //获取list 当前选择的行号 int CDlgVariableString::GetCurListIdx(CListCtrl &list) { POSITION pos = m_ValStrList.GetFirstSelectedItemPosition(); if (pos == NULL) { return -1; } else { while (pos) { int nItem = m_ValStrList.GetNextSelectedItem(pos); return nItem; } } return -1; } //单击列表 void CDlgVariableString::OnNMClickValStrList(NMHDR *pNMHDR, LRESULT *pResult) { *pResult = 0; m_CurSelListIdx=GetCurListIdx(m_ValStrList); } bool CDlgVariableString::AddOrModifValStr(bool bAdd) { if(!Check()) return false; if(!bAdd&&m_CurSelListIdx==-1) return false; CDlgValStrBase *pDlg = NULL; if(bAdd)//增加的按照下拉框 { int idx = m_ValStrTypeComb.GetCurSel(); pDlg = DlgValStrFactory((VAL_STR_TYPR)idx); } else//修改的按照列表框 { pDlg = DlgValStrFactory(m_ValString.GetSelValStrType(m_CurSelListIdx)); } if(pDlg) { pDlg->SetParm(&m_ValString,bAdd,m_CurSelListIdx); if(pDlg->DoModal() == IDOK) { RefreshValStrList(); delete pDlg; return true; } delete pDlg; } return false; } void CDlgVariableString::AddOrModif(bool b) { if(AddOrModifValStr(b)) { CreatObjUseNewPar();//应用 } } //增加 void CDlgVariableString::OnBnClickedAddValStrBtn() { AddOrModif(true); } //修改 void CDlgVariableString::OnBnClickedModifValStrBtn() { AddOrModif(false); } //删除 void CDlgVariableString::OnBnClickedDelValStrBtn() { if(!Check()) return; m_ValString.DelSelValStr(m_CurSelListIdx); CreatObjUseNewPar();//应用 RefreshValStrList(); } void CDlgVariableString::SwapValStr(int NewIdx) { if(!Check()) return; m_ValString.SwapValStr(m_CurSelListIdx,NewIdx); RefreshValStrList(); //应用 CreatObjUseNewPar(); //设置列表的选中项 m_CurSelListIdx = NewIdx; m_ValStrList.SetItemState(m_CurSelListIdx,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED); m_ValStrList.SetFocus(); } //上移 void CDlgVariableString::OnBnClickedUpValStrBtn() { int NewIdx = m_CurSelListIdx-1; SwapValStr(NewIdx); } //下移 void CDlgVariableString::OnBnClickedDownValStrBtn() { int NewIdx = m_CurSelListIdx+1; SwapValStr(NewIdx); } //是否禁用可变文本相关的控件 void CDlgVariableString::EnableValStrCtr(bool bEnable) { m_ValStrList.EnableWindow(bEnable); GetDlgItem(IDC_ADD_VAL_STR_BTN)->EnableWindow(bEnable); GetDlgItem(IDC_DEL_VAL_STR_BTN)->EnableWindow(bEnable); GetDlgItem(IDC_UP_VAL_STR_BTN)->EnableWindow(bEnable); GetDlgItem(IDC_DOWN_VAL_STR_BTN)->EnableWindow(bEnable); GetDlgItem(IDC_MODIF_VAL_STR_BTN)->EnableWindow(bEnable); GetDlgItem(IDC_VAL_STR_TYPE_COMBO)->EnableWindow(bEnable); GetDlgItem(IDC_STR_EDIT)->EnableWindow(!bEnable); } //切换是否为可变文本 void CDlgVariableString::OnBnClickedValStrCheck() { UpdateData(TRUE); m_bValStr = m_bValStrCheck.GetCheck(); EnableValStrCtr(m_bValStr); } #endif #if 1 //绑定text 并刷新显示 void CDlgVariableString::BindingObjString(CObjString *p) { if(!p) return; //绑定指针 m_pObjString = p; //设置p 对应的字体为当前字体 CFontTypeMgr &pFontTypeMgr = CFontTypeMgr::Instance(); pFontTypeMgr.SetCurFontByName(p->GetFontTypeName(),p->GetFontName()); //获得可变文本的拷贝 p->GetValStrCopy(m_ValString); //对应到控件 m_bValStr = m_ValString.GetbValStr(); m_String = m_ValString.GetString(); //刷新控件显示 RefreshControlVal(); } //刷新控件的值 void CDlgVariableString::RefreshControlVal() { //是否可变文本check m_bValStrCheck.SetCheck(m_bValStr); //是否禁用可变文本相关的控件 EnableValStrCtr(m_bValStr); //初始化字库文件下拉列表 IniFontStyleComb(); UpdateData(FALSE); //可变文本列表 RefreshValStrList(); } //字体类型选择相应 void CDlgVariableString::OnCbnFontTypeChange() { UpdateData(TRUE); int idx = m_FontTypeComb.GetCurSel(); CFontTypeMgr &pFontTypeMgr = CFontTypeMgr::Instance(); pFontTypeMgr.SetCurFontType(idx);//设置当前选择的字体 //刷新字体名字下拉列表CComboBox pFontTypeMgr.UpdateFontNameComb(m_FontNameComb); } //字体名称选择响应 void CDlgVariableString::OnCbnFontNameChange() { UpdateData(TRUE); int idx = m_FontNameComb.GetCurSel(); CFontTypeMgr &pFontTypeMgr = CFontTypeMgr::Instance(); pFontTypeMgr.GetCurFontName(idx);//设置当前选择的字体 } //取消绑定 void CDlgVariableString::UnBindingObj() { IniCtrVal(); RefreshControlVal(); } //更新绑定对象的参数 void CDlgVariableString::UpdateBindingObjVal() { if(!Check()) return; UpdateData(TRUE); if(m_String=="") { m_String = "TEXT"; } m_ValString.SetString(m_String); m_ValString.SetbValStr(m_bValStr); //临时对象应用到对象 m_pObjString->SetValStr(m_ValString); //保存设置的字体 m_pObjString->SetUseCurFontName(); } #endif #if 1 //应用 void CDlgVariableString::OnBnClickedCommitBtn() { CreatObjUseNewPar(); } //应用型的参数到obj void CDlgVariableString::CreatObjUseNewPar() { if(!Check()) return; CCommandModifiString *pCmd = new CCommandModifiString; SStringPar par; m_pObjString->GetValStrCopy(par.m_ValString); par.m_FontTypeName = m_pObjString->GetFontTypeName(); par.m_FontName = m_pObjString->GetFontName(); pCmd->SetStringPar(par,true);//保存旧的参数 //更新绑定对象的参数 UpdateBindingObjVal(); m_pObjString->GetValStrCopy(par.m_ValString); par.m_FontTypeName = m_pObjString->GetFontTypeName(); par.m_FontName = m_pObjString->GetFontName(); pCmd->SetStringPar(par,false);//保存新的参数 gCommandMgr.AddUndoCommand(pCmd); pCmd->Excute(); GetCurViewPtr()->RefreshView(); //更新图形属性 gMarkObjPropertieMgr->UpdateSelMarkObjPropertie(); } //字体设置按钮 void CDlgVariableString::OnBnClickedFontBtn() { if(!Check()) return; if(strcmp(typeid(CObjTxt).name(), typeid(*m_pObjString).name()) == 0) { CObjTxt *p = dynamic_cast(m_pObjString); CDlgFontSet dlg(p->GetFontPar()); if(dlg.DoModal()==IDOK) { GetCurViewPtr()->RefreshView(); //更新图形属性 gMarkObjPropertieMgr->UpdateSelMarkObjPropertie(); } } } //填充 void CDlgVariableString::OnBnClickedFillBtn() { if(!Check()) return; CDlgFill dlg(m_pObjString->GetFillPar()); if(dlg.DoModal()==IDOK) { GetCurViewPtr()->RefreshView(); //更新图形属性 gMarkObjPropertieMgr->UpdateSelMarkObjPropertie(); } } #endif