⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cellview.cpp

📁 eCos1.31版
💻 CPP
📖 第 1 页 / 共 2 页
字号:
      // 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 + -