www.pudn.com > clking_src.rar > GuiWorkPanel.cpp
//-----------------------------------------------------------------------// // This is a part of the GuiLib MFC Extention. // // Autor : Francisco Campos // // (C) 2002 Francisco CamposAll rights reserved // // This code is provided "as is", with absolutely no warranty expressed // // or implied. Any use is at your own risk. // // You must obtain the author's consent before you can include this code // // in a software library. // // If the source code in this file is used in any application // // then acknowledgement must be made to the author of this program // // fcampos@tutopia.com // //-----------------------------------------------------------------------// #include "stdafx.h" #include "resource.h" #include "guiworkpanel.h" #include "guiworkpanel.h" CGuiWorkPanel::CGuiWorkPanel(void) { m_PressDown=FALSE; m_PressUp=FALSE; m_nDif=0; } CGuiWorkPanel::~CGuiWorkPanel(void) { } void CGuiWorkPanel::RecalLayout() { if (!GetSafeHwnd()) return; CRect rcClient; CClientDC dc(this); GetClientRect(rcClient); rcClient.DeflateRect(1,1); CRect rctemp=rcClient; rctemp.top+=7; int nRealval=0; rctemp.top+=m_nDif; int nTipo=0; m_nResultTools=m_nDif; for (int i=0; i < m_nItems+1;i++) { CComponents* m_cwnd=(CComponents*) m_arrContainer[i]; if(m_cwnd->bTypeSmall == TRUE) nTipo=18; m_nResultTools+=nTipo; rctemp.bottom=rctemp.top+nTipo; m_cwnd->m_cwnd->MoveWindow(rctemp); if((rctemp.top < rcClient.top+7) || (rctemp.top > rcClient.bottom-25)) m_cwnd->m_cwnd->ShowWindow(SW_HIDE); else m_cwnd->m_cwnd->ShowWindow(SW_SHOW); nRealval+=nTipo; rctemp.top+=nTipo; } m_ToolDown.ShowWindow(SW_HIDE); m_ToolUp.ShowWindow(SW_HIDE); m_PressDown=TRUE; m_PressUp=TRUE; if (rcClient.Height() > 1) { if(nRealval+8 > rcClient.Height()) { if (m_nDif < 0) { m_ToolUp.ShowWindow(SW_SHOW); m_ToolUp.MoveWindow(0,0,rcClient.Width(),8); } if (m_nDif==0 || m_nResultTools > rcClient.bottom-25) { m_ToolDown.ShowWindow(SW_SHOW); m_ToolDown.MoveWindow(0,rcClient.bottom-8,rcClient.Width(),8); } } else { if (m_nDif < 0) { m_ToolUp.ShowWindow(SW_SHOW); m_ToolUp.MoveWindow(0,0,rcClient.Width(),8); } } } } void CGuiWorkPanel::SetImageList(UINT nBitmapID, int cx, int nGrow, COLORREF crMask) { CBitmap cbmp; BITMAP bmp; m_imgList.Create(nBitmapID,cx,nGrow,crMask); cbmp.LoadBitmap(nBitmapID); cbmp.GetBitmap(&bmp); m_imgList.Add(&cbmp,crMask); } CGuiLabelButton* CGuiWorkPanel::Addlabel(UINT ID_BUTTON) { CGuiLabelButton* m_btn; m_btn= (CGuiLabelButton*) AddComponen(RUNTIME_CLASS(CGuiLabelButton),ID_BUTTON,WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_OWNERDRAW); m_btn->DrawUnderLine(); m_btn->SetColor(RGB(255,255,255)); return m_btn; } CGuiImageLinkButton* CGuiWorkPanel::AddImageLink(UINT ID_BUTTON,int nNumImage) { CGuiImageLinkButton* m_Linkbtn; m_Linkbtn= (CGuiImageLinkButton*)AddComponen(RUNTIME_CLASS(CGuiImageLinkButton),ID_BUTTON,WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_OWNERDRAW); m_Linkbtn->SethIcon(m_imgList.ExtractIcon(nNumImage)); m_Linkbtn->SetColor(RGB(255,255,255)); return m_Linkbtn; } BOOL CGuiWorkPanel::OnCommand(WPARAM wParam, LPARAM lParam) { HWND hwnd = (HWND) lParam; for (int i=0; i < m_nItems+1;i++) { if (((CComponents*) m_arrContainer[i])->m_cwnd->m_hWnd == hwnd) { int x=((CComponents*) m_arrContainer[i])->m_cwnd->GetDlgCtrlID(); CWnd* pParent= GetParent(); pParent->SendMessage (WM_COMMAND,x); AfxGetMainWnd()->SendMessage(WM_COMMAND,x); return TRUE; } } if (wParam == ID_TOOLUP) OnUp(); if (wParam == ID_TOOLDOWN) OnDownd(); return FALSE; } void CGuiWorkPanel::OnDownd() { m_nDif--; m_PressDown=TRUE; m_PressUp=FALSE; RecalLayout(); } void CGuiWorkPanel::OnUp() { m_nDif++; m_PressDown=FALSE; m_PressUp=TRUE; RecalLayout(); } BEGIN_MESSAGE_MAP(CGuiWorkPanel, CGuiContainer) ON_WM_CREATE() ON_WM_PAINT() ON_COMMAND(ID_TOOLUP,OnUp) ON_COMMAND(ID_TOOLDOWN,OnDownd) END_MESSAGE_MAP() int CGuiWorkPanel::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CGuiContainer::OnCreate(lpCreateStruct) == -1) return -1; CBitmap cbmp; BITMAP bmp; m_imgListLocal.Create(IDB_DOCKBAR,9,11,RGB(255,0,255)); cbmp.LoadBitmap(IDB_DOCKBAR); cbmp.GetBitmap(&bmp); m_imgListLocal.Add(&cbmp,RGB(255,0,255)); SetColor(RGB(255,255,255)); m_ToolUp.Create(_T(""),WS_CHILD|WS_VISIBLE|BS_OWNERDRAW,CRect(0,0,0,0),this,ID_TOOLUP); m_ToolUp.SethIcon(m_imgListLocal.ExtractIcon(8)); m_ToolUp.SetScrollButton(); m_ToolDown.Create(_T(""),WS_CHILD|WS_VISIBLE|BS_OWNERDRAW,CRect(0,0,0,0),this,ID_TOOLDOWN); m_ToolDown.SethIcon(m_imgListLocal.ExtractIcon(0)); m_ToolDown.SetScrollButton(); m_ToolUp.ShowWindow(SW_HIDE); m_ToolDown.ShowWindow(SW_HIDE); SetDrawBorder(); return 0; } void CGuiWorkPanel::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here // Do not call CGuiContainer::OnPaint() for painting messages CRect rcClient; GetClientRect(rcClient); CBrush cb; cb.CreateSolidBrush(RGB(255,255,255)); dc.FillRect(rcClient,&cb); if (m_ToolUp.IsWindowVisible()) m_ToolUp.MoveWindow(0,0,rcClient.Width(),8); else m_ToolUp.MoveWindow(0,0,0,0); if (m_ToolDown.IsWindowVisible()) m_ToolDown.MoveWindow(0,rcClient.bottom-8,rcClient.Width(),8); else m_ToolDown.MoveWindow(0,0,0,0); }