📄 myctrlbar.cpp
字号:
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 + -