📄 cellview.cpp
字号:
// Ignore empty strings in integer or floating cells - these are legal as intermediate values but not now if(strValue!=ti.StringValue() && (!strValue.IsEmpty() || (ti.Type()!=CConfigItem::Integer && ti.Type()!=CConfigItem::Double))){ CConfigTool::GetConfigToolDoc()->SetValue (ti, strValue); } } deleteZ(m_pwndCell); m_hInCell=NULL; }}BOOL CCellView::InCell(HTREEITEM h){ CancelCellEdit(); if(h && TI(h).IsEnabled()){ CConfigItem &ti=TI(h); // edit cell only if option is both active and modifiable const CdlValuable valuable = ti.GetCdlValuable(); // check packages explicitly because is_modifiable() returns true for a package if ((! valuable) || (valuable->is_modifiable () && valuable->is_active () && ! ti.IsPackage ())){ CRect rcEdit; GetItemRect(h,rcEdit); rcEdit.bottom++; switch(ti.Type()){ case CConfigItem::Double: { double d; CUtils::StrToDouble(ti.StringValue(),d); m_pwndCell=new CDoubleEdit(d); m_pwndCell->Create(WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL, rcEdit, this, IDC_CELL); } break; case CConfigItem::Integer: { ItemIntegerType i; CUtils::StrToItemIntegerType(ti.StringValue(),i); m_pwndCell=new CIntegerEdit(i); } m_pwndCell->Create(WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL, rcEdit, this, IDC_CELL); break; case CConfigItem::String: { CStringEdit *pStringEdit=new CStringEdit(ti.StringValue()); m_pwndCell=pStringEdit; m_pwndCell->Create(WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL, rcEdit, this, IDC_CELL); pStringEdit->EnableDoubleClickEdit(true,IDC_CT_EDIT); } break; case CConfigItem::Enum: { CStringArray arEnum; ti.EvalEnumStrings(arEnum); rcEdit.bottom += (2+(int)arEnum.GetSize()-1)*rcEdit.Height(); m_pwndCell=new CComboEdit(ti.StringValue(),arEnum); m_pwndCell->Create(WS_CHILD|WS_VISIBLE|CBS_DROPDOWNLIST, rcEdit, this, IDC_CELL); } break; default: return 0; break; } m_hInCell=h; m_pwndCell->SetFont(CFont::FromHandle((HFONT)GetStockObject(DEFAULT_GUI_FONT))); m_pwndCell->SetFocus(); m_pwndCell->GetWindowText(m_strInitialCell); } } return NULL!=m_hInCell;}void CCellView::OnLButtonDown(UINT nFlags, CPoint point) { UNUSED_ALWAYS(nFlags); CTreeCtrl &Tree=CConfigTool::GetControlView()->GetTreeCtrl(); CancelCellEdit(); HTREEITEM h=HitTest(); if(h){ InCell(h); Tree.SelectItem(h); } // Relay to the splitter ClientToScreen(&point); GetParent()->ScreenToClient(&point); GetParent()->SendMessage(WM_LBUTTONDOWN,(WPARAM)nFlags,MAKELPARAM(point.x,point.y)); }void CCellView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); if(m_hInCell){//sdf1 UpdateWindow(); CRect rect; GetItemRect(m_hInCell,rect); m_pwndCell->MoveWindow(rect,TRUE); } }int CCellView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; return 0;}BOOL CCellView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Add your specialized code here and/or call the base class cs.style &= (~WS_BORDER); return CView::PreCreateWindow(cs);}void CCellView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { CView::OnVScroll(nSBCode, nPos, pScrollBar); Sync();}void CCellView::Sync(){ CTreeCtrl &t=CConfigTool::GetControlView()->GetTreeCtrl(); CRect rect; t.GetItemRect(t.GetRootItem(),rect,TRUE); int pos=rect.top; if(pos!=m_nFirstVisibleItem){ ScrollWindow(0,pos-m_nFirstVisibleItem); UpdateWindow(); }}void CCellView::OnMouseMove(UINT nFlags, CPoint point) { // Relay the mouse event to the splitter ClientToScreen(&point); GetParent()->ScreenToClient(&point); GetParent()->SendMessage(WM_MOUSEMOVE,(WPARAM)nFlags,MAKELPARAM(point.x,point.y)); }BOOL CCellView::OnMouseWheel(UINT, short zDelta, CPoint) { UINT nScrollCode=((zDelta<0)?SB_LINEDOWN:SB_LINEUP); LPARAM lParam=(LPARAM)GetScrollBarCtrl(SB_VERT)->GetSafeHwnd(); if(lParam){ for(int i=0;i<abs(zDelta)/WHEEL_DELTA;i++){ CConfigTool::GetControlView()->SendMessage(WM_VSCROLL,MAKEWPARAM(nScrollCode,0),lParam); Sync(); } } return TRUE;}void CCellView::OnEditFind() { CConfigTool::GetControlView()->OnEditFind();}void CCellView::OnEditFindAgain() { CConfigTool::GetControlView()->OnEditFindAgain();}void CCellView::OnUpdateEditFindAgain(CCmdUI* pCmdUI) { CConfigTool::GetControlView()->OnUpdateEditFindAgain(pCmdUI);}void CCellView::OnRButtonDown(UINT nFlags, CPoint point) { UNUSED_ALWAYS(nFlags); // Make the r-click have an effect equivalent to that when on the control view part CControlView *pv=CConfigTool::GetControlView(); HTREEITEM h=HitTest(); if(h){ pv->SelectItem(h); } // point is in client coords ClientToScreen(&point); pv->ShowPopupMenu(h,point);}void CCellView::OnUpdateEditFind(CCmdUI* pCmdUI) { CConfigTool::GetControlView()->OnUpdateEditFind(pCmdUI);}BOOL CCellView::OnEraseBkgnd(CDC* pDC) { /* static int x=3; const MSG *pMsg=GetCurrentMessage(); WNDCLASS wndcls; if (::GetClassInfo(NULL, _T("AfxFrameOrView42ud"), &wndcls)){ TRACE(_T("proc=%08x hbrBackground=%08x "),wndcls.lpfnWndProc,wndcls.hbrBackground); } TRACE(_T("msg=%d hWnd=%08x wParam=%08x lParam=%08x m_pfnSuper=%08x super=%08x\n"), pMsg->message,pMsg->hwnd, pMsg->lParam,pMsg->wParam,m_pfnSuper, GetSuperWndProcAddr()); if(x){ return CView::OnEraseBkgnd(pDC); } */ // Work around bug apparently caused by SlickEdit CRect rcClient; pDC->GetClipBox(rcClient); pDC->FillSolidRect(rcClient,GetSysColor(COLOR_WINDOW)); return TRUE;}BOOL CCellView::PreTranslateMessage(MSG* pMsg) { CTreeCtrl &Tree=CConfigTool::GetControlView()->GetTreeCtrl(); if(WM_KEYDOWN==pMsg->message){ switch(pMsg->wParam){ case VK_TAB: { HTREEITEM h=Tree.GetSelectedItem(); if(h){ if(0==(::GetKeyState(VK_SHIFT)&0x8000)){ // Shift key not down h=Tree.GetNextVisibleItem(h); } if(h){ CancelCellEdit(); Tree.SelectItem(h); Tree.SetFocus(); } else { MessageBeep (0xFFFFFFFF); } // Always handle this message to keep focus within the tree control return true; } } } } return CView::PreTranslateMessage(pMsg);}HTREEITEM CCellView::HitTest(){ // Can use the control view's hittest because all it's interested in is the y coord TVHITTESTINFO tvi; DWORD dwPos=GetMessagePos(); CTreeCtrl &Tree=CConfigTool::GetControlView()->GetTreeCtrl(); tvi.pt.y=GET_Y_LPARAM(dwPos); Tree.ScreenToClient(&tvi.pt); tvi.pt.x=0; return Tree.HitTest(&tvi);}void CCellView::OnEditCopy() { if(m_pwndCell){ m_pwndCell->OnEditCopy(); }}void CCellView::OnEditCut() { if(m_pwndCell){ m_pwndCell->OnEditCut(); }}void CCellView::OnEditPaste() { if(m_pwndCell){ m_pwndCell->OnEditPaste(); }}void CCellView::OnEditDelete() { if(m_pwndCell){ m_pwndCell->OnEditDelete(); }}void CCellView::OnUpdateEditCopy(CCmdUI* pCmdUI) { if(m_pwndCell){ m_pwndCell->OnUpdateEditCopy(pCmdUI); } else { pCmdUI->Enable(false); }}void CCellView::OnUpdateEditCut(CCmdUI* pCmdUI) { if(m_pwndCell){ m_pwndCell->OnUpdateEditCut(pCmdUI); } else { pCmdUI->Enable(false); }}void CCellView::OnUpdateEditPaste(CCmdUI* pCmdUI) { if(m_pwndCell){ m_pwndCell->OnUpdateEditPaste(pCmdUI); } else { pCmdUI->Enable(false); }}void CCellView::OnUpdateEditDelete(CCmdUI* pCmdUI) { if(m_pwndCell){ m_pwndCell->OnUpdateEditDelete(pCmdUI); } else { pCmdUI->Enable(false); }}BOOL CCellView::OnHelpInfo(HELPINFO* pHelpInfo) { return CConfigTool::GetControlView()->OnHelpInfo(pHelpInfo);}LRESULT CCellView::OnCancelEdit(WPARAM wParam, LPARAM){ CancelCellEdit(wParam); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -