// OptionSheet.cpp : 实现文件 // #include "stdafx.h" #include "OptionSheet.h" #include "fontpropertypage.h" #include "afxtempl.h" #include "TArchSettingEditTools.h" #include "htmlhelp.h" #include "TgAs.h" /////////////////////////////////////////////////////////// extern TARCH_IMPEXP BOOL g_bLimitHeight;//外部限高 extern TARCH_IMPEXP BOOL g_bDefaultOpenFirst;//默认打开新一个 extern TARCH_IMPEXP BOOL g_bScrollBar;//是否需要右滚动条 extern int TARCH_IMPEXP g_nRunMode; extern int TARCH_IMPEXP g_iMenuType; extern TARCH_IMPEXP BOOL g_bEnableShortCut; extern TARCH_IMPEXP int g_nProductId; extern TARCH_IMPEXP double g_nVersion; //extern void HideTabBar(BOOL bTrue); extern TARCH_IMPEXP BOOL g_bDwgTabBar,g_bZoomKey,g_nRBtnMenuTime,g_nSpeedMenu; extern TARCH_IMPEXP void SaveGlobalToReg(); //add by xlc on 090804 BOOL g_bScreenMenu = TRUE; //记录当前屏幕菜单状态 BOOL g_bCancel = FALSE; //记录当前是否cancel操作 void IsAppandAlias(DList &lstAll, CBlockStruct *pItem); //add by xlc on 071015 typedef struct { LVITEM* plvi; CString sCol2; } lvItem, *plvItem; //add by fxj 080925 //extern BOOL IsScreenMenuVisible(); //extern int ShowScreenMenu(BOOL bTrue); /////////////////////////////////////////////////////////////// // command:TCustomize void Customize() { CAcModuleResourceOverride vTemp; COptionSheet sheet(acedGetAcadFrame()); if (sheet.DoModal() == IDOK) { //LH 2013-3-25 根据2014年加密需要水关键字8--14 暖6--15 电3--16 //if (g_nProductId!=2&&g_nProductId!=3&&g_nProductId!=8&&g_nProductId!=6) if (g_nProductId!=kTASD && g_nProductId!=kTELEC && g_nProductId!=kTWT && g_nProductId!=kTHVAC) { sheet.m_pageToolBar.CreateToolbars(); sheet.m_pageShortCutKey.WriteShortCutKey(); sheet.m_pageShortCutKey.WritePgp(); } sheet.m_pageScreenMenu.LoadMenu(); g_colorInPlaceText = sheet.m_FontDlgPage.m_cEdit.m_colorInPlaceText; g_colorInPlaceGround = sheet.m_FontDlgPage.m_cEdit.m_colorInPlaceGround; g_iInPlaceFontHeight = sheet.m_FontDlgPage.m_cEdit.m_iInPlaceFontHeight; if (g_bDwgTabBar!=sheet.m_FontDlgPage.m_bDwgTabBar) { g_bDwgTabBar=sheet.m_FontDlgPage.m_bDwgTabBar; //HideTabBar(!g_bDwgTabBar); } sheet.m_pageUserOperator.UpdateGlobalData(); //ShowScreenMenu(sheet.m_pageScreenMenu.m_bScreenMenu);//add by fxj 080925 acedCommand(RTSTR, _T("REGEN"), NULL); } else { if (sheet.m_pageScreenMenu.m_bPreview) { g_menuColors[0] = sheet.m_pageScreenMenu.m_nMenuBKColor1; g_menuColors[1] = sheet.m_pageScreenMenu.m_nMenuBKColor2; g_menuColors[2] = sheet.m_pageScreenMenu.m_nMenuBKColor3; g_menuColors[3] = sheet.m_pageScreenMenu.m_nMenuBKColor4; acedGetAcadFrame()->RedrawWindow(NULL,NULL,RDW_ALLCHILDREN|RDW_INVALIDATE); } } } IMPLEMENT_DYNAMIC(CScreenMenuPage, CAcUiTabChildDialog) CScreenMenuPage::CScreenMenuPage(CWnd* pParent):CAcUiTabChildDialog(pParent) { m_bLimitHeight=g_bLimitHeight; m_bScrollBar=g_bScrollBar; m_bAutoOpenFirst=g_bDefaultOpenFirst; m_bChecked = FALSE; m_iMenuType=g_iMenuType; m_nMenuBKColor1 = g_menuColors[0]; m_nMenuBKColor2 = g_menuColors[1]; m_nMenuBKColor3 = g_menuColors[2]; m_nMenuBKColor4 = g_menuColors[3]; m_bModified = FALSE; m_bPreview = FALSE; //add by fxj 080925 m_bScreenMenu = FALSE; //m_bScreenMenu = IsScreenMenuVisible(); //g_bScreenMenu = IsScreenMenuVisible(); } void CScreenMenuPage::DoDataExchange(CDataExchange*pDX) { CAcUiTabChildDialog::DoDataExchange(pDX); DDX_CBIndex(pDX,IDC_MENU_FILE,m_iMenuType); DDX_Radio(pDX,IDC_RADIO1,m_bLimitHeight); DDX_Check(pDX,IDC_SCROLL_BAR,m_bScrollBar); DDX_Check(pDX,IDC_OPEN_FIRST,m_bAutoOpenFirst); //add by xlc on 071019 DDX_Control(pDX, IDC_EDIT_BK1, m_cBkCol1); DDX_Control(pDX, IDC_EDIT_BK2, m_cBkCol2); DDX_Control(pDX, IDC_EDIT_BK3, m_cBkCol3); DDX_Control(pDX, IDC_EDIT_BK4, m_cBkCol4); DDX_Check(pDX, IDC_SCREEN_MENU, m_bScreenMenu);//add by fxj 080925 } BEGIN_MESSAGE_MAP(CScreenMenuPage, CAcUiTabChildDialog) //{{AFX_MSG_MAP(CScreenMenuPage) ON_BN_CLICKED(IDC_BUTTON_BK1, OnBkColor1) ON_BN_CLICKED(IDC_BUTTON_BK2, OnBkColor2) ON_BN_CLICKED(IDC_BUTTON_BK3, OnBkColor3) ON_BN_CLICKED(IDC_BUTTON_BK4, OnBkColor4) ON_BN_CLICKED(IDC_BUTTON_PREVIEW, OnButtonPreview) ON_BN_CLICKED(IDC_BUTTON_DEFAULT, OnButtonDefault) ON_BN_CLICKED(IDC_SCREEN_MENU, OnStnClickedMenu) ON_MESSAGE(TARCH_SETTING_MSG_UPDATA,OnReUpdataDlg) //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_RADIO1,OnBnClickedRadio1) ON_BN_CLICKED(IDC_RADIO2, OnBnClickedRadio2) ON_BN_CLICKED(IDC_SCROLL_BAR, OnBnClickedScrollBar) ON_BN_CLICKED(IDC_OPEN_FIRST, OnBnClickedOpenFirst) END_MESSAGE_MAP() void CScreenMenuPage::OnStnClickedMenu() { GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); m_bChecked = TRUE; } void CScreenMenuPage::OnBnClickedRadio1() { GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); m_bChecked = TRUE; } void CScreenMenuPage::OnBnClickedRadio2() { GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); m_bChecked = TRUE; } void CScreenMenuPage::OnBnClickedScrollBar() { GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); m_bChecked = TRUE; } void CScreenMenuPage::OnBnClickedOpenFirst() { GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); m_bChecked = TRUE; } LRESULT CScreenMenuPage::OnReUpdataDlg(WPARAM w,LPARAM l) { SetDataToWin(); UpdateData(FALSE); return 0; } BOOL CScreenMenuPage::OnInitDialog() { BOOL bRet=CAcUiTabChildDialog::OnInitDialog(); //只有TArch7有多个菜单系统 if (!(g_nProductId==kTARCH &&g_nVersion>6.9)) { GetDlgItem(IDC_MENU_FILE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC_MENU)->ShowWindow(SW_HIDE); } return bRet; } void CScreenMenuPage::SetDataToWin() { if (g_bScreenMenu != m_bScreenMenu) { m_bScreenMenu = g_bScreenMenu; } if (g_bLimitHeight != m_bLimitHeight) { m_bLimitHeight = g_bLimitHeight; m_bModified = TRUE; } if (g_bScrollBar != m_bScrollBar) { m_bScrollBar = g_bScrollBar; m_bModified = TRUE; } if (g_bDefaultOpenFirst != m_bAutoOpenFirst) { m_bAutoOpenFirst = g_bDefaultOpenFirst; m_bModified = TRUE; } if (g_iMenuType != m_iMenuType) { m_bModified = TRUE; m_iMenuType = g_iMenuType; } if (g_menuColors[0] != m_cBkCol1.m_nMenuBKColor1) { m_cBkCol1.m_nMenuBKColor1 = g_menuColors[0]; m_bModified = TRUE; } if (g_menuColors[1] != m_cBkCol2.m_nMenuBKColor2) { m_cBkCol2.m_nMenuBKColor2 = g_menuColors[1]; m_bModified = TRUE; } if (g_menuColors[2] != m_cBkCol3.m_nMenuBKColor3) { m_cBkCol3.m_nMenuBKColor3 = g_menuColors[2]; m_bModified = TRUE; } if (g_menuColors[3] != m_cBkCol4.m_nMenuBKColor4) { m_cBkCol4.m_nMenuBKColor4 = g_menuColors[4]; m_bModified = TRUE; } int nTest = g_menuColors[2]; if (!m_bModified) return; if (g_nProductId==kTARCH && g_nVersion>6.9) acedPostCommand(_T("tmnload\n")); else acedPostCommand(_T("tmnload1\n")); } void CScreenMenuPage::LoadMenu() { if (g_bScreenMenu != m_bScreenMenu) { g_bScreenMenu = m_bScreenMenu; } if (g_bLimitHeight != m_bLimitHeight) { g_bLimitHeight = m_bLimitHeight; m_bModified = TRUE; } if (g_bScrollBar != m_bScrollBar) { g_bScrollBar = m_bScrollBar; m_bModified = TRUE; } if (g_bDefaultOpenFirst != m_bAutoOpenFirst) { g_bDefaultOpenFirst = m_bAutoOpenFirst; m_bModified = TRUE; } if (g_iMenuType != m_iMenuType) { m_bModified = TRUE; g_iMenuType = m_iMenuType; if (m_iMenuType == 2) g_nRunMode = 1; else g_nRunMode = 0; } if (g_menuColors[0] != m_cBkCol1.m_nMenuBKColor1) { g_menuColors[0] = m_cBkCol1.m_nMenuBKColor1; m_bModified = TRUE; } if (g_menuColors[1] != m_cBkCol2.m_nMenuBKColor2) { g_menuColors[1] = m_cBkCol2.m_nMenuBKColor2; m_bModified = TRUE; } if (g_menuColors[2] != m_cBkCol3.m_nMenuBKColor3) { g_menuColors[2] = m_cBkCol3.m_nMenuBKColor3; m_bModified = TRUE; } if (g_menuColors[3] != m_cBkCol4.m_nMenuBKColor4) { g_menuColors[4] = m_cBkCol4.m_nMenuBKColor4; m_bModified = TRUE; } if (!m_bModified) return; if (g_nProductId==kTARCH && g_nVersion>6.9) acedPostCommand(_T("tmnload\n")); else acedPostCommand(_T("tmnload1\n")); } //add by xlc on 071217 //恢复默认颜色 void CScreenMenuPage::OnButtonDefault() { m_bPreview = TRUE; m_cBkCol1.m_nMenuBKColor1=14215660; m_cBkCol2.m_nMenuBKColor2=15527919; m_cBkCol3.m_nMenuBKColor3=16711418; m_cBkCol4.m_nMenuBKColor4=16580607; m_cBkCol1.Invalidate(); m_cBkCol2.Invalidate(); m_cBkCol3.Invalidate(); m_cBkCol4.Invalidate(); g_menuColors[0] = m_cBkCol1.m_nMenuBKColor1; g_menuColors[1] = m_cBkCol2.m_nMenuBKColor2; g_menuColors[2] = m_cBkCol3.m_nMenuBKColor3; g_menuColors[4] = m_cBkCol4.m_nMenuBKColor4; acedGetAcadFrame()->RedrawWindow(NULL,NULL,RDW_ALLCHILDREN|RDW_INVALIDATE); } void CScreenMenuPage::OnButtonPreview() { m_bPreview = TRUE; g_menuColors[0] = m_cBkCol1.m_nMenuBKColor1; g_menuColors[1] = m_cBkCol2.m_nMenuBKColor2; g_menuColors[2] = m_cBkCol3.m_nMenuBKColor3; g_menuColors[4] = m_cBkCol4.m_nMenuBKColor4; acedGetAcadFrame()->RedrawWindow(NULL,NULL,RDW_ALLCHILDREN|RDW_INVALIDATE); } void CScreenMenuPage::OnBkColor1() { CColorDialog m_Dlg; if (m_Dlg.DoModal() == IDOK) { m_cBkCol1.m_nMenuBKColor1 = m_Dlg.GetColor(); m_cBkCol1.SetWindowText(_T("")); GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); m_bChecked = TRUE; } } void CScreenMenuPage::OnBkColor2() { CColorDialog m_Dlg; if (m_Dlg.DoModal() == IDOK) { m_cBkCol2.m_nMenuBKColor2 = m_Dlg.GetColor(); m_cBkCol2.SetWindowText(_T("")); GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); m_bChecked = TRUE; } } void CScreenMenuPage::OnBkColor3() { CColorDialog m_Dlg; if (m_Dlg.DoModal() == IDOK) { m_cBkCol3.m_nMenuBKColor3 = m_Dlg.GetColor(); m_cBkCol3.SetWindowText(_T("")); GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); m_bChecked = TRUE; } } void CScreenMenuPage::OnBkColor4() { CColorDialog m_Dlg; if (m_Dlg.DoModal() == IDOK) { m_cBkCol4.m_nMenuBKColor4 = m_Dlg.GetColor(); m_cBkCol4.SetWindowText(_T("")); GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); m_bChecked = TRUE; } } ///////////////////////////////////////////////// extern TKeyMapTable g_KeyMapTable; // 把字符中间的空格处理成替换字符 CString ReplaceBlank(CString strItem); // 把字符中间的替换字符处理成空格 CString ReplaceBlankBack(CString strItem); BOOL TKeyMapTable::Key2Command(CString&sCommand)const { for(const TKeyMap* p=GetFirst();p!=NULL;p=GetNext(p)) if (p->sKey.CompareNoCase(sCommand)==0) { sCommand=p->sCommand; return true; } return FALSE; } BOOL TKeyMapTable::ReadShortCutKey() { Clear(); XString fullFile; if (!FindFile(_T("KeyMap.txt"), fullFile)) return FALSE; CStdioFile file; if (!file.Open(fullFile, CFile::modeRead)) return FALSE; CString rString; while(file.ReadString(rString)) { TCHAR sKey[256] = _T(""); TCHAR sCommand[256] = _T(""); TCHAR sNote[256]= _T(""); CT_strnth(rString, 1, sKey); CT_strnth(rString, 2, sCommand); CT_strnth(rString, 3, sNote); TKeyMap *pMap = new TKeyMap; // pMap->sKey = sKey; pMap->sKey = ReplaceBlankBack(sKey); // modify by lgh. 替换空格字符 pMap->sKey.MakeLower(); pMap->sKey = pMap->sKey.Left(1); // pMap->sCommand = sCommand; // pMap->sNote = sNote; pMap->sCommand = ReplaceBlankBack(sCommand); pMap->sNote = ReplaceBlankBack(sNote); // modify by lgh. 替换空格字符。 AddTail(*pMap); } file.Close(); return TRUE; } BOOL TKeyMapTable::WriteShortCutKey() { XString fullFile; if (!FindFile(_T("KeyMap.txt"), fullFile)) return FALSE; CStdioFile file; if (!file.Open(fullFile, CFile::modeWrite)) return FALSE; file.SetLength(0); file.Flush(); CString rString; for(MoveToFirst(); !IsOut(); MoveToNext()) { CString sKey = GetCurData().sKey; CString sCommand = GetCurData().sCommand; CString sNote = GetCurData().sNote; rString.Format(_T("%s %s %s\n"),ReplaceBlank(sKey), ReplaceBlank(sCommand),ReplaceBlank(sNote)); file.WriteString(rString); } file.Close(); return TRUE; } //add by xlc on 071010 WDGridPgp::WDGridPgp():WDGrid(true) { } #define ID_MENU_ADD_TREE 101 BEGIN_MESSAGE_MAP(WDGridPgp,WDGrid) ON_COMMAND(ID_MENU_ADD_TREE, OnAddTree) END_MESSAGE_MAP() void WDGridPgp::OnAddTree() { WDGridTreeRow* curTree = CurTreeRow(); if (curTree == NULL) { if (!IsEditing()) DoAppendTree(); } else { DoInsertTreeAfter(); } } bool WDGridPgp::OnBeforeInsertChild(WDGridTreeRow&row,long iChild,WDGridTreeRow*&pChild) { if (row.IsChildRow()||(pChild != NULL && pChild->IsParentRow())) { AfxMessageBox(_T("不允许在子行插入类别!")); return false; } return true; } bool WDGridPgp::OnBeforeInsertRow(long i,WDGridRow*&pNewRow) { if (!(pNewRow != NULL && pNewRow->IsParentRow())) { AfxMessageBox(_T("不允许插入行!")); return false; } return true; } void WDGridPgp::OnEndDeleteRow() { for(MoveToFirst(); !IsOut(); MoveToNext()) { WDGridTreeRow* pRow = CurTreeRow(); bool bChild =pRow->IsChildRow(); bool bParent=pRow->IsParentRow(); if (!pRow->IsParentRow() && !bChild) { DelRow(pRow->GetIndex()); } } } bool WDGridPgp::OnModified(WDGridCell&cell,CString &text) { if (cell.GetColIndex()!=0) return true; for(MoveToFirst(); !IsOut(); MoveToNext()) { WDGridTreeRow* pRow = CurTreeRow(); if (pRow->IsParentRow()) { CString strType = (*pRow)[0].GetText(); for(pRow->MoveToFirst(); !pRow->IsOut(); pRow->MoveToNext()) { WDGridTreeRow *pChild = pRow->CurChild(); if (pChild->IsChildRow()) { CString strKey = (*pChild)[0].GetText(); CString strName= (*pChild)[1].GetText(); if (strKey.CompareNoCase(text) == 0) { CString msg; msg.Format(_T("与目录%s下的%s命令冲突,是否设置?"),strType,strName); if (AfxMessageBox(msg,MB_OKCANCEL)!= IDOK) { text.Empty(); AutoEditCell(); } return true; } } } } } return true; } bool WDGridPgp::OnBeforeEdit(WDGridCell&cell,bool &bModified) { WDGridRow &row = cell.GetRow(); if (row.IsParentRow()) { int indexCol = cell.GetColIndex(); if (indexCol == 1) return false; } return true; } bool WDGridPgp::OnCellButtonDown(WDGridCell&cell,CString&res) { if (cell.GetColIndex() == 1) { CString strItem=cell.GetText(); CAcModuleResourceOverride vTemp; CCommandDlg dlg; dlg.m_strCnName=strItem; if (dlg.DoModal() == IDOK) { res = dlg.m_csCmd; if (res.IsEmpty()) return false; WDGridRow &row=cell.GetRow(); row[cell.GetColIndex()+1].SetText(dlg.m_strCnName); row[cell.GetColIndex()+1].Refresh(); OnDataChanged(); AutoCloseCell(1); return true; } } return false; } void WDGridPgp::OnRClickRow(WDGridRow&row,CPoint point) { if (IsNoDefaultMenu()||IsReadOnly()||IsRowFixLength()) return; CMenu popup; popup.CreatePopupMenu(); if (GetRowSelNum() > 1 && IsRowSelected(row.GetIndex())) { popup.AppendMenu(MF_STRING, ID_WDGRID_DEL_ROW, _T("删除(Del)")); } else { UnSelect(); SelectRow(row.GetIndex(), true); if (row.IsParentRow()) popup.AppendMenu(MF_STRING, ID_MENU_ADD_TREE, _T("插入类别")); else popup.AppendMenu(MF_STRING, ID_WDGRID_INS_ROW, _T("插入行(Ins)")); popup.AppendMenu(MF_STRING, ID_WDGRID_DEL_ROW, _T("删除行(Del)")); } popup.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this); } ///////////////////////////////////////////////// //CShortCutKeyPage 对话框 IMPLEMENT_DYNAMIC(CShortCutKeyPage, CAcUiTabChildDialog) CShortCutKeyPage::CShortCutKeyPage(CWnd* pParent) : CAcUiTabChildDialog(pParent) { m_bEnable=g_bEnableShortCut; m_bChecked = FALSE; m_nRaidoTg = 0; CodeBase db; XString xsDbfFile; if (!FindFile(_T("tchdata.dbf"), xsDbfFile)) { MessageBox(_T("对不起,没有发现tchdata.dbf文件!")); return; } CString csCmd, csName, csDescribe, csIcon, csType; int iHit; XDbfTable *pTable = db.Open(xsDbfFile); if (pTable) { pTable->MoveFirst(); while(!pTable->IsEOF()) { GET_FIELD(pTable, _T("chacmd"), csName); GET_FIELD(pTable, _T("engcmd"), csCmd); GET_FIELD(pTable, _T("explain"), csDescribe); GET_FIELD(pTable, _T("icon"), csIcon); GET_FIELD(pTable, _T("flag"), iHit); GET_FIELD(pTable, _T("type"), csType); m_lstToolbarData.Append(new CToolbarData(csType, csCmd, csName, csDescribe, csIcon, iHit)); pTable->MoveNext(); } pTable->Close(); } else { return; } } void CShortCutKeyPage::DoDataExchange(CDataExchange*pDX) { CAcUiTabChildDialog::DoDataExchange(pDX); DDX_Check(pDX,IDC_ENABLE,m_bEnable); DDX_Radio(pDX, IDC_RADIO_TG, m_nRaidoTg); } BEGIN_MESSAGE_MAP(CShortCutKeyPage, CAcUiTabChildDialog) //{{AFX_MSG_MAP(CShortCutKeyPage) ON_BN_CLICKED(IDC_RADIO_TG, OnRadioTG) ON_BN_CLICKED(IDC_RADIO_ACAD, OnRadioACAD) ON_BN_CLICKED(IDC_BUTTON_TREE, OnButtonTree) ON_BN_CLICKED(IDC_BUTTON_ROW, OnButtonRow) ON_BN_CLICKED(IDC_BUTTON_DEL, OnButtonDel) ON_MESSAGE(TARCH_SETTING_MSG_UPDATA,OnReUpdataDlg) ON_MESSAGE(TARCH_SETTING_MSG_BUTTONSTATION,OnUpdataApplyButton) //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_ENABLE, CShortCutKeyPage::OnBnClickedEnable) END_MESSAGE_MAP() // LRESULT CShortCutKeyPage::OnUpdataApplyButton(WPARAM w,LPARAM l) { m_bChecked = TRUE; GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); return 0; } // CShortCutKeyPage 消息处理程序 LRESULT CShortCutKeyPage::OnReUpdataDlg(WPARAM w,LPARAM l) { //InitGrid(); m_grid.Clear(); //m_grid.AppendCol(_T("快捷键"),60); //m_grid.AppendCol(_T("命令名"), 120); //m_grid.AppendCol(_T("备注")); m_grid.SetColPosFix(); m_grid.SetColFixLength(); m_grid.SetNoPaste(); //m_grid.Create(this, IDC_LIST); m_grid.FitLastCol(); m_grid.GetCol(1).SetRightButton(); long i = 0; for(g_KeyMapTable.MoveToFirst(); !g_KeyMapTable.IsOut(); g_KeyMapTable.MoveToNext()) { TKeyMap *pMap = &g_KeyMapTable.GetCurData(); m_grid.AppendRow(); m_grid.GetCell(i, 0).SetText(pMap->sKey); m_grid.GetCell(i, 1).SetText(pMap->sCommand); m_grid.GetCell(i, 2).SetText(pMap->sNote); i++; } m_bEnable = g_bEnableShortCut; if (m_nRaidoTg == 0) { GetDlgItem(IDC_ENABLE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LIST)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LIST_PGP)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON_TREE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON_ROW)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON_DEL)->ShowWindow(SW_HIDE); } else { GetDlgItem(IDC_ENABLE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LIST)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LIST_PGP)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTON_TREE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTON_ROW)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTON_DEL)->ShowWindow(SW_SHOW); } //add by xlc on 070924 //InitGridTree(); m_treePgp.Clear(); m_treePgp.GetCol(1).SetRightButton(); m_treePgp.GetCol(2).SetReadOnly(TRUE); m_treePgp.SetColPosFix(); m_treePgp.SetColFixLength(); m_treePgp.SetNoPaste(); //禁止粘贴操作 m_treePgp.SetNoAppendButton(); //没有append button //m_treePgp.Create(this, IDC_LIST_PGP); m_treePgp.FitLastCol(); ReadPgp(); UpdateData(FALSE); return 0; } BOOL CShortCutKeyPage::OnInitDialog() { CAcUiTabChildDialog::OnInitDialog(); InitGrid(); //add by xlc on 070924 InitGridTree(); if (m_nRaidoTg == 0) { GetDlgItem(IDC_ENABLE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LIST)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LIST_PGP)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON_TREE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON_ROW)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON_DEL)->ShowWindow(SW_HIDE); } else { GetDlgItem(IDC_ENABLE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LIST)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LIST_PGP)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTON_TREE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTON_ROW)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTON_DEL)->ShowWindow(SW_SHOW); } return TRUE; } //add by xlc on 070924 void CShortCutKeyPage::InitGridTree() { m_treePgp.Clear(); m_treePgp.AppendCol(_T("快捷键"),160); m_treePgp.AppendCol(_T("命令名"), 160); m_treePgp.AppendCol(_T("备注"), 160); m_treePgp.GetCol(1).SetRightButton(); m_treePgp.GetCol(2).SetReadOnly(TRUE); m_treePgp.SetColPosFix(); m_treePgp.SetColFixLength(); m_treePgp.SetNoPaste(); //禁止粘贴操作 m_treePgp.SetNoAppendButton(); //没有append button m_treePgp.Create(this, IDC_LIST_PGP); m_treePgp.FitLastCol(); ReadPgp(); } void CShortCutKeyPage::InitGrid() { m_grid.Clear(); m_grid.AppendCol(_T("快捷键"),60); m_grid.AppendCol(_T("命令名"), 120); m_grid.AppendCol(_T("备注")); m_grid.SetColPosFix(); m_grid.SetColFixLength(); m_grid.SetNoPaste(); m_grid.Create(this, IDC_LIST); m_grid.FitLastCol(); //add by xlc on 070924 m_grid.GetCol(1).SetRightButton(); long i = 0; for(g_KeyMapTable.MoveToFirst(); !g_KeyMapTable.IsOut(); g_KeyMapTable.MoveToNext()) { TKeyMap *pMap = &g_KeyMapTable.GetCurData(); m_grid.AppendRow(); m_grid.GetCell(i, 0).SetText(pMap->sKey); m_grid.GetCell(i, 1).SetText(pMap->sCommand); m_grid.GetCell(i, 2).SetText(pMap->sNote); i++; } if (m_nRaidoTg == 0) { GetDlgItem(IDC_ENABLE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LIST)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LIST_PGP)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON_TREE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON_ROW)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON_DEL)->ShowWindow(SW_HIDE); } else { GetDlgItem(IDC_ENABLE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LIST)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LIST_PGP)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTON_TREE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTON_ROW)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTON_DEL)->ShowWindow(SW_SHOW); } } //void CShortCutKeyPage::UpdateGrid(const CXMLNodeInfoEx &nodeInfo) //{ // m_grid.Clear(); // /*m_grid.AppendCol(_T("快捷键"),60); // m_grid.AppendCol(_T("命令名"), 120); // m_grid.AppendCol(_T("备注")); // m_grid.SetColPosFix(); // m_grid.SetColFixLength(); // m_grid.SetNoPaste(); // m_grid.Create(this, IDC_LIST); // m_grid.FitLastCol(); // m_grid.GetCol(1).SetRightButton();*/ // //m_grid.SetModify(true); // CStringArray aryStrCmd,aryStrComment,aryStrValue; // if (nodeInfo.m_aryNodeAttribute.GetLength()>=3) // { // DevideStr(nodeInfo.m_aryNodeAttribute.GetAt(1).second,aryStrCmd); // DevideStr(nodeInfo.m_aryNodeAttribute.GetAt(2).second,aryStrComment); // DevideStr(nodeInfo.m_strNodeValue,aryStrValue); // int nLen = aryStrCmd.GetSize(); // int i=0; // for (i=0;iShowWindow(SW_SHOW); // GetDlgItem(IDC_LIST)->ShowWindow(SW_SHOW); // GetDlgItem(IDC_LIST_PGP)->ShowWindow(SW_HIDE); // GetDlgItem(IDC_BUTTON_TREE)->ShowWindow(SW_HIDE); // GetDlgItem(IDC_BUTTON_ROW)->ShowWindow(SW_HIDE); // GetDlgItem(IDC_BUTTON_DEL)->ShowWindow(SW_HIDE); // } // else // { // GetDlgItem(IDC_ENABLE)->ShowWindow(SW_HIDE); // GetDlgItem(IDC_LIST)->ShowWindow(SW_HIDE); // GetDlgItem(IDC_LIST_PGP)->ShowWindow(SW_SHOW); // GetDlgItem(IDC_BUTTON_TREE)->ShowWindow(SW_SHOW); // GetDlgItem(IDC_BUTTON_ROW)->ShowWindow(SW_SHOW); // GetDlgItem(IDC_BUTTON_DEL)->ShowWindow(SW_SHOW); // } //} //void CShortCutKeyPage::DevideStr(const CString &str,CStringArray &aryStr) //{ // CString strTem; // int nPos = str.Find(_T(" "),0); // int nStart = 0; // while (nPos!=-1) // { // int nNum = nPos-nStart; // strTem = str.Mid(nStart,nNum); // aryStr.Add(strTem); // nStart = nPos+1; // nPos = str.Find(_T(" "),nPos+1); // } // int nSize = str.GetLength(); // if (nStart-1sKey = (*pRow)[0]; pMap->sCommand = (*pRow)[1]; pMap->sNote =(*pRow)[2]; g_KeyMapTable.AddTail(*pMap); delete pMap;//zzg } g_KeyMapTable.WriteShortCutKey(); } void CShortCutKeyPage::WriteShortCutKey() { g_bEnableShortCut=m_bEnable; //modified by xlc on 071011 if (!m_grid.IsModified()) return; g_KeyMapTable.Clear(); for(m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()) { WDGridRow *pRow = m_grid.CurRow(); TKeyMap *pMap = new TKeyMap; pMap->sKey = (*pRow)[0]; pMap->sCommand = (*pRow)[1]; pMap->sNote =(*pRow)[2]; g_KeyMapTable.AddTail(*pMap); delete pMap;//zzg } g_KeyMapTable.WriteShortCutKey(); } //add by xlc on 070926 void CShortCutKeyPage::OnRadioTG() { GetDlgItem(IDC_ENABLE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LIST)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LIST_PGP)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON_TREE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON_ROW)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON_DEL)->ShowWindow(SW_HIDE); GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); m_bChecked = TRUE; } //add by xlc on 070926 void CShortCutKeyPage::OnRadioACAD() { GetDlgItem(IDC_ENABLE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LIST)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LIST_PGP)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTON_TREE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTON_ROW)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTON_DEL)->ShowWindow(SW_SHOW); GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); m_bChecked = TRUE; } void CShortCutKeyPage::OnBnClickedEnable() { GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); m_bChecked = TRUE; } //add by xlc on 071010 void CShortCutKeyPage::OnButtonTree() { WDGridTreeRow* curTree = m_treePgp.CurTreeRow(); if (curTree == NULL) { if (!m_treePgp.IsEditing()) m_treePgp.DoAppendTree(); } else { m_treePgp.DoInsertTreeAfter(); } GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); m_bChecked = TRUE; } //add by xlc on 071010 void CShortCutKeyPage::OnButtonRow() { WDGridTreeRow* curTree = m_treePgp.CurTreeRow(); if (curTree == NULL) { if (!m_treePgp.IsEditing()) m_treePgp.DoAppendChild(); else { AfxMessageBox(_T("没有指定插入位置!")); } } else { if (curTree->IsChildRow()) { m_treePgp.DoInsertRowAfter(); } else if (curTree->IsParentRow()) { m_treePgp.DoAppendChild(); } } GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); m_bChecked = TRUE; } //add by xlc on 071010 void CShortCutKeyPage::OnButtonDel() { m_treePgp.DoDelete(); GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); m_bChecked = TRUE; } void CShortCutKeyPage::UpdateShortCutKeyPage() { UpdateData(FALSE); } //add by xlc on 071008 void CShortCutKeyPage::ReadPgp() { if (!FindFile(_T("acad.pgp"), m_xsAcadPgp)) { MessageBox(_T("对不起,没有发现acad.pgp文件!")); return; } CStdioFile file; if (!file.Open(m_xsAcadPgp, CFile::modeRead)) { AfxMessageBox(CString(_T("打开文件 \"")) + m_xsAcadPgp + _T("\" 失败")); return ; } m_strNoteArray.RemoveAll(); CString sString; BOOL bFirst = TRUE; while(file.ReadString(sString)) { TCHAR sKey[256] = _T(""); TCHAR sName[256] = _T(""); if (sString[0]) { if (sString[0] == _T(';') && sString[1] == _T(';')) { WDGridTreeRow *pRow = new WDGridTreeRow(m_treePgp); (*pRow)[0].SetText(sString.Right(sString.GetLength()-2)); m_treePgp.AppendRow(pRow); bFirst = FALSE; } else if (sString[0] != _T(';')) { if (sString.Find(_T("*")) == -1 ||sString.Find(_T(":")) != -1) { m_strNoteArray.Add(sString); continue; } //add by xlc on 071105 如果没有类别时添加缺省类别 if (bFirst) { WDGridTreeRow *pRow = new WDGridTreeRow(m_treePgp); (*pRow)[0].SetText(_T("ACAD")); m_treePgp.AppendRow(pRow); bFirst = FALSE; } CString str = sString,strType,strCmd,strNote; strType = sString.Left(sString.Find(_T(","))); //add by xlc on 090921 解决pgp文件中有中文逗号退出的问题 if (strType.IsEmpty()) { strType = sString.Left(sString.Find(_T(","))); } strCmd = str.Right(str.GetLength()-str.Find(_T("*"))-1); for(int i = 0; i < m_lstToolbarData.Length(); i++) { if (strCmd.CompareNoCase(m_lstToolbarData[i]->m_csCmd)==0) { strNote = m_lstToolbarData[i]->m_csName; break; } } WDGridTreeRow *pRow = new WDGridTreeRow(m_treePgp); WDGridTreeRow *pTreeRow = m_treePgp.CurTreeRow(); if (!(strCmd.IsEmpty()||strType.IsEmpty())) { (*pRow)[0].SetText(strType); (*pRow)[1].SetText(strCmd); (*pRow)[2].SetText(strNote); if (pTreeRow) { pTreeRow->AppendChild(pRow); } else { m_treePgp.AppendRow(pRow); } } } else { m_strNoteArray.Add(sString); } } } file.Close(); } void CShortCutKeyPage::OnOK() { //WriteShortCutKey(); //WritePgp(); } //add by xlc on 071008 void CShortCutKeyPage::WritePgp() { if (!m_treePgp.IsModified()) return; FILE *fp2 = _tfopen(m_xsAcadPgp, _T("w")); if (!fp2) return; //输出注释 for(int i = 0; i < m_strNoteArray.GetSize(); i++) { _fputts(_T("\n"), fp2); _fputts(m_strNoteArray[i], fp2); } //输出类别和命令 for(m_treePgp.MoveToFirst(); !m_treePgp.IsOut(); m_treePgp.MoveToNext()) { WDGridTreeRow* pRow = m_treePgp.CurTreeRow(); if (pRow->IsParentRow()) { CString strTmp = _T("\n\n;;"); strTmp += (*pRow)[0].GetText(); _fputts(strTmp, fp2); for(pRow->MoveToFirst(); !pRow->IsOut(); pRow->MoveToNext()) { WDGridTreeRow *pChild = pRow->CurChild(); if (pChild->IsChildRow()) { CString strKey = (*pChild)[0].GetText(); CString strName= (*pChild)[1].GetText(); CString csTmp = _T("\n")+strKey+_T(", *")+strName; if (!(strKey.IsEmpty() || strName.IsEmpty())) _fputts(csTmp, fp2); } } } } fclose(fp2); AfxMessageBox(CString(_T("文件 \"")) + m_xsAcadPgp + _T("\" 已修改,必须重新启动上华软件或\n在命令行输入reinit重新初始化PGP改动才能生效!")); } ///////////////////////////////////////////////////////////////////////////// // CSetToolbarPage PropertyPage IMPLEMENT_DYNAMIC(CSetToolbarPage, CAcUiTabChildDialog) CSetToolbarPage::CSetToolbarPage(CWnd* pParent) : CAcUiTabChildDialog(pParent) { //{{AFX_DATA_INIT(CSetToolbarPage) m_bChecked = FALSE; m_iType = -1; m_csAlias = _T(""); m_csCmd = _T(""); //}}AFX_DATA_INIT m_bInit = FALSE; m_bModifyAlias = FALSE; m_bDragging = FALSE; m_bModified = FALSE; CodeBase db; if (!FindFile(_T("tchdata.dbf"), m_xsDbfFile)) { MessageBox(_T("对不起,没有发现tchdata.dbf文件!")); return; } if (!FindFile(_T("TCH.DLL"), m_xsDllFile)) { MessageBox(_T("对不起,没有发现TCH.DLL文件!")); return; } CString csCmd, csName, csDescribe, csIcon, csType; int iHit; XDbfTable *pTable = db.Open(m_xsDbfFile); if (pTable) { pTable->MoveFirst(); while(!pTable->IsEOF()) { GET_FIELD(pTable, _T("chacmd"), csName); GET_FIELD(pTable, _T("engcmd"), csCmd); GET_FIELD(pTable, _T("explain"), csDescribe); GET_FIELD(pTable, _T("icon"), csIcon); GET_FIELD(pTable, _T("flag"), iHit); GET_FIELD(pTable, _T("type"), csType); m_lstToolbarData.Append(new CToolbarData(csType, csCmd, csName, csDescribe, csIcon, iHit)); if (m_lstType.Index(csType) < 0) m_lstType.Append(tstrnew(csType)); pTable->MoveNext(); } } else{ return; } m_lstToolbarData.QuickSort(CToolbarData::SortByItem); m_bInit = TRUE; //zzg } void CSetToolbarPage::DoDataExchange(CDataExchange* pDX) { CAcUiTabChildDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSetToolbarPage) DDX_Control(pDX, IDC_BUTTON_HELP, m_butHelp); DDX_Control(pDX, IDC_LIST_TOOLBAR, m_listToolbar); DDX_Control(pDX, IDC_LIST_MENU, m_listMenu); DDX_Control(pDX, IDC_COMBO_MENUTYPE, m_comboType); DDX_CBIndex(pDX, IDC_COMBO_MENUTYPE, m_iType); DDX_Text(pDX, IDC_EDIT_ALIAS, m_csAlias); DDX_Text(pDX, IDC_EDIT_CMD, m_csCmd); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CSetToolbarPage, CAcUiTabChildDialog) //{{AFX_MSG_MAP(CSetToolbarPage) ON_BN_CLICKED(IDC_BUT_ADD, OnButAdd) ON_BN_CLICKED(IDC_BUT_REMOVE, OnButRemove) ON_CBN_SELCHANGE(IDC_COMBO_MENUTYPE, OnSelchangeComboType) ON_NOTIFY(NM_DBLCLK, IDC_LIST_MENU, OnDblclkListMenu) ON_NOTIFY(NM_DBLCLK, IDC_LIST_TOOLBAR, OnDblclkListToolbar) ON_BN_CLICKED(IDC_BUTTON_UP, OnButtonUp) ON_BN_CLICKED(IDC_BUTTON_DOWN, OnButtonDown) ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_MENU, OnItemchangedListMenu) ON_BN_CLICKED(IDC_BUT_MODIFY, OnButModify) ON_WM_CLOSE() ON_WM_DESTROY() //add by xlc on 071015 ON_WM_QUERYDRAGICON() ON_NOTIFY(LVN_BEGINDRAG, IDC_LIST_TOOLBAR, OnBegindragList) ON_WM_LBUTTONUP() ON_WM_MOUSEMOVE() ON_MESSAGE(TARCH_SETTING_MSG_UPDATA,OnReUpdataDlg) ON_MESSAGE(TARCH_SETTING_MSG_BUTTONOK,OnReOK) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// void CSetToolbarPage::OnDestroy() { //add by xlc on 090804 cancel时不保存数据 if (g_bCancel) { CAcUiTabChildDialog::OnNcDestroy(); return; } CodeBase db; CString csCmd, csName, csDescribe, csIcon, csType; XDbfTable *pTable = db.Open(m_xsDbfFile); if (pTable) { pTable->MoveFirst(); while(!pTable->IsEOF()) { GET_FIELD(pTable, _T("chacmd"), csName); int len = m_listToolbar.GetItemCount(); int iHit(0); for(int i=0;iMoveNext(); } } else MessageBox(_T("未能成功写入tchdata.dbf文件!")); CAcUiTabChildDialog::OnNcDestroy(); } LRESULT CSetToolbarPage::OnReOK(WPARAM w,LPARAM l) { //OnOK(); return 0; } // CSetToolbarPage message handlers LRESULT CSetToolbarPage::OnReUpdataDlg(WPARAM w,LPARAM l) { CodeBase db; m_lstToolbarData.Reset(); //m_lstType.Reset(); if (!FindFile(_T("tchdata.dbf"), m_xsDbfFile)) { MessageBox(_T("对不起,没有发现tchdata.dbf文件!")); return 0; } CString csCmd, csName, csDescribe, csIcon, csType; int iHit; XDbfTable *pTable = db.Open(m_xsDbfFile); if (pTable) { pTable->MoveFirst(); while(!pTable->IsEOF()) { GET_FIELD(pTable, _T("chacmd"), csName); GET_FIELD(pTable, _T("engcmd"), csCmd); GET_FIELD(pTable, _T("explain"), csDescribe); GET_FIELD(pTable, _T("icon"), csIcon); GET_FIELD(pTable, _T("flag"), iHit); GET_FIELD(pTable, _T("type"), csType); m_lstToolbarData.Append(new CToolbarData(csType, csCmd, csName, csDescribe, csIcon, iHit)); //if (m_lstType.Index(csType) < 0) // m_lstType.Append(tstrnew(csType)); pTable->MoveNext(); } } else{ return 0; } m_lstToolbarData.QuickSort(CToolbarData::SortByItem); m_bInit = TRUE; ResetListToolbar(); UpdateData(FALSE); return 0; } BOOL CSetToolbarPage::OnInitDialog() { CAcUiTabChildDialog::OnInitDialog(); //m_butHelp.SetIcon(IDI_HELP); m_butHelp.SetHelpKey(_T("工具条")); int len = m_lstType.Length(); for(int i=0;i 0) { m_iType = 0; } ReReadFile(); ResetListMenu(); ResetListToolbar(); UpdateData(FALSE); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CSetToolbarPage::OnButAdd() { UpdateData(TRUE); int nSel = m_listMenu.GetSelectionMark(); if (nSel < 0) return; CString csSel = m_listMenu.GetItemText(nSel, 0); TCHAR szSel[32]; CT_strnth(csSel, 1, szSel); csSel = szSel; int len = m_listToolbar.GetItemCount(); for(int i=0;im_csName)==0) { csImage = m_lstToolbarData[j]->m_csIcon; hBitmap = LoadBitmap(hInstance, csImage); m_lstToolbarData[j]->m_iHit = len+2; if (hBitmap){ CBitmap bitmap; bitmap.Attach(hBitmap); m_imageToolbar.Add(&bitmap, RGB(192, 192, 192)); } } } TCHAR strText[64]; _tcscpy(strText, csSel); LV_ITEM listItem; listItem.mask = LVIF_TEXT | LVIF_IMAGE; listItem.iSubItem = 0; listItem.iItem = len; listItem.pszText = strText; listItem.iImage = m_imageToolbar.GetImageCount()-1; m_listToolbar.InsertItem( &listItem ); //add by xlc on 071016 GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); m_bChecked = TRUE; m_bModified = TRUE; } void CSetToolbarPage::RemoveIten(int nIndex) { if (nIndex < 0) return; CString csSel = m_listToolbar.GetItemText(nIndex, 0); m_listToolbar.DeleteItem(nIndex); int len = m_lstToolbarData.Length(); for(int j=0;jm_csName)==0) { m_lstToolbarData[j]->m_iHit = 0; break; } } } void CSetToolbarPage::OnButRemove() { UpdateData(TRUE); POSITION pos = m_listToolbar.GetFirstSelectedItemPosition(); Array aryInDex; while (pos) { int nIndex = m_listToolbar.GetNextSelectedItem(pos); aryInDex.AddTail(nIndex); //RemoveIten(nIndex); } aryInDex.Reverse(); int i=0; for (i=0;im_csName){ m_lstToolbarData[j]->m_iHit = 0; break; } }*/ //modify by xlc on 080310 int len = m_lstToolbarData.Length(); m_lstToolbarData.QuickSort(CToolbarData::SortByItem); ResetListToolbar(); int index=0; if (nSel < len-1) { index = nSel; } else if (nSel = len-1) { index = nSel-1; } m_listToolbar.SetItemState(index, LVIS_SELECTED, LVIS_SELECTED); m_listToolbar.SetSelectionMark(index); m_listToolbar.EnsureVisible(index, TRUE); m_listToolbar.SetFocus(); //add by xlc on 071016 GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); m_bChecked = TRUE; m_bModified = TRUE; } void CSetToolbarPage::ReReadFile() { m_lstToolbarData.Reset(); CodeBase db; XString fullFile; CString csCmd, csName, csDescribe, csIcon, csType; BOOL bIsHit; XDbfTable *pTable = db.Open(m_xsDbfFile); if (pTable) { pTable->MoveFirst(); while(!pTable->IsEOF()) { GET_FIELD(pTable, _T("chacmd"), csName); GET_FIELD(pTable, _T("engcmd"), csCmd); GET_FIELD(pTable, _T("explain"), csDescribe); GET_FIELD(pTable, _T("icon"), csIcon); GET_FIELD(pTable, _T("flag"), bIsHit); GET_FIELD(pTable, _T("type"), csType); m_lstToolbarData.Append(new CToolbarData(csType, csCmd, csName, csDescribe, csIcon, bIsHit)); pTable->MoveNext(); } } else{ return; } m_lstToolbarData.QuickSort(CToolbarData::SortByItem); } void CSetToolbarPage::UpdateListTooBar(const CStringArray& aryStrName) { int nLen = m_lstToolbarData.Length(); int i=0; for (i=0;im_iHit = 0; } // Zyu modify on 100722,支持64位 //int nNum = aryStrName.GetSize(); INT_PTR nNum = aryStrName.GetSize(); int j=0; for (j=0;jm_csName; if (strName.CompareNoCase(strTem)==0) { pData->m_iHit = j+2; } } } m_lstToolbarData.QuickSort(CToolbarData::SortByItem); ResetListToolbar(); } void CSetToolbarPage::OnSelchangeComboType() { UpdateData(TRUE); m_csCmd = _T(""); m_csAlias = _T(""); UpdateData(FALSE); ResetListMenu(); } void CSetToolbarPage::ResetListToolbar() { m_listToolbar.DeleteAllItems(); m_imageToolbar.DeleteImageList(); m_imageToolbar.Create(16, 16, ILC_COLOR|ILC_MASK, 0, 100); HINSTANCE hInstance = LoadLibrary(m_xsDllFile); m_listToolbar.SetImageList(&m_imageToolbar, LVSIL_SMALL); int len = m_lstToolbarData.Length(); int n=0; for(int i=0;im_iHit > 0) { csChaName = m_lstToolbarData[i]->m_csName; csIcon = m_lstToolbarData[i]->m_csIcon; hBitmap = LoadBitmap(hInstance, csIcon); if (hBitmap) { CBitmap bitmap; bitmap.Attach(hBitmap); m_imageToolbar.Add(&bitmap, RGB(192, 192, 192)); } else MessageBox(csIcon); TCHAR strText[64]; _tcscpy(strText, csChaName); LV_ITEM listItem; listItem.mask = LVIF_TEXT | LVIF_IMAGE; listItem.iSubItem = 0; listItem.iItem = n; listItem.pszText = strText; listItem.iImage = n; m_listToolbar.InsertItem( &listItem ); n++; } } FreeLibrary(hInstance); // int n = m_listToolbar.GetItemCount(); } const TCHAR* CSetToolbarPage::GetAlias(const TCHAR* szCmd) { int len = m_lstAlias.Length(); for(int i=0;im_csDesName; if (_tcsicmp(csCmd, szCmd) == 0){ return (const TCHAR*)m_lstAlias[i]->m_csRecord; } } return _T(""); } void CSetToolbarPage::ResetListMenu() { m_listMenu.DeleteAllItems(); m_imageMenu.DeleteImageList(); CString csType; m_imageMenu.Create(16, 16, ILC_COLOR|ILC_MASK, 0, 32); HINSTANCE hInstance = LoadLibrary(m_xsDllFile); if (m_iType>=0) m_comboType.GetLBText(m_iType, csType); m_listMenu.SetImageList(&m_imageMenu, LVSIL_SMALL); int len = m_lstToolbarData.Length(); int n=0; for(int i=0;im_csType.CompareNoCase(csType)==0) { csChaName = m_lstToolbarData[i]->m_csName; csCmdName = m_lstToolbarData[i]->m_csCmd; if (csChaName == _T("") || csCmdName == _T("")) continue; csAlias = GetAlias(csCmdName); if (csAlias != _T("")){ int n = csChaName.GetLength(); XString xsTmp; xsTmp << (const TCHAR*)csChaName; for(int j=0;j<10-n;j++){ xsTmp << _T(" "); } xsTmp << (const TCHAR*)csAlias; csChaName = (const TCHAR*)xsTmp; } csIcon = m_lstToolbarData[i]->m_csIcon; hBitmap = LoadBitmap(hInstance, csIcon); CBitmap bitmap; bitmap.Attach(hBitmap); m_imageMenu.Add(&bitmap, RGB(192, 192, 192)); TCHAR strText[64]; _tcscpy(strText, csChaName); LV_ITEM listItem; listItem.mask = LVIF_TEXT | LVIF_IMAGE; listItem.iSubItem = 0; listItem.iItem = n; listItem.pszText = strText; listItem.iImage = n; m_listMenu.InsertItem( &listItem ); n++; } } FreeLibrary(hInstance); } void CSetToolbarPage::ApplySetToolBar() { CodeBase db; CString csCmd, csName, csDescribe, csIcon, csType; XDbfTable *pTable = db.Open(m_xsDbfFile); if (pTable) { pTable->MoveFirst(); while(!pTable->IsEOF()) { GET_FIELD(pTable, _T("chacmd"), csName); int len = m_listToolbar.GetItemCount(); int iHit(0); for(int i=0;iMoveNext(); } } else MessageBox(_T("未能成功写入tchdata.dbf文件!")); } void CSetToolbarPage::OnOK() { CodeBase db; CString csCmd, csName, csDescribe, csIcon, csType; XDbfTable *pTable = db.Open(m_xsDbfFile); if (pTable) { pTable->MoveFirst(); while(!pTable->IsEOF()) { GET_FIELD(pTable, _T("chacmd"), csName); int len = m_listToolbar.GetItemCount(); int iHit(0); for(int i=0;iMoveNext(); } } else MessageBox(_T("未能成功写入tchdata.dbf文件!")); CAcUiTabChildDialog::OnOK(); } void CSetToolbarPage::OnDblclkListMenu(NMHDR* pNMHDR, LRESULT* pResult) { OnButAdd(); *pResult = 0; } void CSetToolbarPage::OnDblclkListToolbar(NMHDR* pNMHDR, LRESULT* pResult) { OnButRemove(); *pResult = 0; } void CSetToolbarPage::OnButtonUp() { UpdateData(TRUE); int nSel = m_listToolbar.GetSelectionMark(); if (nSel < 1) return; CString csTmp1 = m_listToolbar.GetItemText(nSel, 0); CString csTmp2 = m_listToolbar.GetItemText(nSel-1, 0); if (csTmp2 == _T("")) return; int len = m_lstToolbarData.Length(); for(int i=0;im_csName.CompareNoCase(csTmp1)==0) { m_lstToolbarData[i]->m_iHit --; } if (m_lstToolbarData[i]->m_csName.CompareNoCase(csTmp2)==0) { m_lstToolbarData[i]->m_iHit ++; } } m_lstToolbarData.QuickSort(CToolbarData::SortByItem); ResetListToolbar(); m_listToolbar.SetItemState(nSel-1, LVIS_SELECTED, LVIS_SELECTED); m_listToolbar.SetSelectionMark(nSel-1); m_listToolbar.EnsureVisible(nSel-1, TRUE); m_listToolbar.SetFocus(); //add by xlc on 071016 GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); m_bChecked = TRUE; m_bModified = TRUE; } void CSetToolbarPage::OnButtonDown() { UpdateData(TRUE); int nSel = m_listToolbar.GetSelectionMark(); //modify by xlc on 071011 //if (nSel < 1) if (nSel < 0) return; CString csTmp1 = m_listToolbar.GetItemText(nSel, 0); CString csTmp2 = m_listToolbar.GetItemText(nSel+1, 0); if (csTmp2 == _T("")) return; int len = m_lstToolbarData.Length(); for(int i=0;im_csName.CompareNoCase(csTmp1)==0) { m_lstToolbarData[i]->m_iHit ++; } if (m_lstToolbarData[i]->m_csName.CompareNoCase(csTmp2)==0) { m_lstToolbarData[i]->m_iHit --; } } m_lstToolbarData.QuickSort(CToolbarData::SortByItem); ResetListToolbar(); m_listToolbar.SetItemState(nSel+1, LVIS_SELECTED, LVIS_SELECTED); m_listToolbar.SetSelectionMark(nSel+1); m_listToolbar.EnsureVisible(nSel+1, TRUE); m_listToolbar.SetFocus(); //add by xlc on 071016 GetParent()->SendMessage(TARCH_SETTING_MSG_BUTTONSTATION); m_bChecked = TRUE; m_bModified = TRUE; } void IsAppandAlias(DList &lstAll, CBlockStruct *pItem) { int iLength = lstAll.Length(); int Index = -1; for(int j=0;jm_csDesName, pItem->m_csDesName) == 0) { Index = j; break; } } if (Index > -1){ lstAll[Index]->m_csRecord = pItem->m_csRecord; delete pItem; } else lstAll.Append(pItem); } void CSetToolbarPage::ReadPgp() { FILE *fp=_tfopen(m_xsAcadPgp, _T("r")); if (!fp) return; m_lstAlias.Reset(); while(!feof(fp)) { TCHAR szBuf[256]=_T(""), szAlias[256]=_T(""), szCmd[256]=_T(""), szTmp[256]=_T(""); _fgetts(szBuf, 255, fp); if (szBuf[0] && szBuf[0] != _T(';')) { CT_strnth(szBuf, 1, szAlias); CT_strnth(szBuf, 2, szCmd); CT_strnth(szBuf, 3, szTmp); if (szTmp[0]) continue; CString csCmd = szCmd; if (csCmd.Find(_T("*")) == 0){ csCmd = csCmd.Right(csCmd.GetLength() - 1); CBlockStruct *pInfo = new CBlockStruct(); pInfo->m_csRecord = szAlias; pInfo->m_csDesName = csCmd; IsAppandAlias(m_lstAlias, pInfo); } } } fclose(fp); } void CSetToolbarPage::WritePgp() { XStringList lstPgp; FILE *fp=_tfopen(m_xsAcadPgp, _T("r")); if (!fp) return; m_lstAlias.Reset(); while(!feof(fp)) { TCHAR szBuf[256]=_T(""), szAlias[256]=_T(""), szCmd[256]=_T(""), szTmp[256]=_T(""); _fgetts(szBuf, 255, fp); CString csBuf = szBuf; if (szBuf[0] && szBuf[0] != _T(';')) { CT_strnth(szBuf, 1, szAlias); CT_strnth(szBuf, 2, szCmd); CT_strnth(szBuf, 3, szTmp); if (szTmp[0]) continue; CString csCmd = szCmd; if (csCmd.Find(_T("*")) == 0){ csCmd = csCmd.Right(csCmd.GetLength() - 1); CBlockStruct *pInfo = new CBlockStruct(); pInfo->m_csRecord = szAlias; pInfo->m_csDesName = csCmd; IsAppandAlias(m_lstAlias, pInfo); } } lstPgp.Append(tstrnew(csBuf)); } fclose(fp); FILE *fp2 = _tfopen(m_xsAcadPgp, _T("w")); if (!fp2) return; int len = lstPgp.Length(); for(int i=0; i < len; i++){ CString csTmp = lstPgp[i]; csTmp += _T("\n"); _fputts(csTmp, fp2); } fclose(fp2); } void CSetToolbarPage::OnItemchangedListMenu(NMHDR* pNMHDR, LRESULT* pResult) { if (m_bDragging) return; NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; int nSel = pNMListView->iItem; if (nSel < 0) return; CString csSel = m_listMenu.GetItemText(nSel, 0); TCHAR szSel[32]; CT_strnth(csSel, 1, szSel); csSel = szSel; int count = m_lstToolbarData.Length(); HBITMAP hBitmap = NULL; for(int j=0;jm_csName)==0) { m_csCmd = m_lstToolbarData[j]->m_csCmd; m_csAlias = GetAlias(m_csCmd); UpdateData(FALSE); break; } } *pResult = 0; } void CSetToolbarPage::OnButModify() { UpdateData(TRUE); int nSel = m_listMenu.GetSelectionMark(); if (nSel < 0) return; CBlockStruct *pInfo = new CBlockStruct(); pInfo->m_csRecord = m_csAlias; pInfo->m_csDesName = m_csCmd; IsAppandAlias(m_lstAlias, pInfo); m_bModifyAlias = TRUE; ResetListMenu(); m_listMenu.SetItemState(nSel, LVIS_SELECTED, LVIS_SELECTED); m_listMenu.SetSelectionMark(nSel); m_listMenu.EnsureVisible(nSel, TRUE); m_listMenu.SetFocus(); } void CSetToolbarPage::CreateToolbars() { //ApplySet(); //add by xlc on 071016 if (!m_bModified) return; CodeBase db; XString xsDbfFile; DList lstToolbarData; if (!FindFile(_T("tchdata.dbf"), xsDbfFile)) { AfxMessageBox(_T("对不起,没有发现tchdata.dbf文件!")); return; } CString csName, csDescribe, csIcon, csType,csCmd; int iHit=0; XDbfTable *pTable = db.Open(xsDbfFile); if (!pTable) { return; } //if (pTable) //{ // pTable->MoveFirst(); // while(!pTable->IsEOF()) { // GET_FIELD(pTable, _T("chacmd"), csName); // GET_FIELD(pTable, _T("engcmd"), csCmd); // GET_FIELD(pTable, _T("explain"), csDescribe); // GET_FIELD(pTable, _T("icon"), csIcon); // GET_FIELD(pTable, _T("flag"), iHit); // GET_FIELD(pTable, _T("type"), csType); // if (iHit > 0) // lstToolbarData.Append(new CToolbarData(csType, csCmd, csName, csDescribe, csIcon, iHit)); // pTable->MoveNext(); // } //} //else // return;/**/ int nLen = m_lstToolbarData.Length(); int j=0; /*if (pTable) { pTable->MoveFirst(); while (!pTable->IsEOF()) { GET_FIELD(pTable, _T("chacmd"), csName); for (j=0;jm_csCmd) { SET_FIELD(pTable, _T("flag"), iHit); } } pTable->MoveNext(); } }*/ for (j=0;jm_iHit>0) { lstToolbarData.Append(new CToolbarData(pToolBarData->m_csType,pToolBarData->m_csCmd,pToolBarData->m_csName,pToolBarData->m_csDescribe,pToolBarData->m_csIcon,pToolBarData->m_iHit)); } } lstToolbarData.QuickSort(CToolbarData::SortByItem); XString sMns; CStdioFile mnsFile; if (!FindFile(_T("tch.mns"), sMns)||!mnsFile.Open(sMns,CFile::modeReadWrite)) { AfxMessageBox(_T("对不起,未能找到tch.mns文件!")); return; } CString sLine; DList sList; while(mnsFile.ReadString(sLine)) if (sLine.Find(_T("ID_TCH_CUSTOM"))<0)//过滤原所有自定义信息,bug:将自定工具栏的自定义快捷鍵也清除了 sList.Append(new CString(sLine)); for(long i=0;i=0) for(long j=0;jm_csName<<_T("\",\"")<m_csIcon<<_T("\",\"")<m_csIcon<<_T("\")]")//按钮 <m_csCmd;//命令 ++i; if (i=0) for(long j=0;jm_csDescribe<<_T("]");//说明 ++i; if (i cmdecho(_T("CMDECHO"), 0); acedCommand(RTSTR,_T("menuunload"),RTSTR,_T("上华快捷菜单"),RTNONE); acedCommand(RTSTR,_T("menuload"),RTSTR,sMns,RTNONE); //用于解决工具条被关问题 //CoInitialize(NULL); //IAcadApplication *pApp = NULL; //AfxGetApp()->GetIDispatch(FALSE)->QueryInterface(__uuidof(IAcadApplication), (void **)&pApp); //if (pApp == NULL) // return; //IAcadMenuGroupsPtr pMenuGroups = pApp->GetMenuGroups(); //if (pMenuGroups == NULL) //{ // pApp->Release(); // CoUninitialize(); // return; //} //long cnt = 0; //pMenuGroups->get_Count(&cnt); //IAcadMenuGroupPtr mnuGrp = NULL; //IAcadMenuGroupPtr pMnuGrp = NULL; //for(i=0;iItem(vtName); // if (mnuGrp == NULL) // { // pApp->Release(); // CoUninitialize(); // return; // } // BSTR grpName; // mnuGrp->get_Name(&grpName); // CString cgrpName(grpName); // if (cgrpName.CompareNoCase(_T("TCH"))==0) // { // pMnuGrp = mnuGrp; // break; // } //} //if (pMnuGrp == NULL) //{ // pApp->Release(); // CoUninitialize(); // return; //} //IAcadToolbarsPtr tlbrs = NULL; //IAcadToolbarPtr tlbr = NULL; //pMnuGrp->get_Toolbars(&tlbrs); //tlbr = FindToolbar(tlbrs); //if (tlbr!=NULL) //{ // tlbr->put_Visible(TRUE); // tlbr->Dock(acToolbarDockBottom); //} //pApp->Release(); //CoUninitialize(); } //add by xlc on 071015 HCURSOR CSetToolbarPage::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } //add by xlc on 071015 void CSetToolbarPage::OnBegindragList(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; m_nDragIndex = pNMListView->iItem; POINT pt; int nOffset = 15; if (m_listToolbar.GetSelectedCount() > 1) pt.x = nOffset; pt.y = nOffset; RECT rect; m_listToolbar.GetWindowRect(&rect); m_pDragImage = new CImageList; m_pDragImage->Create(IDB_BITMAP_BOX,rect.right-rect.left,1,ILC_COLOR32); ASSERT(m_pDragImage); m_pDragImage->BeginDrag(0, CPoint(0, nOffset)); m_pDragImage->DragEnter(GetDesktopWindow(), pNMListView->ptAction); m_bDragging = TRUE; m_nDropIndex = -1; m_pDragList = &m_listToolbar; m_pDropWnd = &m_listToolbar; SetCapture (); *pResult = 0; } //add by xlc on 071015 void CSetToolbarPage::OnLButtonUp(UINT nFlags, CPoint point) { if (m_bDragging) { ReleaseCapture (); m_pDragImage->DragLeave (GetDesktopWindow ()); //结束拖拽 m_pDragImage->EndDrag (); delete m_pDragImage; CPoint pt (point); //当前鼠标坐标 ClientToScreen (&pt); CWnd* pDropWnd = WindowFromPoint (pt); ASSERT (pDropWnd); if (pDropWnd->IsKindOf (RUNTIME_CLASS (CListCtrl))) { m_pDropList = (CListCtrl*)pDropWnd; DropItemOnList(m_pDragList, m_pDropList); } m_bDragging = FALSE; } CAcUiTabChildDialog::OnLButtonUp(nFlags, point); } //add by xlc on 071015 void CSetToolbarPage::OnMouseMove(UINT nFlags, CPoint point) { if (m_bDragging) { CPoint pt(point); //当前鼠标位置 RECT lpRect; m_listToolbar.GetItemRect(0,&lpRect,LVIR_BOUNDS); int height = lpRect.bottom - lpRect.top; int dist = point.y - lpRect.top; int n = dist / height+1; pt.y = lpRect.top + n * height; CRect rect; GetDlgItem(IDC_LIST_TOOLBAR)->GetWindowRect(rect); CPoint ptS; ptS.x = rect.left; ptS.y = rect.top; ScreenToClient(&ptS); pt.x = ptS.x; ClientToScreen(&pt); m_pDragImage->DragMove(pt); m_pDragImage->DragShowNolock(false); pt.y = point.y; pt.x = ptS.x+20;//point.x; ClientToScreen(&pt); CWnd* pDropWnd = WindowFromPoint (pt); if (pDropWnd == NULL) return; if (pDropWnd != m_pDropWnd) { if (m_nDropIndex != -1) { TRACE("m_nDropIndex is -1\n"); CListCtrl* pList = (CListCtrl*)m_pDropWnd; if (pList == NULL) return; pList->SetItemState (m_nDropIndex, 0, LVIS_DROPHILITED); pList->RedrawItems (m_nDropIndex, m_nDropIndex); pList->UpdateWindow (); m_nDropIndex = -1; } else { TRACE("m_nDropIndex is not -1\n"); CListCtrl* pList = (CListCtrl*)m_pDropWnd; if (pList == NULL) return; int i = 0; int nCount = pList->GetItemCount(); for(i = 0; i < nCount; i++) { pList->SetItemState(i, 0, LVIS_DROPHILITED); } pList->RedrawItems(0, nCount); pList->UpdateWindow(); } } m_pDropWnd = pDropWnd; pDropWnd->ScreenToClient(&pt); CRect rcList; m_listToolbar.GetWindowRect(&rcList); CPoint pntScreen(point); ClientToScreen(&pntScreen); if (rcList.PtInRect(pntScreen)) { SetCursor(LoadCursor(NULL, IDC_ARROW)); UINT uFlags; CListCtrl* pList = (CListCtrl*)pDropWnd; if (pList == NULL) return; pList->SetItemState (m_nDropIndex, 0, LVIS_DROPHILITED); pList->RedrawItems (m_nDropIndex, m_nDropIndex); m_nDropIndex = ((CListCtrl*)pDropWnd)->HitTest(pt, &uFlags); if (pList->RedrawItems(m_nDropIndex, m_nDropIndex)) pList->UpdateWindow(); m_pDragImage->DragShowNolock(true); } else { SetCursor(LoadCursor(NULL, IDC_NO)); } } CAcUiTabChildDialog::OnMouseMove(nFlags, point); } // add by xlc on 071015 void CSetToolbarPage::DropItemOnList(CListCtrl* pDragList, CListCtrl* pDropList) { if (pDragList == NULL|| pDropList==NULL) return; pDropList->SetItemState (m_nDropIndex, 0, LVIS_DROPHILITED); TCHAR szLabel[256]; LVITEM lviT; LVITEM* plvitem; ZeroMemory(&lviT, sizeof (LVITEM)); lviT.iItem = m_nDragIndex; lviT.mask = LVIF_TEXT | LVIF_IMAGE; lviT.pszText = szLabel; lviT.cchTextMax = 255; lvItem* pItem; lvItem lvi; lvi.plvi = &lviT; lvi.plvi->iItem = m_nDragIndex; lvi.plvi->mask = LVIF_TEXT | LVIF_IMAGE; lvi.plvi->pszText = szLabel; lvi.plvi->cchTextMax = 255; if (pDragList->GetSelectedCount() == 1) { if (m_nDropIndex !=m_nDragIndex) { pDragList->GetItem (lvi.plvi); //拖拽项 if (pDragList == pDropList) { pDragList->DeleteItem (m_nDragIndex); if (m_nDragIndex < m_nDropIndex) m_nDropIndex--; } //插入项 lvi.plvi->iItem = (m_nDropIndex == -1) ? pDropList->GetItemCount () : m_nDropIndex; pDropList->InsertItem (lvi.plvi); pDropList->SetItemState (lvi.plvi->iItem, LVIS_SELECTED, LVIS_SELECTED); } } else //多行 { CList listItems; POSITION listPos; POSITION pos = pDragList->GetFirstSelectedItemPosition(); while(pos) { plvitem = new LVITEM; ZeroMemory(plvitem, sizeof(LVITEM)); pItem = new lvItem; pItem->plvi = plvitem; pItem->plvi->iItem = m_nDragIndex; pItem->plvi->mask = LVIF_TEXT | LVIF_IMAGE; pItem->plvi->pszText = new TCHAR[256]; pItem->plvi->cchTextMax = 255; m_nDragIndex = pDragList->GetNextSelectedItem(pos); pItem->plvi->iItem = m_nDragIndex; pDragList->GetItem(pItem->plvi); listItems.AddTail(pItem); } if (pDragList == pDropList) { pos = pDragList->GetFirstSelectedItemPosition(); while(pos) { pos = pDragList->GetFirstSelectedItemPosition(); m_nDragIndex = pDragList->GetNextSelectedItem(pos); pDragList->DeleteItem(m_nDragIndex); if (m_nDragIndex < m_nDropIndex) m_nDropIndex--; } } listPos = listItems.GetHeadPosition(); while(listPos) { pItem = listItems.GetNext(listPos); m_nDropIndex = (m_nDropIndex == -1) ? pDropList->GetItemCount() : m_nDropIndex; pItem->plvi->iItem = m_nDropIndex; pDropList->InsertItem(pItem->plvi); pDropList->SetItemState(pItem->plvi->iItem, LVIS_SELECTED, LVIS_SELECTED); m_nDropIndex++; } } m_strSelectItem.RemoveAll(); POSITION pos=pDragList->GetFirstSelectedItemPosition(); while(pos) { int index = pDragList->GetNextSelectedItem(pos); CString strItem = pDragList->GetItemText(index,0); m_strSelectItem.Add(strItem); } AdjustToolbar(); } //add by xlc on 071016 void CSetToolbarPage::AdjustToolbar() { int len = m_lstToolbarData.Length(); int nCount = m_listToolbar.GetItemCount(); for(int i=0;im_csName.CompareNoCase(csTmp)==0) { m_lstToolbarData[i]->m_iHit = j+2; nCount--; break; } } if (nCount == 0) break; } m_lstToolbarData.QuickSort(CToolbarData::SortByItem); ResetListToolbar(); for(i=0; iEnableWindow(FALSE); } LRESULT COptionSheet::OnUpdataApplyButton(WPARAM w,LPARAM l) { CButton *pButton = (CButton*)GetDlgItem(IDC_RET_APPLY); pButton->EnableWindow(TRUE); return 0; } void COptionSheet::ApplyData(int nIndex) { switch (nIndex) { case 0: { //CPropertyPage* pPage = GetPage(0); CAdUiTabChildDialog *pDlg = NULL; pDlg = m_tab.GetDialogPointer(0); HWND hWnd; hWnd = pDlg->GetSafeHwnd(); if (hWnd!=NULL) { // BOOL bVisiable; int index = ((CButton*)pDlg->GetDlgItem(IDC_SCREEN_MENU))->GetCheck(); if (index == 0) { m_pageScreenMenu.m_bScreenMenu = FALSE; } else { m_pageScreenMenu.m_bScreenMenu = TRUE; } index = ((CButton*)pDlg->GetDlgItem(IDC_RADIO1))->GetCheck(); if (index == 0) { m_pageScreenMenu.m_bLimitHeight = TRUE; } else { m_pageScreenMenu.m_bLimitHeight = FALSE; } index = ((CButton*)pDlg->GetDlgItem(IDC_SCROLL_BAR))->GetCheck(); if (index == 0) { m_pageScreenMenu.m_bScrollBar = FALSE; } else { m_pageScreenMenu.m_bScrollBar = TRUE; } index = ((CButton*)pDlg->GetDlgItem(IDC_OPEN_FIRST))->GetCheck(); if (index == 0) { m_pageScreenMenu.m_bAutoOpenFirst = FALSE; } else { m_pageScreenMenu.m_bAutoOpenFirst = TRUE; } } else { //m_pageScreenMenu.m_bScreenMenu = IsScreenMenuVisible(); m_pageScreenMenu.m_bLimitHeight = g_bLimitHeight; m_pageScreenMenu.m_bScrollBar = g_bScrollBar; m_pageScreenMenu.m_bAutoOpenFirst = g_bDefaultOpenFirst; } m_pageScreenMenu.LoadMenu(); if (g_nProductId==kTARCH && g_nVersion>6.9) acedCommand(RTSTR,_T("tmnload"),RTNONE); else acedCommand(RTSTR,_T("tmnload1"),RTNONE); //ShowScreenMenu(m_pageScreenMenu.m_bScreenMenu); m_pageScreenMenu.m_cBkCol1.Invalidate(); m_pageScreenMenu.m_cBkCol2.Invalidate(); m_pageScreenMenu.m_cBkCol3.Invalidate(); m_pageScreenMenu.m_cBkCol4.Invalidate(); acedGetAcadFrame()->RedrawWindow(NULL,NULL,RDW_ALLCHILDREN|RDW_INVALIDATE); } break; case 2: { CAdUiTabChildDialog *pDlg = NULL; pDlg = m_tab.GetDialogPointer(2); HWND hWnd; hWnd = pDlg->GetSafeHwnd(); if (hWnd!=NULL) { m_FontDlgPage.ApplySet(); } acedGetAcadFrame()->RedrawWindow(NULL,NULL,RDW_ALLCHILDREN|RDW_INVALIDATE); } break; case 3: { m_pageToolBar.ApplySetToolBar(); m_pageToolBar.m_bModified = TRUE; m_pageToolBar.CreateToolbars(); } break; case 4: { CAdUiTabChildDialog *pDlg = NULL; pDlg = m_tab.GetDialogPointer(4); HWND hWnd; hWnd = pDlg->GetSafeHwnd(); if (hWnd!=NULL) { m_pageShortCutKey.ApplyShortCutKey(); m_pageShortCutKey.WritePgp(); } } case 1: { //m_pageShortCutKey.WriteShortCutKey(); //m_pageShortCutKey.WritePgp(); CAdUiTabChildDialog *pDlg = NULL; pDlg = m_tab.GetDialogPointer(1); HWND hWnd; hWnd = pDlg->GetSafeHwnd(); if (hWnd!=NULL) { m_pageUserOperator.ApplySet(); } } break; default: break; } } void COptionSheet::OnClickDefaultOption() { //MessageBox(_T("test")); XString fullFile; if (!FindFile(_T("TOptionsDef.xml"), fullFile)) { MessageBox(_T("对不起,没有发现TOptionsDef.xml文件!")); return; } CString strPath = fullFile; CXMLDOMFile *pXMLDoc = new CXMLDOMFile; if (pXMLDoc->IsFileExist(strPath)) { if (!pXMLDoc->Open(strPath)) { delete pXMLDoc; pXMLDoc = NULL; // Zyu modify on 100726,支持64位 #ifndef _WIN64 MessageBox(_T("打开XML文档失败!请安装MSXML4.0SP2组件")); #else MessageBox(_T("打开XML文档失败!请安装MSXML6.0组件")); #endif return; } } else { delete pXMLDoc; pXMLDoc = NULL; MessageBox(_T("xml文件不存在")); return; } CString strPageName; int nIndex = m_tab.GetActiveTab()/*GetActiveIndex()*/; if (nIndex==0) { strPageName = _T("屏幕菜单"); } else if (nIndex == 1) { strPageName = _T("操作配置"); } else if (nIndex == 2) { strPageName = _T("基本界面"); } else if (nIndex==3) { strPageName = _T("工具条"); } else if (nIndex == 4) { strPageName = _T("快捷键"); } //CAcModuleResourceOverride vTemp; CImportXMLDocDlg importDlg(pXMLDoc,strPageName,1); //importDlg.SetWindowText(_T("导入默认设置")); if (importDlg.DoModal()==IDOK) { CTArchSettingEditTools setEditTool; setEditTool.SetXMLDoc(pXMLDoc); setEditTool.ImportAllTArchSettingData(importDlg.m_treeXmlDoc.m_mapData); CAdUiTabChildDialog* pPage =m_tab.GetDialogPointer(nIndex); pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); HWND hWnd; //其他窗口为创建则不发送消息 switch (nIndex) { case 0: { pPage =m_tab.GetDialogPointer(1); hWnd = pPage->GetSafeHwnd(); if (hWnd!=NULL) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(2); hWnd = pPage->GetSafeHwnd(); if (hWnd!=NULL) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(3); hWnd = pPage->GetSafeHwnd(); if (hWnd!=NULL) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(4); hWnd = pPage->GetSafeHwnd(); if (hWnd!=NULL) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } } break; case 1: { pPage =m_tab.GetDialogPointer(0); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(2); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(3); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(4); hWnd = pPage->GetSafeHwnd(); if (hWnd!=NULL) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } } break; case 2: { pPage =m_tab.GetDialogPointer(0); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(1); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(3); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(4); hWnd = pPage->GetSafeHwnd(); if (hWnd!=NULL) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } } break; case 3: { pPage =m_tab.GetDialogPointer(1); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(2); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(0); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(4); hWnd = pPage->GetSafeHwnd(); if (hWnd!=NULL) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } } case 4: { pPage =m_tab.GetDialogPointer(0); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(1); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(2); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(3); hWnd = pPage->GetSafeHwnd(); if (hWnd!=NULL) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } } break; default: break; } std::map::iterator iter; iter = importDlg.m_treeXmlDoc.m_mapData.find(_T("屏幕菜单"));//界面1 if (iter!=importDlg.m_treeXmlDoc.m_mapData.end()) { ApplyData(0); } iter = importDlg.m_treeXmlDoc.m_mapData.find(_T("操作配置"));//界面5 if (iter!=importDlg.m_treeXmlDoc.m_mapData.end()) { ApplyData(1); } iter = importDlg.m_treeXmlDoc.m_mapData.find(_T("基本界面"));//界面2 if (iter!=importDlg.m_treeXmlDoc.m_mapData.end()) { ApplyData(2); } iter = importDlg.m_treeXmlDoc.m_mapData.find(_T("工具条"));//界面3 if (iter!=importDlg.m_treeXmlDoc.m_mapData.end()) { ApplyData(3); } iter = importDlg.m_treeXmlDoc.m_mapData.find(_T("快捷键"));//界面4 if (iter!=importDlg.m_treeXmlDoc.m_mapData.end()) { ApplyData(4); } } delete pXMLDoc; } void COptionSheet::OnClickExportOption() { CFileDialog dlg(FALSE, _T("xml"), _T("上华配置.xml"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT , _T("xml文档(*.xml)|*.xml||")); if (dlg.DoModal() != IDOK) return; CString strPath = dlg.GetPathName(); CXMLDOMFile *pXMLDoc = new CXMLDOMFile; CTArchSettingEditTools setEditTools; if (!setEditTools.ExportTArchSettingData(strPath)) { // Zyu modify on 100726,支持64位 #ifndef _WIN64 MessageBox(_T("创建XML文档失败!请安装MSXML4.0SP2组件")); #else MessageBox(_T("创建XML文档失败!请安装MSXML6.0组件")); #endif } pXMLDoc->Save(); delete pXMLDoc; } void COptionSheet::OnClickImportOption() { CFileDialog dlg(TRUE, NULL, // no default extension NULL, // ..or file name OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT, _T("xml Files (*.xml)|*.xml||")); if (dlg.DoModal()==IDOK) { CString strPath = dlg.GetPathName(); CXMLDOMFile *pXMLDoc = new CXMLDOMFile; if (pXMLDoc->IsFileExist(strPath)) { if (!pXMLDoc->Open(strPath)) { delete pXMLDoc; pXMLDoc = NULL; // Zyu modify on 100726,支持64位 #ifndef _WIN64 MessageBox(_T("打开XML文档失败!请安装MSXML4.0SP2组件")); #else MessageBox(_T("打开XML文档失败!请安装MSXML6.0组件")); #endif return; } } else { delete pXMLDoc; pXMLDoc = NULL; MessageBox(_T("xml文件不存在")); return; } CXMLDOMNodePtr pRoot = pXMLDoc->GetRoot(); CString strAttriName = pRoot->GetAttributeName(); CString strAttriValue = pRoot->GetAttributeValue(strAttriName); if (strAttriValue !=_T("上华软件设置")) { delete pXMLDoc; pXMLDoc = NULL; MessageBox(_T("该文件不是上华设置文件")); return; } int nIndex =m_tab.GetActiveTab()/* GetActiveIndex()*/; CString strPageName; if (nIndex==0) { strPageName = _T("屏幕菜单"); } else if (nIndex == 1) { strPageName = _T("操作配置"); } else if (nIndex == 2) { strPageName = _T("基本界面"); } else if (nIndex==3) { strPageName = _T("工具条"); } else if (nIndex == 4) { strPageName = _T("快捷键"); } CImportXMLDocDlg importDlg(pXMLDoc,strPageName); if (importDlg.DoModal()==IDOK) { CTArchSettingEditTools setEditTool; setEditTool.SetXMLDoc(pXMLDoc); setEditTool.ImportAllTArchSettingData(importDlg.m_treeXmlDoc.m_mapData); //当前窗口 CAdUiTabChildDialog* pPage =m_tab.GetDialogPointer(nIndex); pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); HWND hWnd; //其他窗口为创建则不发送消息 switch (nIndex) { case 0: { pPage =m_tab.GetDialogPointer(1); hWnd = pPage->GetSafeHwnd(); if (hWnd!=NULL) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(2); hWnd = pPage->GetSafeHwnd(); if (hWnd!=NULL) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(3); hWnd = pPage->GetSafeHwnd(); if (hWnd!=NULL) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(4); hWnd = pPage->GetSafeHwnd(); if (hWnd!=NULL) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } } break; case 1: { pPage =m_tab.GetDialogPointer(0); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(2); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(3); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(4); hWnd = pPage->GetSafeHwnd(); if (hWnd!=NULL) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } } break; case 2: { pPage =m_tab.GetDialogPointer(0); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(1); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(3); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(4); hWnd = pPage->GetSafeHwnd(); if (hWnd!=NULL) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } } break; case 3: { pPage =m_tab.GetDialogPointer(1); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(2); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(0); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(4); hWnd = pPage->GetSafeHwnd(); if (hWnd!=NULL) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } } break; case 4: { pPage =m_tab.GetDialogPointer(0); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(1); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(2); hWnd = pPage->GetSafeHwnd(); if (hWnd) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } pPage =m_tab.GetDialogPointer(3); hWnd = pPage->GetSafeHwnd(); if (hWnd!=NULL) { pPage->SendMessage(TARCH_SETTING_MSG_UPDATA); } } default: break; } std::map::iterator iter; iter = importDlg.m_treeXmlDoc.m_mapData.find(_T("屏幕菜单"));//界面1 if (iter!=importDlg.m_treeXmlDoc.m_mapData.end()) { ApplyData(0); } iter = importDlg.m_treeXmlDoc.m_mapData.find(_T("操作配置"));//界面5 if (iter!=importDlg.m_treeXmlDoc.m_mapData.end()) { ApplyData(1); } iter = importDlg.m_treeXmlDoc.m_mapData.find(_T("基本界面"));//界面2 if (iter!=importDlg.m_treeXmlDoc.m_mapData.end()) { ApplyData(2); } iter = importDlg.m_treeXmlDoc.m_mapData.find(_T("工具条"));//界面3 if (iter!=importDlg.m_treeXmlDoc.m_mapData.end()) { ApplyData(3); } iter = importDlg.m_treeXmlDoc.m_mapData.find(_T("快捷键"));//界面4 if (iter!=importDlg.m_treeXmlDoc.m_mapData.end()) { ApplyData(4); } } delete pXMLDoc; } } // COptionSheet 消息处理程序 BOOL COptionSheet::OnInitDialog() { BOOL bResult = CAcUiTabMainDialog::OnInitDialog(); SetAcadTabPointer(&m_tab); /*int i = m_tab.GetActiveTab();*/ AddTab(0, _T("屏幕菜单"), CScreenMenuPage::IDD, &m_pageScreenMenu); AddTab(1,_T("操作配置"),CUserOpreatorSet::IDD , &m_pageUserOperator); AddTab(2, _T("基本界面"),CFontPropertyPage::IDD , &m_FontDlgPage); AddTab(3, _T("工具条"),CSetToolbarPage::IDD , &m_pageToolBar); AddTab(4, _T("快捷键"),CShortCutKeyPage::IDD , &m_pageShortCutKey); m_tab.SetActiveTab(c_iSelectPage); return bResult; } void COptionSheet::OnDestroy() { CAcUiTabMainDialog::OnDestroy(); //add by xlc on 090804 cancel时不保存数据 if (g_bCancel) { return; } c_iSelectPage = m_tab.GetActiveTab(); } void COptionSheet::OnCancel() { g_bCancel = TRUE; CAcUiTabMainDialog::OnCancel(); } void COptionSheet::OnOK() { //int nTest =100; m_FontDlgPage.SendMessage(TARCH_SETTING_MSG_BUTTONOK); m_FontDlgPage.WriteIni(); CAcUiTabMainDialog::OnOK(); } void COptionSheet::OnCommandHelp() { XString sTchIni; CString csHelpFile; if (FindFile(_T("tch.ini"), sTchIni)) { INI_struct *inis=NULL; if (CT_get_INIs(sTchIni, _T("Product"), &inis)) { TCHAR *pHelpFile=CT_get_INI2(inis, _T("HelpFile")); if (pHelpFile) csHelpFile=pHelpFile; CT_free_INIs(inis); } } XString sFile; if (FindFile((const TCHAR *)csHelpFile, sFile)) { CString csHelpKey; GetWindowText(csHelpKey); HH_AKLINK link; link.cbStruct = sizeof(HH_AKLINK) ; link.fReserved = FALSE ; link.pszKeywords = csHelpKey; link.pszUrl = NULL ; link.pszMsgText = NULL ; link.pszMsgTitle = NULL ; link.pszWindow = NULL ; link.fIndexOnFail = TRUE ; ::HtmlHelp(NULL,(LPCTSTR)sFile,HH_DISPLAY_TOPIC ,NULL); // Zyu modify on 100722,支持64位 //::HtmlHelp(NULL,(LPCTSTR)sFile,HH_KEYWORD_LOOKUP ,(DWORD)&link); //::HtmlHelp(NULL,(LPCTSTR)sFile,HH_DISPLAY_INDEX ,(DWORD)(const TCHAR *)csHelpKey); ::HtmlHelp(NULL,(LPCTSTR)sFile,HH_KEYWORD_LOOKUP ,(DWORD_PTR)&link); ::HtmlHelp(NULL,(LPCTSTR)sFile,HH_DISPLAY_INDEX ,(DWORD_PTR)(const TCHAR *)csHelpKey); } } ///////////////////// //add by xlc on 070924 CCommandDlg::CCommandDlg(CWnd* pParent /*=NULL*/) : GlwCAcUiDialog(CCommandDlg::IDD, pParent) { m_iType = -1; m_csCmd = _T(""); m_strCnName = _T(""); m_bClick = FALSE; //{{AFX_DATA_INIT(CCommandDlg) CodeBase db; if (!FindFile(_T("tchdata.dbf"), m_xsDbfFile)) { MessageBox(_T("对不起,没有发现tchdata.dbf文件!")); return; } if (!FindFile(_T("TCH.DLL"), m_xsDllFile)) { MessageBox(_T("对不起,没有发现TCH.DLL文件!")); return; } CString csCmd, csName, csDescribe, csIcon, csType; int iHit; XDbfTable *pTable = db.Open(m_xsDbfFile); if (pTable) { pTable->MoveFirst(); while(!pTable->IsEOF()) { GET_FIELD(pTable, _T("chacmd"), csName); GET_FIELD(pTable, _T("engcmd"), csCmd); GET_FIELD(pTable, _T("explain"), csDescribe); GET_FIELD(pTable, _T("icon"), csIcon); GET_FIELD(pTable, _T("flag"), iHit); GET_FIELD(pTable, _T("type"), csType); m_lstToolbarData.Append(new CToolbarData(csType, csCmd, csName, csDescribe, csIcon, iHit)); if (m_lstType.Index(csType) < 0) m_lstType.Append(tstrnew(csType)); pTable->MoveNext(); } } else { return; } //}}AFX_DATA_INIT } void CCommandDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCommandDlg) DDX_Control(pDX, IDC_LIST_CMD, m_listCmd); DDX_Control(pDX, IDC_LIST_MENU, m_listMenu); DDX_Control(pDX, IDC_LIST_TYPE, m_listType); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CCommandDlg, GlwCAcUiDialog) //{{AFX_MSG_MAP(CCommandDlg) // NOTE: the ClassWizard will add message map macros here ON_NOTIFY(NM_CLICK, IDC_LIST_MENU, OnClickListMenu) ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_MENU, OnItemchangedListMenu) ON_NOTIFY(NM_DBLCLK, IDC_LIST_CMD, OnDblClkListCmd) ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_CMD, OnItemchangedListCmd) ON_LBN_SELCHANGE(IDC_LIST_TYPE, OnSelchangeListType) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CCommandDlg message handlers BOOL CCommandDlg::OnInitDialog() { CDialog::OnInitDialog(); int len = m_lstType.Length(); for(int i=0;im_csCmd; if (m_strCnName.CompareNoCase(m_lstToolbarData[i]->m_csCmd)==0) { LVFINDINFO info; info.flags = LVFI_PARTIAL|LVFI_STRING; info.psz = m_lstToolbarData[i]->m_csType; index = m_listMenu.FindItem(&info); if (index == -1) index = 0; break; } } m_listMenu.SetItemState(index,LVIS_SELECTED|LVIS_FOCUSED, 255); m_listMenu.SetSelectionMark(index); m_listMenu.EnsureVisible(index, TRUE); m_listMenu.SetFocus(); GetDlgItem(IDC_EDIT_MENU)->SetWindowText(m_listMenu.GetItemText(index,0)); for(i = 0; i < m_lstToolbarData.Length(); i++) { if (m_strCnName.CompareNoCase(m_lstToolbarData[i]->m_csCmd)==0) { CString strType = m_lstToolbarData[i]->m_csType; int index = m_listType.FindStringExact(-1,strType); if (index != LB_ERR) m_listType.SetCurSel(index); break; } } ResetListCmd(); LVFINDINFO info; info.flags = LVFI_PARTIAL|LVFI_STRING; if (i >= m_lstToolbarData.Length()) { index = 0; } else { info.psz = m_lstToolbarData[i]->m_csName; index = m_listCmd.FindItem(&info); if (index == -1) index = 0; } m_listCmd.SetFocus(); m_listCmd.SetItemState(index, LVIS_SELECTED|LVIS_FOCUSED, 255); m_listCmd.SetSelectionMark(index); m_listCmd.EnsureVisible(index, TRUE); GetDlgItem(IDC_EDIT_CMD)->SetWindowText(m_listCmd.GetItemText(index,0)); return TRUE; } void CCommandDlg::ResetListCmd() { m_listCmd.DeleteAllItems(); m_imageCmd.DeleteImageList(); m_imageCmd.Create(16, 16, ILC_COLOR|ILC_MASK, 0, 32); HINSTANCE hInstance = LoadLibrary(m_xsDllFile); /* POSITION pos = m_listMenu.GetFirstSelectedItemPosition(); if (pos != NULL) { m_iType = m_listMenu.GetNextSelectedItem(pos); } else { return; } */ CString csType; m_iType = m_listType.GetCurSel(); if (m_iType != -1) { m_listType.GetText(m_iType,csType); } /* CString csType; if (m_iType>=0) { csType = m_listMenu.GetItemText(m_iType,0); } */ else { return; } m_listCmd.SetImageList(&m_imageCmd, LVSIL_SMALL); int len = m_lstToolbarData.Length(); int n=0; for(int i=0;im_csType.CompareNoCase(csType)==0) { csChaName = m_lstToolbarData[i]->m_csName; csCmdName = m_lstToolbarData[i]->m_csCmd; if (csChaName == _T("") || csCmdName == _T("")) continue; csIcon = m_lstToolbarData[i]->m_csIcon; hBitmap = LoadBitmap(hInstance, csIcon); CBitmap bitmap; bitmap.Attach(hBitmap); m_imageCmd.Add(&bitmap, RGB(192, 192, 192)); TCHAR strText[64]; _tcscpy(strText, csChaName); LV_ITEM listItem; listItem.mask = LVIF_TEXT | LVIF_IMAGE; listItem.iSubItem = 0; listItem.iItem = n; listItem.pszText = strText; listItem.iImage = n; m_listCmd.InsertItem( &listItem ); n++; } } FreeLibrary(hInstance); } void CCommandDlg::OnClickListMenu(NMHDR* pNMHDR, LRESULT* pResult) { POSITION pos = m_listMenu.GetFirstSelectedItemPosition(); int index=-1; if (pos != NULL) { index = m_listMenu.GetNextSelectedItem(pos); } if (m_iType == index) { return; } m_bClick = TRUE; ResetListCmd(); m_listCmd.SetItemState(0, LVIS_SELECTED|LVIS_FOCUSED, 255); m_listCmd.SetSelectionMark(0); m_listCmd.EnsureVisible(0, TRUE); ResetMenuTip(); ResetCmdTip(); *pResult = 0; } void CCommandDlg::OnItemchangedListMenu(NMHDR* pNMHDR, LRESULT* pResult) { if (m_bClick) { m_bClick = FALSE; return; } ResetListCmd(); m_listCmd.SetItemState(0, LVIS_SELECTED|LVIS_FOCUSED, 255); m_listCmd.SetSelectionMark(0); m_listCmd.EnsureVisible(0, TRUE); ResetMenuTip(); ResetCmdTip(); *pResult = 0; } void CCommandDlg::OnItemchangedListCmd(NMHDR* pNMHDR, LRESULT* pResult) { ResetCmdTip(); *pResult = 0; } void CCommandDlg::OnDblClkListCmd(NMHDR* pNMHDR, LRESULT* pResult) { OnOK(); *pResult = 0; } void CCommandDlg::GetCurrentCmd() { POSITION pos = m_listCmd.GetFirstSelectedItemPosition(); int index=-1; int n = m_listCmd.GetItemCount( ); if (pos != NULL) { index = m_listCmd.GetNextSelectedItem(pos); m_strCnName = m_listCmd.GetItemText(index, 0); for(int i = 0; i < m_lstToolbarData.Length(); i++) { if (m_strCnName.CompareNoCase(m_lstToolbarData[i]->m_csName)==0) { m_csCmd = m_lstToolbarData[i]->m_csCmd; return; } } } m_csCmd.Empty(); } void CCommandDlg::OnOK() { GetCurrentCmd(); CDialog::OnOK(); } void CCommandDlg::ResetMenuTip() { POSITION pos = m_listMenu.GetFirstSelectedItemPosition(); int index=-1; if (pos != NULL) { index = m_listMenu.GetNextSelectedItem(pos); GetDlgItem(IDC_EDIT_MENU)->SetWindowText(m_listMenu.GetItemText(index,0)); } } void CCommandDlg::ResetCmdTip() { POSITION pos = m_listCmd.GetFirstSelectedItemPosition(); int index=-1; if (pos != NULL) { index = m_listCmd.GetNextSelectedItem(pos); GetDlgItem(IDC_EDIT_CMD)->SetWindowText(m_listCmd.GetItemText(index,0)); } } void CCommandDlg::OnSelchangeListType() { int iType = m_listType.GetCurSel(); if (iType == m_iType) return; ResetListCmd(); m_listCmd.SetItemState(0, LVIS_SELECTED|LVIS_FOCUSED, 255); m_listCmd.SetSelectionMark(0); m_listCmd.EnsureVisible(0, TRUE); ResetCmdTip(); } //add by xlc on 071018 CCommandPgpDlg::CCommandPgpDlg(CWnd* pParent /*=NULL*/) : GlwCAcUiDialog(CCommandPgpDlg::IDD, pParent) { m_strCmd = _T(""); m_strType = _T(""); m_strTypeArray.RemoveAll(); //{{AFX_DATA_INIT(CCommandPgpDlg) CodeBase db; if (!FindFile(_T("acad.pgp"), m_xsAcadPgp)) { MessageBox(_T("对不起,没有发现acad.pgp文件!")); return; } CStdioFile file; if (!file.Open(m_xsAcadPgp, CFile::modeRead)) { AfxMessageBox(CString(_T("打开文件 \"")) + m_xsAcadPgp + _T("\" 失败")); return ; } CString sString; CString strType; while(file.ReadString(sString)) { TCHAR sKey[256] = _T(""); TCHAR sName[256] = _T(""); if (sString[0]) { if (sString[0] == _T(';') && sString[1] == _T(';')) { strType = sString.Right(sString.GetLength()-2); m_strTypeArray.Add(strType); } else if (sString[0] != _T(';')) { if (sString.Find(_T("*")) == -1 ||sString.Find(_T(":")) != -1) { continue; } CString str = sString; CPgpStruck pgpStruck; CString strCmd = str.Right(str.GetLength()-str.Find(_T("*"))-1); pgpStruck.m_strType = strType; pgpStruck.m_strCmd = strCmd; m_lstPgpCmd.AddTail(pgpStruck); } } } file.Close(); //}}AFX_DATA_INIT } void CCommandPgpDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCommandPgpDlg) DDX_Control(pDX, IDC_LIST_CMD, m_listCmd); DDX_Control(pDX, IDC_LIST_TYPE, m_listType); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CCommandPgpDlg, GlwCAcUiDialog) //{{AFX_MSG_MAP(CCommandPgpDlg) // NOTE: the ClassWizard will add message map macros here ON_LBN_SELCHANGE(IDC_LIST_TYPE, OnSelchangeListType) ON_LBN_DBLCLK(IDC_LIST_CMD, OnDblclkListCmd) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CCommandPgpDlg message handlers BOOL CCommandPgpDlg::OnInitDialog() { CDialog::OnInitDialog(); // Zyu modify on 100722,支持64位 //int len = m_strTypeArray.GetSize(); INT_PTR len = m_strTypeArray.GetSize(); for(int i=0;i