BOOL CFileBasedProjectTemplateItem::CreateMainFile(LPCTSTR lpszTargetPath, LPCTSTR lpszCrLf) { CStringW text; TextDocument doc; bool result = doc.Read(m_strPath,text); if (result) { const CStringW lineendings(L"\r\n"); int index = text.FindOneOf(lineendings); if (index != -1) { CStringW line = text.Left(index); const CStringW strKey(L"%DESCRIPTION: "); CStringW strStartOfLine = line.Left(strKey.GetLength()); strStartOfLine.MakeUpper(); if (strKey == strStartOfLine) { text.Delete(0,index); text.TrimLeft(lineendings + L' '); } } LPCWSTR le = GetLineEnding(static_cast<LPCWSTR>(text),text.GetLength()); USES_CONVERSION; if (std::wcscmp(le,T2CW(lpszCrLf)) != 0) // Line endings not equal text.Replace(le,lpszCrLf); result = doc.Write(lpszTargetPath,text); } return result; }
HRESULT CIfExpressEditorDlg::OnMsgStructSelectParam(WPARAM,LPARAM lp) { CCxStructTreeNode *pNode = reinterpret_cast< CCxStructTreeNode * >(lp); CCxStructTreeNode *pNodeBackUpTmp = NULL; if (IDC_EDIT_LEFT == m_iFocusEidtPCtrlID) { pNodeBackUpTmp = m_pNodeLeft; m_pNodeLeft = pNode; GetCheckDataType(m_pNodeLeft); // 左侧节点重新选择后,需更新校验类型 if (m_ComboRightType.GetCurSel()==TP_CONST) CheckGetConst(TRUE); // 切换类型后就检查 } else if (IDC_EDIT_RIGHT == m_iFocusEidtPCtrlID) { pNodeBackUpTmp = m_pNodeRight; m_pNodeRight = pNode; } CString strText; BOOL bHaveArry = FALSE; if (pNode->m_NodeType == CCxStructTreeNode::NT_PARAM_ARRAY) // 数组参数ID需要去掉后面的元素名称,否则全路径找不到 { bHaveArry = TRUE; strText = pNode->m_strText; //获取数组下标 while(pNode && pNode->m_NodeType==CCxStructTreeNode::NT_PARAM_ARRAY) pNode = pNode->m_pParent; } CString strParamID = pNode->m_strID; CString strFullPath = GetDataFullPathByID(strParamID,NULL); // 获取参数全路径 CString strArry = ""; if (bHaveArry) { // 以下代码从带下标的数组参数中获取下标部分,例如doubel-数组.test[10]得到[10] strArry = strText; CString strParamName = pNode->m_strOriName; CStringW strWArry = LPCWSTR(_bstr_t(strArry)); CStringW strWParamName = LPCWSTR(_bstr_t(strParamName)); strWArry.TrimLeft(strWParamName); //得到只剩数组下标的部分 strArry = LPCTSTR(_bstr_t(strWArry)); } if (IDC_EDIT_LEFT == m_iFocusEidtPCtrlID) //给左编辑框赋值 { UpdateComboBoxSymbol(); // 根据节点类型调整运算符 m_Express.m_LeftParam.Clear(); m_Express.m_LeftParam.strID = strParamID; // 记录参数ID m_Express.m_LeftParam.strParamFullPath = strFullPath; // 记录参数全路径 m_EditLeft.SetWindowText(strFullPath); if (bHaveArry) { m_Express.m_LeftParam.strArry = strArry; //记录选择的数组下标 m_EditLeftArry.SetWindowText(strArry); m_EditLeftArry.ShowWindow(SW_SHOW); m_EditLeftArry.ChangeBkColor(false); } else m_EditLeftArry.ShowWindow(SW_HIDE); AdjustLeftEditSize(); if (bHaveArry) m_EditLeftArry.SetFocus(); else m_EditLeft.SetFocus(); m_EditLeft.ChangeBkColor(false); } else if (IDC_EDIT_RIGHT == m_iFocusEidtPCtrlID) { int iTempCheck = m_iCheckType; GetCheckDataType(pNode); int iCurType = m_iCheckType; m_iCheckType = iTempCheck; if (iCurType!=m_iCheckType && m_iCheckType!=-1) // 运算符左右类型不一致 { MessageBox("所选节点与运算符左侧参数类型不一致!",g_lpszAppTitle,MB_OK|MB_ICONINFORMATION); m_pNodeRight = pNodeBackUpTmp; return S_OK; } m_Express.m_RightParam.Clear(); m_Express.m_RightParam.strID = strParamID; // 记录参数ID m_Express.m_RightParam.strParamFullPath = strFullPath; // 记录参数全路径 m_EditRight.SetWindowText(strFullPath); if (bHaveArry) { m_Express.m_RightParam.strArry = strArry; //记录选择的数组下标 m_EditRightArry.SetWindowText(strArry); m_EditRightArry.ShowWindow(SW_SHOW); m_EditRightArry.ChangeBkColor(false); } else m_EditRightArry.ShowWindow(SW_HIDE); AdjustRightEditSize(); if (bHaveArry) m_EditRightArry.SetFocus(); else m_EditRight.SetFocus(); m_EditRight.ChangeBkColor(false); // 重置错误状态 m_EditRightArry.ChangeBkColor(false); } m_wndTreeDropDown.ShowWindow(SW_HIDE); return S_OK; }
void Definition::GetAsNumber(Number<T>& n, StringMapW<T>* n2n) { CStringW str = m_value; str.Replace(L" ", L""); n.value = 0; n.unit = m_unit; n.sign = 0; if(n2n) { if(m_status == node) throw Exception(_T("expected value type")); if(StringMapW<T>::CPair* p = n2n->Lookup(str)) { n.value = p->m_value; return; } } if(m_status != number) throw Exception(_T("expected number")); n.sign = str.Find('+') == 0 ? 1 : str.Find('-') == 0 ? -1 : 0; str.TrimLeft(L"+-"); if(str.Find(L"0x") == 0) { if(n.sign) throw Exception(_T("hex values must be unsigned")); n.value = (T)wcstoul(str.Mid(2), NULL, 16); } else { CStringW num_string = m_value + m_unit; if(m_num_string != num_string) { Split sa(':', str); Split sa2('.', sa ? sa[sa-1] : L""); if(sa == 0 || sa2 == 0 || sa2 > 2) throw Exception(_T("invalid number")); float f = 0; for(size_t i = 0; i < sa; i++) { f *= 60; f += wcstoul(sa[i], NULL, 10); } if(sa2 > 1) f += (float)wcstoul(sa2[1], NULL, 10) / pow((float)10, sa2[1].GetLength()); if(n.unit == L"ms") { f /= 1000; n.unit = L"s"; } else if(n.unit == L"m") { f *= 60; n.unit = L"s"; } else if(n.unit == L"h") { f *= 3600; n.unit = L"s"; } m_num.value = f; m_num.unit = n.unit; m_num_string = num_string; n.value = (T)f; } else { n.value = (T)m_num.value; n.unit = m_num.unit; } if(n.sign) n.value *= n.sign; } }