void CDlgFormulaFind::OnLvnItemActivateResultlist(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMIA = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); DWORD dwData = m_wndResultList.GetItemData(pNMIA->iItem); //发双击在K线处显示消息 //双击指标 将指标发送回外部 if(m_pParentWnd != NULL) { m_pParentWnd->SendMessage(HX_USER_DRAGDATA, HSCurKeyInfo::UpdateExpressData/*HX_USER_DRAGDATA-1*/, (LPARAM)dwData); if( !m_pParentWnd->IsZoomed() && !m_pParentWnd->IsIconic() ) { CRect rect,rcDes,rcThis; CWnd* pDesWnd = GetDesktopWindow(); if( pDesWnd ) { pDesWnd->GetWindowRect(rcDes); } m_pParentWnd->GetWindowRect(rect); this->GetWindowRect(rcThis); if( rect.right + rcThis.Width() > rcDes.right ) rect.right = rcDes.right - rcThis.Width(); this->SetWindowPos(NULL,rect.right,rcThis.top,0,0,SWP_NOSIZE); } //m_pParentWnd->SetFocus(); } else { CExpression* pExpression = (CExpression*)dwData; ExpPropery NameProp; NameProp.m_dExpType = pExpression->GetExpressType(); NameProp.m_strName.Format("%s", pExpression->GetName()); NameProp.m_strDescribe.Format("%s", pExpression->GetDescribe()); NameProp.m_bStyle = pExpression->GetStyle(); if ( g_pFormulaMan ) g_pFormulaMan->SendLinkMsg(DiagramMsg_FormulaParamChanged, (LPARAM)&NameProp); } *pResult = 0; }
long CCompileEditView::Compile(CDlgFormulaEdit* pDlg, LPARAM lParam /*= 0*/) { if(m_pListCtrl != NULL) { m_pListCtrl->DeleteAllItems(); } if( m_pParentDlg == NULL && pDlg != NULL ) { m_pParentDlg = pDlg; } if( pDlg == NULL ) return 0; this->SetFocus(); CString strValue; GetRichEditCtrl().GetWindowText(strValue); if(strValue.IsEmpty()) return -1; CString strName; CWnd* pNameEdit = pDlg->GetDlgItem(IDC_NAMEEDIT); // 名称 if( pNameEdit != NULL ) { pNameEdit->GetWindowText(strName); } if(strName.IsEmpty()) { MessageBox(_T("请输入名称!"),_T("提示"),MB_ICONINFORMATION); if(pNameEdit != NULL) { pNameEdit->SetFocus(); } return FALSE; } strName.TrimLeft(); strName.TrimRight(); strName.MakeUpper(); CValue* pValoare = NULL; if( pDlg->IsType(CDlgFormulaEdit::Update) ) { if( strName.CompareNoCase(pDlg->m_strOldName) && m_pExternExpression->Lookup(strName,pDlg->m_nExpressType,pValoare) ) { CString strPrompt; strPrompt.Format(_T("公式 \"%s\" 已经存在,请改名保存"),strName); MessageBox(strPrompt,_T("提示"),MB_ICONINFORMATION); pNameEdit->SetFocus(); ((CEdit*)pNameEdit)->SetSel(0,-1); return 0; } if( m_pExternExpression->Lookup(pDlg->m_strOldName,pDlg->m_nExpressType,pValoare) ) { } } else if ( m_pExternExpression->Lookup(strName,pDlg->m_nExpressType,pValoare) ) { if( pDlg->IsType(CDlgFormulaEdit::NewExp) ) { CString strPrompt; strPrompt.Format(_T("公式 \"%s\" 已经存在,请改名保存"),strName); MessageBox(strPrompt,_T("提示"),MB_ICONINFORMATION); pNameEdit->SetFocus(); ((CEdit*)pNameEdit)->SetSel(0,-1); return 0; } } CExpression* pExpresie = new CExpression(m_pExternExpression, m_pExternVariabile,m_pExternFunction); if( pDlg) { pDlg->AddToParamerList(pExpresie); } //CWnd* pPromptWnd = m_pParentDlg->GetDlgItem(IDC_PROMTEDIT); //CWnd* pBtError = m_pParentDlg->GetDlgItem(IDC_ERROR); CWnd* pPromptWnd = m_pParentDlg->m_pErrorDlg; CString strErroText; nodErrorInfo info(0,0,0,strName); int nErrorCount = pExpresie->ChangeExpression(strValue); if( nErrorCount == 0 ) { strErroText = _T("公式编译(测试)通过!"); CTreeCtrlFormula* pHxTreeCtrl = NULL; BOOL bAdd = FALSE; CExpValue* pValue = NULL; if(pValoare != NULL) { pValue = (CExpValue*)pValoare; CExpression* pOldExpress = pValue->GetExp(); if(pOldExpress != NULL) { pExpresie->SetExpressType(pDlg->m_nExpressType); //qinhn 20090729 Add 保证在修改编译公式时,其"常用指标"的属性不变 if (pOldExpress->IsStyle(HS_EXP_DEFAULT_TECH)) { pExpresie->AddStyle(HS_EXP_DEFAULT_TECH); } //qinhn 20090729 Add End } pValue->Clean(); if( pDlg->IsType(CDlgFormulaEdit::Update) && strName.CompareNoCase(pDlg->m_strOldName) ) { m_pExternExpression->RemoveKey(pDlg->m_strOldName,pDlg->m_nExpressType); bAdd = TRUE; } } else { pExpresie->SetExpressType(pDlg->m_nExpressType); } if(pValue == NULL) { pValue = new CExpValue; bAdd = TRUE; } pValue->SetValue(pExpresie); pExpresie->SetName(strName); //qinhn 20090727 modify 设置类型,只编译保存则类型不变 if (CDlgFormulaEdit::bNeedChangeStyle ) pExpresie->AddStyle( ((!pDlg->m_nMainChart)?HS_EXP_MAINCHART:HS_EXP_SUBCHART) ); else pExpresie->AddStyle(((!pDlg->m_CharType)?HS_EXP_MAINCHART:HS_EXP_SUBCHART)); pExpresie->AddStyle( HS_EXP_OUTTYPE(pDlg->m_dStyle) ); CDlgFormulaEdit::bNeedChangeStyle = false; //qinhn 20090717 modify End if( bAdd ) { m_pExternExpression->AddExpress(strName,pValue); } CString strText; CWnd* pWnd = pDlg->GetDlgItem(IDC_DESCRIBEEDIT); // 公式描述 if(pWnd != NULL) { pWnd->GetWindowText(strText); pExpresie->SetDescribe(strText); } pWnd = pDlg->GetDlgItem(IDC_PWDEDIT); // 密码 if(pWnd != NULL && !(pWnd->GetStyle() & WS_DISABLED) ) { pWnd->GetWindowText(strText); pExpresie->SetPWD(strText); } if(pDlg->m_pDlgNotes != NULL) // 注释 { strText = pDlg->m_pDlgNotes->GetText(); pExpresie->SetNotes(strText); } if( pDlg->m_pDlgEidolon ) // 参数精灵 { strText = pDlg->m_pDlgEidolon->GetText(); pExpresie->SetEidolon(strText); } if( m_pEstopPeriodDlg != NULL ) { *pExpresie->GetEstopPeriod() = m_pEstopPeriodDlg->GetEstopPeriod(); // 禁用周期 *pExpresie->GetDefaultPeriod() = m_pEstopPeriodDlg->GetDefaultPeriod(); // 缺省周期 } // 更新树 if( pDlg->m_pFormulaMan != NULL ) { pHxTreeCtrl = pDlg->m_pFormulaMan->GetCurTree((WORD)pDlg->m_nExpressType); if(pHxTreeCtrl != NULL) { //pExpresie->SetExpressType(pHxTreeCtrl->GetType()); if(pValoare != NULL) { //pHxTreeCtrl->UpdateTreeItemData(pValoare,pValue); } else { if(pDlg != NULL) { pDlg->SetTitle(pExpresie->GetExpressType(),strName); } pHxTreeCtrl->AddItem(strName,pValue,m_pExternExpression); if( pDlg->IsType(CDlgFormulaEdit::NewExp) ) { pDlg->m_strOldName = strName; pExpresie->AddStyle(HS_EXP_USEREDIT); pDlg->SetType(CDlgFormulaEdit::Update | pDlg->IsType(CDlgFormulaEdit::SpeedNew)); } } } } // 更新绘图窗口 ExpPropery NameProp; NameProp.m_dExpType = pExpresie->GetExpressType(); NameProp.m_strName.Format("%s", pExpresie->GetName()); NameProp.m_strDescribe.Format("%s", pExpresie->GetDescribe()); NameProp.m_bStyle = pExpresie->GetStyle(); if ( g_pFormulaMan ) g_pFormulaMan->SendLinkMsg(DiagramMsg_FormulaParamChanged,(LPARAM)&NameProp); if(pPromptWnd != NULL) { pPromptWnd->SendMessage(HX_USER_COMPILE_INFO,0,0); //pPromptWnd->SetWindowText(strErroText); } m_pParentDlg->ShowResult(CDlgFormulaEdit::CompileResult); ::SendMessage(g_hParentWnd,g_SendReLoadTabItemMsg,0,0); //qinhn 20090721 Add 重新载入T指标ab页,防止点修改公式对话框里面的"保存"后出错 return (long)pExpresie; } else { /*strErroText = "公式有几个错误!"; if(pBtError != NULL) { pBtError->EnableWindow(TRUE); } if(pPromptWnd != NULL) { pPromptWnd->SetWindowText(strErroText); }*/ //AddCompileInfotoList(11,(LPARAM)&info); m_pParentDlg->ShowResult(CDlgFormulaEdit::CompileResult); delete pExpresie; } return 0; }