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

📄 controlview.cpp

📁 eCos1.31版
💻 CPP
📖 第 1 页 / 共 3 页
字号:
void CControlView::SetScrollRangePos(){  RecalcWorkSpaceSize();  if(m_nWorkspace>0){    CScrollBar *cv=(CScrollBar *)(GetParent()->GetDlgItem(AFX_IDW_VSCROLL_FIRST));    //BOOL cv=TRUE;        if(cv){      CRect rcClient;      GetClientRect(rcClient);      SCROLLINFO si;      si.cbSize=sizeof SCROLLINFO;      memset(&si,0,sizeof SCROLLINFO);      si.nPage=rcClient.Height();      si.fMask=SIF_PAGE|SIF_RANGE|SIF_POS;      si.nMin=0;      CRect rect;      GetTreeCtrl().GetItemRect(GetTreeCtrl().GetRootItem(),rect,FALSE);      si.nPos=-rect.top;      BOOL bHasVScroll=(si.nPage<(unsigned)m_nWorkspace);      if(bHasVScroll){        si.nMax=m_nWorkspace/*-si.nPage*/;        cv->SetScrollInfo(&si,SIF_PAGE|SIF_RANGE|SIF_POS);        //TRACE("SetScrollInfo range=(%d,%d) pos=%d page=%d\n",si.nMin,si.nMax,si.nPos,si.nPage);      }      if(bHasVScroll!=m_bHasVScroll){        CSplitterWnd *pSplitter=(CSplitterWnd *)GetParent();        DWORD style=(pSplitter->GetScrollStyle()&(~WS_VSCROLL))          |(bHasVScroll*WS_VSCROLL);        pSplitter->SetScrollStyle(style);        pSplitter->RecalcLayout();        m_bHasVScroll=bHasVScroll;      }    }  }}void CControlView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) {  CTreeView::OnHScroll(nSBCode, nPos, pScrollBar);  SetHScrollPos();}void CControlView::SetHScrollRangePos(){  return;//sdf}void CControlView::SetHScrollPos(){  return;//sdf  CRect rcClient;  GetClientRect(rcClient);  SCROLLINFO si;  si.cbSize=sizeof SCROLLINFO;  memset(&si,0,sizeof SCROLLINFO);  si.fMask=SIF_POS;  CRect rect;  GetTreeCtrl().GetItemRect(GetTreeCtrl().GetRootItem(),rect,FALSE);  si.nPos=-rect.left;  const int nCol=0;  CScrollBar *cv=(CScrollBar *)(GetParent()->GetDlgItem(AFX_IDW_HSCROLL_FIRST+nCol));  //BOOL cv=TRUE;  if(cv && m_bHasHScroll){    cv->SetScrollInfo(&si,SIF_POS);    //SetScrollInfo(SB_HORZ,&si,SIF_POS);  }  }void CControlView::OnMouseMove(UINT nFlags, CPoint point) {  CTreeView::OnMouseMove(nFlags, 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 CControlView::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++){      SendMessage(WM_VSCROLL,MAKEWPARAM(nScrollCode,0),lParam);      CConfigTool::GetCellView()->Sync();    }  }  return TRUE;}void CControlView::RecalcWorkSpaceSize(){  //TRACE("Control view recalcworkspace\n");  CRect rcFirst,rcLast;  CConfigToolDoc* pDoc = CConfigTool::GetConfigToolDoc();  if(pDoc->ItemCount()>0){    HTREEITEM h=pDoc->FirstItem()->HItem();    if(h){      GetItemRect(h,rcFirst,FALSE);      if(pDoc->ItemCount()>0 && pDoc->Item(pDoc->ItemCount()-1)->HItem()){        for(HTREEITEM h=pDoc->Item(pDoc->ItemCount()-1)->HItem();h;h=GetPrevVisibleItem(h)){          if(GetItemRect(h,rcLast,FALSE)){            m_nWorkspace=rcLast.bottom-rcFirst.top;            break;          }        }      }    }  }}void CControlView::OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {  switch(nChar){		case VK_F10:      if(::GetKeyState(VK_SHIFT)&0x8000){        // Shift key down        ShowPopupMenu(GetSelectedItem());      }      break;    case VK_RETURN:      if(nFlags&(1<<13)){        // Alt key down        m_hContext=GetSelectedItem();        OnPopupProperties();      }      break;  }  CTreeView::OnSysKeyDown(nChar, nRepCnt, nFlags);}void CControlView::ShowPopupMenu(HTREEITEM h,CPoint point/*=CPoint(-1,-1)*/){  // Display a context menu  if(NULL!=h){    Menu menu;    menu.LoadMenu(IDR_CONTROLVIEW_POPUP);    Menu *pPopup=(Menu *)menu.GetSubMenu(0);    if(point.x<0){      CRect rcItem;      GetItemRect(h,rcItem,TRUE);      point=rcItem.CenterPoint();      ClientToScreen(&point);    }    m_hContext=h;    CConfigItem &ti=TI(m_hContext);    CConfigItem::TreeItemType type=ti.Type();    #ifndef PLUGIN    menu.LoadToolbar(IDR_MISCBAR);    #endif    if(!IsChanged(m_hContext,true)){      pPopup->EnableMenuItem(ID_RESTORE_DEFAULTS,MF_BYCOMMAND|MF_GRAYED);    }    if((CConfigItem::None!=type) || ti.HasBool ()){    		const CString strURL(ti.GetURL());        if(strURL.IsEmpty()){          pPopup->EnableMenuItem(ID_VIEW_URL,MF_BYCOMMAND|MF_GRAYED);        }    }    const CFileName strFile(TI(h).FileName());    if(strFile.IsEmpty() || CConfigTool::GetConfigToolDoc()->BuildTree().IsEmpty()){       pPopup->EnableMenuItem(ID_VIEW_HEADER,MF_BYCOMMAND|MF_GRAYED);    }    if(!TI(h).IsPackage()){      int n=pPopup->GetMenuItemCount();      pPopup->RemoveMenu(n-1,MF_BYPOSITION);      pPopup->RemoveMenu(n-2,MF_BYPOSITION);    }    pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON, point.x,point.y,this);  }}void CControlView::OnSysChar(UINT nChar, UINT nRepCnt, UINT nFlags) {  // TODO: Add your message handler code here and/or call default    CTreeView::OnSysChar(nChar, nRepCnt, nFlags);}CConfigToolDoc * CControlView::GetDocument(){  return CConfigTool::GetConfigToolDoc();}void CControlView::OnViewHeader() {  TI(m_hContext).ViewHeader();}void CControlView::OnEditFind() {  CConfigToolDoc *pDoc=CConfigTool::GetConfigToolDoc();  if(!CConfigTool::GetMain()->m_bFindInProgress){    (new CFindDialog())->Create(pDoc->m_strFind,pDoc->m_nFindFlags&(FR_WHOLEWORD|FR_MATCHCASE|FR_DOWN),pDoc->m_nFindWhere, this);    CConfigTool::GetMain()->m_bFindInProgress=true;  }}void CControlView::OnEditFindAgain() {  CConfigToolDoc *pDoc=CConfigTool::GetConfigToolDoc();  DoFind(pDoc->m_strFind,pDoc->m_nFindFlags,pDoc->m_nFindWhere);}LONG CControlView::OnFind(WPARAM wParam, LPARAM lParam){  UNUSED_ALWAYS(wParam);  CFindDialog *pDlg=(CFindDialog *)CFindDialog::GetNotifier(lParam);  FINDREPLACE &fr=pDlg->m_fr;  CConfigToolDoc *pDoc=CConfigTool::GetConfigToolDoc();  if(0==(fr.Flags&FR_DIALOGTERM)){    pDoc->m_strFind=fr.lpstrFindWhat;    pDoc->m_nFindFlags=fr.Flags;    pDoc->m_nFindWhere=pDlg->m_nFindPos;        CConfigItem *pItem=DoFind(pDoc->m_strFind,pDoc->m_nFindFlags,pDoc->m_nFindWhere);    if(pItem){		    // Is the find window on top of the item?		    CRect rect1,rect2;        GetItemRect(pItem->HItem(),rect1,TRUE);        ClientToScreen(rect1);        pDlg->GetWindowRect(rect2); // screen coords        rect1=rect1 & rect2;        if(rect1.Height()|rect1.Width()){          int nWidth=rect2.Width();          rect2.left=rect1.right;          rect2.right=rect2.left+nWidth;          pDlg->MoveWindow(rect2);        }    }  } else {    CConfigTool::GetMain()->m_bFindInProgress=false;  }    return 0;}CConfigItem * CControlView::DoFind(LPCTSTR pszWhat,DWORD dwFlags,WhereType where){  CConfigToolDoc *pDoc=CConfigTool::GetConfigToolDoc();  int nCount=pDoc->ItemCount();  static LPCTSTR arWhereImage[]={_T("name"),_T("macro"),_T("description string"),_T("current value"),_T("default value")};    CString strFind(pszWhat);  if(!(dwFlags&FR_MATCHCASE)){    strFind.MakeLower();  }    HTREEITEM h=GetSelectedItem();  int nItem;    if(!h){    nItem=0;  } else {    for(nItem=nCount-1;nItem>=0;--nItem) {      if(h==pDoc->Item(nItem)->HItem()){        break;      }    }    ASSERT(nItem>=0);  }  CConfigItem *pItem=NULL;  for(int i=0;i<nCount;i++){    if(dwFlags&FR_DOWN){      nItem=(nItem+1)%nCount;    } else {      nItem=(nCount+nItem-1)%nCount;    }    pItem=pDoc->Item(nItem);        CString strName(pItem->StringValue(where));    if(0==(dwFlags&FR_MATCHCASE)){      strName.MakeLower();    }    int nIndex=strName.Find(strFind);    if(-1!=nIndex){      if(dwFlags&FR_WHOLEWORD){        // Enforce whole-word semantics: to left and right        if(nIndex>0 && IsWordChar(strName[nIndex-1])){          continue;        }        nIndex+=strFind.GetLength();        if(nIndex<strName.GetLength() && IsWordChar(strName[nIndex])){          continue;        }      }		      break;    }  }    if(i<nCount){    if(m_hExpandedForFind){      Expand(m_hExpandedForFind,TVE_COLLAPSE);    }    HTREEITEM h=pItem->HItem();    // Is h visible?    for(HTREEITEM hv=GetFirstVisibleItem();hv;hv=GetNextVisibleItem(hv)){      if(hv==h){        break;      }    }    if(NULL==hv){      // we want to record the highest unexpanded item      for(HTREEITEM hv=GetParentItem(h);hv;hv=GetParentItem(hv)){        const UINT selflag = TVIS_EXPANDED;		        if(0==(GetItemState( hv, selflag ) & selflag )){          m_hExpandedForFind=hv;        }      }    }    EnsureVisible(h);    SelectItem(h);      } else {    CUtils::MessageBoxF(_T("Cannot find the %s '%s'"),arWhereImage[where],pszWhat);  }  return pItem;}bool CControlView::IsWordChar(TCHAR c){  return _istalnum(c) || _TCHAR('_')==c;}void CControlView::OnUpdateEditFindAgain(CCmdUI* pCmdUI) {  pCmdUI->Enable(!CConfigTool::GetMain()->m_bFindInProgress && !CConfigTool::GetConfigToolDoc()->m_strFind.IsEmpty() && CWnd::GetFocus() && m_hWnd==CWnd::GetFocus()->m_hWnd);	}bool CControlView::SelectItem(const CConfigItem *pItem){#ifdef PLUGIN  CConfigTool::GetMain()->ShoweCosBar();#else#endif  return SelectItem(pItem->HItem());}void CControlView::OnUpdateEditFind(CCmdUI* pCmdUI) {  pCmdUI->Enable(!CConfigTool::GetMain()->m_bFindInProgress);	}BOOL CControlView::PreTranslateMessage(MSG* pMsg) {  // We handle WM_KEYDOWN here to avoid the problem of the keyboard buffer not being emptied  if(WM_KEYDOWN==pMsg->message){    HTREEITEM h=GetSelectedItem();    if(h){		    switch(pMsg->wParam){        case VK_SPACE:          if(BumpItem(h,0)){ // toggle boolean				        return true;          }          break;        case VK_TAB:          {            bool bShift=(::GetKeyState(VK_SHIFT)&0x8000);// Shift key down            if(bShift){              h=GetPrevVisibleItem(h);            }            if(h){              SelectItem(h);              if(!CConfigTool::GetCellView()->InCell(h) && !bShift){                h=GetNextVisibleItem(h);                if(h){                  SelectItem(h);                }              }            }            if(NULL==h){              MessageBeep (0xFFFFFFFF);            }            // Always handle this message to keep focus within the tree control            return true;          }        }    }  }  return CTreeView::PreTranslateMessage(pMsg);}void CControlView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {  HTREEITEM h=GetSelectedItem();  if(h){    switch(nChar){    case _TCHAR('>'):      if(!BumpItem(h,+1)){        MessageBeep(0xffff);      }      return;    case _TCHAR('<'):      if(!BumpItem(h,-1)){        MessageBeep(0xffff);      }      return;    }  }    CTreeView::OnChar(nChar, nRepCnt, nFlags);}LRESULT CControlView::OnSetFont(WPARAM, LPARAM){  LRESULT rc=Default();  CRect rect;  GetItemRect(GetFirstVisibleItem(),rect,FALSE);  m_nItemHeight=rect.Height();  RecalcWorkSpaceSize();  return rc;}void CControlView::OnUnload(){  if(IDYES==CUtils::MessageBoxFT(MB_YESNO|MB_DEFBUTTON2,_T("Are you sure you wish to unload this package?"))){    TI(m_hContext).Unload();    CConfigTool::GetConfigToolDoc()->RegenerateData();  }}void CControlView::OnDeleteitem(NMHDR*, LRESULT* pResult) {  if(CConfigTool::GetCellView()){    CConfigTool::GetCellView()->Invalidate();  } 	*pResult = 0;}void CControlView::OnWhatsThis() {  DWORD dwPos=GetMessagePos();    HH_POPUP hhp;  hhp.cbStruct=sizeof(hhp);  hhp.idString=0;  hhp.hinst=AfxGetInstanceHandle();  hhp.pszText=TI(m_hContext).Desc();  hhp.pt.x=GET_X_LPARAM(dwPos);  hhp.pt.y=GET_Y_LPARAM(dwPos);  hhp.clrForeground=(COLORREF)-1; //default   hhp.clrBackground=GetSysColor(COLOR_INFOBK);   hhp.rcMargins=CRect(-1,-1,-1,-1);  hhp.pszFont=NULL;  HtmlHelp(     m_hWnd,    NULL,    HH_DISPLAY_TEXT_POPUP, //HH_TP_HELP_CONTEXTMENU,     (DWORD)&hhp    ); 	}void CControlView::Refresh(LPCTSTR pszMacroName){  const CConfigItem * pItem=CConfigTool::GetConfigToolDoc()->Find(pszMacroName);  if(pItem){ // will be NULL if item has been removed    Refresh(pItem->HItem());  }}BOOL CControlView::OnHelpInfo(HELPINFO*) {  return CConfigTool::GetConfigToolDoc()->ShowURL(CUtils::LoadString(IDS_CONTROL_VIEW_HELP));	}LRESULT CControlView::OnMenuChar(UINT, UINT, CMenu*){  const MSG *pMsg=GetCurrentMessage();  // punt to the mainframe to deal with shortcuts in popups  return AfxGetMainWnd()->SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -