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

📄 myctrlbar.cpp

📁 动态图形显示程序源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    m_pDockSite->DelayRecalcLayout();
}

int CMyCtrlBar::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CControlBar::OnCreate(lpCreateStruct) == -1)
		return -1;
    
	btn=new CAnimateBtn;
	btn->Create("avi",WS_VISIBLE|WS_CHILD|WS_BORDER|BS_PUSHBUTTON,CRect(2,10,50,60),this,IDC_ANIMATEBTN);
    btn->Open(IDR_AVI4);
	

	lstctrl=new CListCtrl;
	if (!lstctrl->Create (WS_CHILD|WS_VISIBLE|LVS_REPORT,
			CRect(0,0,0,0), this, IDC_LISTCTRL))
		{
			TRACE0("Failed to create view for CMyBarLeft\n");
			return -1;
		}


	lstctrl->ModifyStyleEx(0, WS_EX_CLIENTEDGE);

	//Add Extend listcontrol Style
	DWORD dwStyle = ::SendMessage (lstctrl->m_hWnd, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
	dwStyle |= (LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES);
	::SendMessage (lstctrl->m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle);

    BuildColum(2, _gColSize, _gColText);
	FormatList(_gListText);


	 /*	
	treectrl=new CMyTreeCtrl;
	treectrl->Create(WS_VISIBLE|WS_CHILD|WS_BORDER|TVS_HASLINES|
		TVS_LINESATROOT|TVS_HASBUTTONS|TVS_EDITLABELS,CRect(2,2,2,2),
		this,IDC_TREECTRL);
	HTREEITEM htItem = treectrl->InsertItem("画图");
	treectrl->SetItemState( htItem, TVIS_BOLD, TVIS_BOLD );
	treectrl->Expand(htItem, TVE_EXPAND);
    */
  return 0;
}


void CMyCtrlBar::OnNcLButtonDown(UINT nHitTest, CPoint point) 
{
    if (m_bTracking)
		return;
    
    if ((nHitTest == HTSIZE) && !IsFloating())
        StartTracking();
    else    
		CControlBar::OnNcLButtonDown(nHitTest, point);
}

void CMyCtrlBar::StartTracking()
{
    SetCapture();

    // make sure no updates are pending
    RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_UPDATENOW);
    m_pDockSite->LockWindowUpdate();

    m_ptOld = m_rectBorder.CenterPoint();
    m_bTracking = TRUE;
    
    m_rectTracker = m_rectBorder;
    if (!IsHorzDocked()) m_rectTracker.bottom -= 4;

    OnInvertTracker(m_rectTracker);
}

void CMyCtrlBar::OnInvertTracker(const CRect &rect)
{
    ASSERT_VALID(this);
    ASSERT(!rect.IsRectEmpty());
    ASSERT(m_bTracking);

    CRect rct = rect, rcc, rcf;
    GetWindowRect(rcc);
    m_pDockSite->GetWindowRect(rcf);

    rct.OffsetRect(rcc.left - rcf.left, rcc.top - rcf.top);
    rct.DeflateRect(1, 1);

    CDC *pDC = m_pDockSite->GetDCEx(NULL,
        DCX_WINDOW|DCX_CACHE|DCX_LOCKWINDOWUPDATE);

    CBrush* pBrush = CDC::GetHalftoneBrush();
    HBRUSH hOldBrush = NULL;
    if (pBrush != NULL)
        hOldBrush = (HBRUSH)SelectObject(pDC->m_hDC, pBrush->m_hObject);

    pDC->PatBlt(rct.left, rct.top, rct.Width(), rct.Height(), PATINVERT);

    if (hOldBrush != NULL)
        SelectObject(pDC->m_hDC, hOldBrush);

    m_pDockSite->ReleaseDC(pDC);
}

void CMyCtrlBar::OnLButtonUp(UINT nFlags, CPoint point) 
{
    if (!m_bTracking)
        CControlBar::OnLButtonUp(nFlags, point);
    else
    {
        ClientToWnd(point);
        StopTracking(TRUE);
    }
}
//DEL void CMyCtrlBar::OnLButtonDown(UINT nFlags, CPoint point) 
//DEL {
//DEL    
//DEL //CDspCtlDoc *pDoc;
//DEL //OnDeal(pDoc,NULL);
//DEL }

CPoint& CMyCtrlBar::ClientToWnd(CPoint &point)
{
    point.Offset(2, 2);

    if (m_nDockBarID == AFX_IDW_DOCKBAR_BOTTOM)
        point.y += m_cxEdge;
    else if (m_nDockBarID == AFX_IDW_DOCKBAR_RIGHT)
        point.x += m_cxEdge;

    return point;
}


void CMyCtrlBar::OnMouseMove(UINT nFlags, CPoint point) 
{
    if (IsFloating() || !m_bTracking) {
        CControlBar::OnMouseMove(nFlags, point);
        return;
    }

    CPoint cpt = m_rectTracker.CenterPoint();
    ClientToWnd(point);

    if (IsHorzDocked()) {
        if (cpt.y != point.y) {
            OnInvertTracker(m_rectTracker);
            m_rectTracker.OffsetRect(0, point.y - cpt.y);
            OnInvertTracker(m_rectTracker);
        }
    }

    else {
        if (cpt.x != point.x) {
            OnInvertTracker(m_rectTracker);
            m_rectTracker.OffsetRect(point.x - cpt.x, 0);
            OnInvertTracker(m_rectTracker);
        }
    }
}

void CMyCtrlBar::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp) 
{
    // Compute the rectangle of the mobile edge
    GetWindowRect(m_rectBorder);
    m_rectBorder.OffsetRect(-m_rectBorder.left, -m_rectBorder.top);
    m_rectBorder.DeflateRect(1,1);
    
    CRect rcWnd = lpncsp->rgrc[0];
    DWORD dwBorderStyle = m_dwStyle | CBRS_BORDER_ANY;

    switch (m_nDockBarID)
    {
    case AFX_IDW_DOCKBAR_TOP:
		{
			dwBorderStyle &= ~CBRS_BORDER_BOTTOM;
			rcWnd.DeflateRect(2, 2, 2, m_cxEdge + 2);
			m_rectBorder.top = m_rectBorder.bottom - m_cxEdge;
			break;
		}
    case AFX_IDW_DOCKBAR_BOTTOM:
		{
			dwBorderStyle &= ~CBRS_BORDER_TOP;
			rcWnd.DeflateRect(2, m_cxEdge + 2, 2, 2);
			m_rectBorder.bottom = m_rectBorder.top + m_cxEdge;
			lpncsp->rgrc[0].left += 10;
			break;
		}
    case AFX_IDW_DOCKBAR_LEFT:
		{
			dwBorderStyle &= ~CBRS_BORDER_RIGHT;
			rcWnd.DeflateRect(2, 2, m_cxEdge + 2, 6);
			m_rectBorder.left = m_rectBorder.right - m_cxEdge;
			break;
		}
    case AFX_IDW_DOCKBAR_RIGHT:
		{
			dwBorderStyle &= ~CBRS_BORDER_LEFT;
			rcWnd.DeflateRect(m_cxEdge + 2, 2, 2, 6);
			m_rectBorder.right = m_rectBorder.left + m_cxEdge;
			break;
		}
    default:
		{
			m_rectBorder.SetRectEmpty();
			break;
		}
    }

    lpncsp->rgrc[0] = rcWnd;

    SetBarStyle(dwBorderStyle);
}

void CMyCtrlBar::ReDrawTree(CDspCtlDoc *pDoc)
{
	
}


LRESULT CMyCtrlBar::OnDeal(CDspCtlDoc* pDoc,LPARAM lparam)
{	
	CDC *pDC=GetDC();
	pDC->SetBkMode(TRANSPARENT);
	pDC->TextOut(20,20,"运行状态");
	CBrush br;
	CBrush* oldbr;
	CDspCtlApp* app=(CDspCtlApp*) AfxGetApp();
	POSITION p = app->GetFirstDocTemplatePosition();
	while(p!= NULL) {
		CDocTemplate * pDocTemplate = app->GetNextDocTemplate(p);
		POSITION p1 = pDocTemplate->GetFirstDocPosition();
		while(p1 != NULL) {
			CDspCtlDoc * pDoc =(CDspCtlDoc *) pDocTemplate->GetNextDoc(p1);
					if(pDoc->m_bConnected)
					{	br.CreateSolidBrush(RGB(255,0,0));
                        oldbr=pDC->SelectObject(&br);
						pDC->Ellipse(30,55,80,85);
						pDC->SelectStockObject(BLACK_PEN);
						pDC->SetBkMode(TRANSPARENT);
						pDC->TextOut(35,59,"启动");
					}
					else
					{	br.CreateSolidBrush(RGB(0,255,0));
						oldbr=pDC->SelectObject(&br);
						pDC->Ellipse(30,55,80,85);
						pDC->SelectStockObject(BLACK_PEN);
						pDC->SetBkMode(TRANSPARENT);
						pDC->TextOut(35,59,"停止");
					}
					pDC->SelectObject(oldbr);
	}
 }
	return 0L;
}

void CMyCtrlBar::BuildColum(int nCols, int *nWidth, int *iCol)
{
	ASSERT(nCols);
	ASSERT(nWidth);
	ASSERT(iCol);
	ASSERT(lstctrl);

	//insert columns
	int i;
	LV_COLUMN lvc;

	lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
	CString	strTemp;
	for(i = 0; i < nCols; i++)
	{
		lvc.iSubItem = i;
		strTemp.LoadString(iCol[i]);
		lvc.pszText = (char*)(LPCTSTR)strTemp;
		lvc.cx = nWidth[i];
		lvc.fmt = LVCFMT_LEFT;
		lstctrl->InsertColumn(i,&lvc);
	}
}

void CMyCtrlBar::FormatList(CString *csText)
{
	int num;
	LV_ITEM	lvi;
//    char str[100];
	int	nI;
	for(num=0;num<3;num++)
	{
		nI= lstctrl->GetItemCount();
		
//		sprintf(str, "%d", value[num]);

		if (csText)
		{
			lvi.mask = LVIF_TEXT;
			lvi.iItem = nI;
			lvi.iSubItem = 0;
			lvi.iImage = 0;
			lvi.stateMask = LVIS_STATEIMAGEMASK;
			lvi.state = INDEXTOSTATEIMAGEMASK(1);
			lvi.pszText = (char*)(LPCTSTR)csText[num];
			int result = lstctrl->InsertItem(&lvi);
/*
			if (result != -1)
			{
				lstctrl->SetItemText(nI, 1, str);
				lstctrl->SetItemText(nI, 2, str1);
			}
*/
		}
	}

}

⌨️ 快捷键说明

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