发新话题
打印

软件大功告成!

CoolTabCtrl类

// CCoolTabCtrl

IMPLEMENT_DYNCREATE(CCoolTabCtrl, CWnd)

#define        ITEMBUTTON_HEIGHT                23

static CPen _penW(PS_SOLID,3 ,RGB(255,250,60));//Tab件边宽颜色设置
static CPen _penB(PS_SOLID,3 ,RGB(255,255,60));//Tab件边宽颜色设置
static CPen _pen3DFace(PS_SOLID,1,GetSysColor(COLOR_3DFACE));
//static CBrush _pen3DFace(HS_CROSS,GetSysColor(COLOR_3DFACE));
static CPen _pen3DLight(PS_SOLID,1,GetSysColor(COLOR_3DLIGHT));
//static CBrush _pen3DLight(HS_CROSS,GetSysColor(COLOR_3DLIGHT));
static CPen _pen3DShadow(PS_SOLID,1,GetSysColor(COLOR_3DSHADOW));
static CPen _pen3DDKShadow(PS_SOLID,1,GetSysColor(COLOR_3DDKSHADOW));


CCoolTabCtrl::CCoolTabCtrl()
{
        m_nStyle = TCS_UP;//取TCS_UP Tab件在上边,取TCS_DOWN Tab件在底部
        m_nActivePage = -1;//初始化活动页面,以0为基数
        m_nBorder = 1;
        m_bEraseBkgnd = 1;
}

CCoolTabCtrl::~CCoolTabCtrl()
{
        POSITION pos;
        CPageItem* pItem;
        for(pos=m_PageList.GetHeadPosition();pos!=NULL;)
        {
                pItem=(CPageItem*)m_PageList.GetNext(pos);
                if(pItem)
                {       
                        if(pItem->m_nStyle == 1 &&pItem->m_pWnd) ///Dialog
                                delete pItem->m_pWnd;
                        delete pItem;
                        pItem=NULL;
                }
        }
        m_PageList.RemoveAll();
}


BEGIN_MESSAGE_MAP(CCoolTabCtrl, CWnd)
        //{{AFX_MSG_MAP(CCoolTabCtrl)
        ON_WM_PAINT()
        ON_WM_ERASEBKGND()
        ON_WM_LBUTTONDOWN()
        ON_WM_SIZING()
        ON_WM_SIZE()
        ON_WM_TIMER()
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CCoolTabCtrl message handlers

BOOL CCoolTabCtrl::Create(UINT wStyle, const CRect &rect, CWnd *pParentWnd, UINT nID)
{
        m_nStyle = wStyle & TCS_MASK;
        if(m_nStyle == 0)
                m_nStyle = TCS_UP;
        if (CWnd::Create(AfxRegisterWndClass(CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW, AfxGetApp()->LoadStandardCursor(IDC_ARROW), (HBRUSH)GetStockObject(LTGRAY_BRUSH), NULL),
                                                NULL,
                                                wStyle&~TCS_MASK | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
                                                rect,
                                                pParentWnd,
                                                nID))
        {
                LOGFONT logFont;//设置Tab件字体
                ZeroMemory((void*)&logFont,sizeof(logFont));
                strcpy(logFont.lfFaceName,"宋体");
                logFont.lfHeight = -20;
                logFont.lfWeight = 900;
                logFont.lfCharSet = GB2312_CHARSET;
                logFont.lfOutPrecision = 3;
                logFont.lfClipPrecision = 2;
                logFont.lfQuality = 1;
                logFont.lfPitchAndFamily = 2;
                m_font.CreateFontIndirect(&logFont);
                SetFont(&m_font);
                return TRUE;
        }
        return FALSE;
}

BOOL CCoolTabCtrl::OnEraseBkgnd(CDC* pDC)
{
        if(m_bEraseBkgnd)
        {
                CRect rect;
                GetWindowRect(&rect);
                ScreenToClient(&rect);
                CBrush brush(GetSysColor(COLOR_3DFACE));
                pDC->FillRect(rect,&brush);
        }
        return TRUE;
}

void CCoolTabCtrl::OnPaint()
{
        CPaintDC        dc(this);
        CPen        *pOldPen = dc.GetCurrentPen();
        CFont        *pOldFont = dc.SelectObject(&m_font);
        int                nOldBkMode = dc.SetBkMode(TRANSPARENT);
        CPageItem        *pItem;
        POSITION        pos;
        int                nItemIndex = 0;
       
        DrawFrame(&dc);

        for(pos=m_PageList.GetHeadPosition();pos!=NULL;nItemIndex++)
        {
                pItem=(CPageItem*)m_PageList.GetNext(pos);
                if(pItem)
                {
                        pItem->Draw(&dc,m_nStyle,(m_nActivePage==nItemIndex)?TRUE:FALSE);
                }

        }
        dc.SetBkMode(nOldBkMode);
        dc.SelectObject(pOldFont);
        dc.SelectObject(pOldPen);
}

//添加页面函数1
void CCoolTabCtrl::AddPage(CWnd *pWnd, LPCTSTR sText, UINT IconID)
{
        ASSERT(IsWindow(pWnd->m_hWnd));
        CPageItem *pItem;
        pItem = new CPageItem();
        pItem->m_pWnd = pWnd;
        pItem->m_nStyle = 0;//Window
        pItem->m_sText = sText;
        if(IconID)
                pItem->m_hIcon = AfxGetApp()->LoadIcon(IconID);
        else
                pItem->m_hIcon = NULL;
        if(pWnd)
        {
                CRect        rect;
                GetClientRect(rect);
                pWnd->MoveWindow(rect);
        }
        m_PageList.AddTail(pItem);
}

//添加页面函数2
BOOL CCoolTabCtrl::AddPage(CRuntimeClass* pClass,UINT nIDTemplate, LPCTSTR sText, UINT IconID)
{
        CDialog *pDlg = (CDialog*)pClass->CreateObject();
        if(pDlg != NULL)
                if(pDlg->Create(nIDTemplate,this))
                {
                        CPageItem *pItem;
                        pItem = new CPageItem();
                        pItem->m_pWnd = (CWnd*)pDlg;
                        pItem->m_nStyle = 1;///Dialog
                        pItem->m_sText = sText;
                        if(IconID)
                                pItem->m_hIcon = AfxGetApp()->LoadIcon(IconID);
                        else
                                pItem->m_hIcon = NULL;
                        CRect        rect;
                        GetClientRect(rect);
                        pDlg->MoveWindow(rect);
                        m_PageList.AddTail(pItem);
                        return TRUE;
                }
        return FALSE;
}

//取得客户端面积
void CCoolTabCtrl::GetClientRect(LPRECT lpRect)
{
        CWnd::GetClientRect(lpRect);
        if(m_nStyle&TCS_DOWN)
        {
                lpRect->left += 2;
                lpRect->right -= 2;
                lpRect->top += 2;
                lpRect->bottom -= ITEMBUTTON_HEIGHT;
        }
        else if(m_nStyle&TCS_UP)
        {
                lpRect->left += 2;
                lpRect->right -= 2;
                lpRect->top += ITEMBUTTON_HEIGHT;
                lpRect->bottom -= 2;
        }
}

//取得需要占用的宽度
UINT CCoolTabCtrl::CPageItem::GetAreaWidth(CDC *pDC)
{
        UINT width = pDC->GetTextExtent(m_sText).cx;
        if(m_hIcon)
                width += 18;
        return width + 9;
}

//设置TAB键背景颜色
void CCoolTabCtrl::CPageItem:raw(CDC *pDC, UINT nStyle, BOOL bActive)
{
        CRect rect = m_rect;
        if(nStyle&TCS_DOWN)
        {
                if(bActive)
                {
                        rect.top -= 2;
                    CBrush brush(GetSysColor(COLOR_3DFACE));
                        pDC->FillRect(rect,&brush);
                        rect.top += 1;
                }
                else
                        rect.bottom -= 1;
                CBrush brush(GetSysColor(COLOR_3DFACE));
                pDC->FillRect(m_rect,&brush);
                pDC->SelectObject(&_penW);
                pDC->MoveTo(rect.left,rect.top);
                pDC->LineTo(rect.left,rect.bottom-1);
               
                pDC->SelectObject(&_pen3DShadow);
                pDC->MoveTo(rect.left+1,rect.bottom-2);
                pDC->LineTo(rect.left+1,rect.bottom-1);
                pDC->LineTo(rect.right-1,rect.bottom-1);
                pDC->MoveTo(rect.right-2,rect.bottom-2);
                pDC->LineTo(rect.right-1,rect.bottom-2);
                pDC->LineTo(rect.right-1,rect.top-1);

                pDC->SelectObject(&_penB);
                pDC->MoveTo(rect.left+2,rect.bottom);
                pDC->LineTo(rect.right-2,rect.bottom);
                pDC->LineTo(rect.right,rect.bottom-2);
                pDC->MoveTo(rect.right,rect.top);
                pDC->LineTo(rect.right,rect.bottom-1);
       
                rect.top -= 1;
        }//end of TCS_DOWN
        else if(nStyle&TCS_UP)
        {
                //CBrush brush(GetSysColor(COLOR_3DFACE));
       CBrush brush(RGB(255,0,0));//设置TAB键背景颜色
                if(bActive)
                {
                        rect.bottom += 1;
                        pDC->FillRect(rect,&brush);
                        rect.bottom -= 1;
                }
                else
                {
                        rect.top += 2;
                        pDC->FillRect(rect,&brush);
                }
                pDC->SelectObject(&_penW);
                pDC->MoveTo(rect.left,rect.bottom);
                pDC->LineTo(rect.left,rect.top + 2);
                pDC->LineTo(rect.left + 2,rect.top);
                pDC->LineTo(rect.right,rect.top);

                pDC->SelectObject(&_pen3DShadow);
                pDC->MoveTo(rect.right - 1,rect.top);
                pDC->LineTo(rect.right - 1,rect.bottom);
                       
                pDC->SelectObject(&_penB);
                pDC->MoveTo(rect.right,rect.top + 1);
                pDC->LineTo(rect.right,rect.bottom);       
        }
        ///////////调整位置//////////
                rect.left += 5;
                rect.right -= 2;
                ///////////显示图标//////////
                if(rect.Width() > 16 && m_hIcon != NULL)
                {
                        :rawIconEx(pDC->m_hDC,rect.left,rect.top + 3,m_hIcon,16,16,0,NULL,DI_NORMAL);
                        rect.left += 18;
                }
                if (!m_sText.IsEmpty())
                {
                        ///////////显示文字//////////
                        rect.top += 5;
                        CString sText = m_sText;         
                        int l = sText.GetLength();
                        int i;
                        for(i=0;i<10 && pDC->GetTextExtent(sText).cx > rect.Width();i++,l-=2)
                                sText = sText.Left(l-2);
                        if(i > 0)
                        {
                                sText = sText.Left(l-2);
                                sText += "...";
                        }
            //设置TAB键字体颜色
                pDC->SetTextColor(RGB(0,0,0));
                        pDC->DrawText(sText, &rect, DT_LEFT /*| DT_VCENTER */| DT_SINGLELINE);
                }
}

////调整尺寸////
void CCoolTabCtrl::AutoSize()
{
        UINT PageCount = m_PageList.GetCount();
        if(PageCount < 1) return;
        CPageItem        *pItem;
        POSITION        pos;
        CRect                rect,ClientRect,ItemRect;

        GetClientRect(ClientRect);
        ClientRect.DeflateRect(m_nBorder+1,m_nBorder+1);
        GetWindowRect(rect);
        ScreenToClient(rect);

        CDC* pDC = GetDC();
        CFont        *pOldFont = pDC->SelectObject(&m_font);

        if(m_nStyle&TCS_DOWN)
        {
                rect.left += 6;
                rect.right -= 6;
                rect.bottom -= 1;
                rect.top = rect.bottom - ITEMBUTTON_HEIGHT + 1;
        }
        else if(m_nStyle&TCS_UP)
        {
                rect.left += 2;
                rect.right -= 6;
                rect.bottom = rect.top + ITEMBUTTON_HEIGHT;
        }
        ItemRect = rect;
        int AreaWidth = 0,ItemMaxWidth,ItemIndex=0;
        ItemMaxWidth = rect.Width()/m_PageList.GetCount();
        BOOL        bMonoSpace = ((m_nStyle&TCS_MONOSPACE) == TCS_MONOSPACE)?1:0;
        ////////设置按钮初始宽度,并得到按钮所需占用的总宽度///////
        for(pos=m_PageList.GetHeadPosition();pos!=NULL;ItemIndex++)
        {
                pItem=(CPageItem*)m_PageList.GetNext(pos);
                if(pItem)
                {
                        if(!bMonoSpace)
                                ItemMaxWidth = pItem->GetAreaWidth(pDC);
                        AreaWidth += ItemMaxWidth;
                        ItemRect.right = ItemRect.left+ItemMaxWidth-1;
                        pItem->m_rect = ItemRect;
                        ItemRect.left = ItemRect.right + 1;
                        if(pItem->m_pWnd)
                                pItem->m_pWnd->MoveWindow(ClientRect);
                }
        }
        ////////当需要的空间大于实际空间时进行调整////
        if(AreaWidth > rect.Width() && !bMonoSpace)
        {
                ItemRect = rect;
                int AreaWidth,MaxWidth = rect.Width()/PageCount;
                for(pos=m_PageList.GetHeadPosition();pos!=NULL;)
                {
                        pItem=(CPageItem*)m_PageList.GetNext(pos);
                        if(pItem)
                        {
                                AreaWidth = pItem->GetAreaWidth(pDC);
                                ItemMaxWidth = (ItemMaxWidth < AreaWidth)?MaxWidth:AreaWidth;
                                ItemRect.right = ItemRect.left+ItemMaxWidth;
                                pItem->m_rect = ItemRect;
                                ItemRect.left = ItemRect.right + 1;
                        }
                }
        }
        pDC->SelectObject(pOldFont);
        ReleaseDC(pDC);
}
支持 (0)  反对 (0)

TOP

//设置活动页面
void CCoolTabCtrl::SetActivePage(int nIndex)
{
        if(nIndex == m_nActivePage)
                return;
        CPageItem *pOldItem,*pItem;
        if(m_nActivePage >= 0)
        {
                pOldItem = (CPageItem*)GetPageItem(m_nActivePage);
                if(pOldItem)
                {
                        pOldItem->m_pWnd->ShowWindow(SW_HIDE);
                }
        }
        pItem = (CPageItem*)GetPageItem(nIndex);
        if(!pItem) return;
        m_nActivePage = nIndex;
        if(m_nStyle&TCS_ANIMATE)
                SetTimer(50,17,NULL);//设置动画效果控制时间///为了在95或NT4下也有动画效果,没有使用AnimateWindow函数
        else
                pItem->m_pWnd->ShowWindow(SW_SHOW);
}

void* CCoolTabCtrl::GetPageItem(UINT nIndex)
{
        CPageItem *pItem = NULL;
        POSITION pos = m_PageList.FindIndex(nIndex);
        if(pos)
                pItem = (CPageItem*)m_PageList.GetAt(pos);
        return pItem;
}

void CCoolTabCtrl::UpdateWindow()
{
        AutoSize();
        if(m_nActivePage < 0)
                SetActivePage(0);
        else
                SetActivePage(m_nActivePage);
        Invalidate();
}

void CCoolTabCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
        UINT nItemIndex=0;
        POSITION pos;
        CPageItem *pItem;
        for(pos=m_PageList.GetHeadPosition();pos!=NULL;nItemIndex++)
        {
                pItem=(CPageItem*)m_PageList.GetNext(pos);
                if(pItem)
                {
                        if(pItem->m_rect.PtInRect(point))
                        {
                                SetActivePage(nItemIndex);
                                Invalidate();
                                break;
                        }
                }
        }
        CWnd::OnLButtonDown(nFlags, point);
}

void CCoolTabCtrl::OnSizing(UINT fwSide, LPRECT pRect)
{
        CWnd::OnSizing(fwSide, pRect);
        m_bEraseBkgnd = FALSE;
        AutoSize();
}

void CCoolTabCtrl::OnSize(UINT nType, int cx, int cy)
{
        CWnd::OnSize(nType, cx, cy);
        m_bEraseBkgnd = TRUE;
        AutoSize();
        Invalidate();
}

void CCoolTabCtrl:rawFrame(CDC *pDC)
{
        CRect rect;
        GetClientRect(&rect);
        switch(m_nBorder)
        {
/*        case 1:
                        pDC->Draw3dRect(rect,RGB(0xff,0xff,0xff),RGB(0,0,0));
                break;
        case 2:
                        pDC->Draw3dRect(rect,RGB(0xff,0xff,0xff),RGB(0,0,0));*/
        case 1:
                //        pDC->Draw3dRect(rect,RGB(255,128,64),RGB(255,0,255));
                break;
        case 2:
                        pDC->Draw3dRect(rect,RGB(255,255,0),RGB(0,255,0));
                        rect.DeflateRect(1, 1);
                        pDC->Draw3dRect(rect, GetSysColor(COLOR_3DFACE), GetSysColor(COLOR_3DSHADOW));
                break;
        default:break;
        }
}



void CCoolTabCtrl::SetStyle(UINT style)
{
        m_nStyle = style;
}

UINT CCoolTabCtrl::GetStyle()
{
        return m_nStyle;
}

void CCoolTabCtrl::OnTimer(UINT nIDEvent)
{
        static        step,times = 10;
        UINT        width;
        CRect        rect;
        GetClientRect(&rect);
        rect.DeflateRect(m_nBorder+1,m_nBorder+1);
        POSITION pos = m_PageList.FindIndex(m_nActivePage);
        if(pos)
        {
                CPageItem *pItem = (CPageItem*)m_PageList.GetAt(pos);
                if(pItem)
                {
                        width = rect.Width();
                        if(times == 10)
                        {
                                rect.right = 10;
                                rect.left = rect.right - width + 1;
                                step = width/times;
                                times--;
                                m_bEraseBkgnd = FALSE;
                                pItem->m_pWnd->ShowWindow(SW_SHOW);
                        }
                        else
                        {
                                if(times <= 0)
                                {
                                        times = 10;
                                        KillTimer(nIDEvent);
                                        m_bEraseBkgnd = TRUE;
                                }
                                else
                                {
                                        rect.right = width - times*step;
                                        rect.left = rect.right - width + 1;
                                        times--;
                                }
                        }
                        pItem->m_pWnd->MoveWindow(rect);
                }
        }
}

void CCoolTabCtrl::SetStyleAnimate(BOOL bEnable)
{
        UINT style = GetStyle();
        if(bEnable)
                style |= TCS_ANIMATE;
        else
                style &= ~TCS_ANIMATE;
        SetStyle(style);
}

void CCoolTabCtrl::SetStyleDirection(int Direction)
{
        UINT style = GetStyle();
        switch(Direction)
        {
        case TCS_DOWN:
                style &= ~TCS_UP;
                style |= TCS_DOWN;
                break;
        case TCS_UP:
        default:
                style &= ~TCS_DOWN;
                style |= TCS_UP;
                break;
        }
        SetStyle(style);
        UpdateWindow();
}

void CCoolTabCtrl::SetStyleMonoSpace(BOOL bEnable)
{
        UINT style = GetStyle();
        if(bEnable)
                style |= TCS_MONOSPACE;
        else
                style &= ~TCS_MONOSPACE;
        SetStyle(style);
        UpdateWindow();
}
支持 (0)  反对 (0)

TOP

HTML类

/////////////////////////////////////////////////////////////////////////////
// CPPHtmlStatic window

class CPPHtmlStatic : public CStatic
{
// Construction
public:
        CPPHtmlDrawer * GetHtmlDrawer() {return &m_drawer;};
    void SetCallbackHyperlink(HWND hWnd, UINT nMessage, LPARAM lParam /* = 0 */);
        void SetCallbackHyperlink(UINT nMessage, LPARAM lParam = 0);
        void SetHyperlink(LPCTSTR lpszText, LPCTSTR lpszUrl, BOOL bParentNotify = FALSE);

        void SetIcon(DWORD dwIdIcon, LPSIZE lpSizeItem = NULL);
        void SetIcon(HICON hIcon);
        void SetBitmap(DWORD dwIdBitmap, COLORREF clrMask = RGB(255, 0, 255));
        void SetBitmap(HBITMAP hBitmap, COLORREF clrMask = RGB(255, 0, 255));
        void SetAnimation(DWORD dwIdBitmap, LPSIZE lpSizeItem = NULL, COLORREF clrMask = RGB(255, 0, 255));
        void SetAnimation(HBITMAP hBitmap, LPSIZE lpSizeItem = NULL, COLORREF clrMask = RGB(255, 0, 255));
        void SetImageList(DWORD dwIdBitmap, DWORD dwIndex, LPSIZE lpSizeItem = NULL, COLORREF clrMask = RGB(255, 0, 255));
        void SetImageList(HBITMAP hBitmap, DWORD dwIndex, LPSIZE lpSizeItem = NULL, COLORREF clrMask = RGB(255, 0, 255));

        //Regions
        void SetRgn(HRGN hRgn = NULL); //Sets a region
        void SetRectRgn(); //Creates and sets a rectangle region
        void SetRoundRectRgn(int nWidth, int nHeight); //Creates and sets a rounded rectangle region
        void SetBorder(COLORREF color, int nWidth = 1, int nHeight = 1); //Sets a static's border
        void SetBorder(HBRUSH hbr, int nWidth = 1, int nHeight = 1); //Sets a static's border

        void SetMargins(int nXMargin = 0, int nYMargin = 0); //Sets a text's margins

        void  SetAlign(DWORD dwAlign = PPHTMLSTATIC_ALIGN_DEFAULT);
        DWORD GetAlign();

        void SetImageZoom(int nWidthPercent = 100, int nHeightPercent = 100);
        void SetImageZoom(int nPercent = 100);
       
        void SetFrameRate(DWORD dwFrameRate = 500);
        void ClearFrameRate();

        void SetHyperlinkStyle(COLORREF clrOrg, BOOL bOrgUnderline, COLORREF clrHover, BOOL bHoverUnderline);

        void SetTextColor(COLORREF clrText);
        void SetBkColor(COLORREF clrBk);
        void SetBkColor(COLORREF clrBegin, COLORREF clrEnd);
        void SetBkColor(COLORREF clrBegin, COLORREF clrMid, COLORREF clrEnd);
        void SetBkMode(int nBkMode = TRANSPARENT);
        void SetBkEffect(DWORD dwEffect, BYTE nGranularity = 5);

//        void SetFitOutput(BOOL bFitOutput = TRUE){m_bIsFitOutput = bFitOutput;};
        void SetWrapText(BOOL bWrapText);

        static short GetVersionI()                {return 0x12;}
        static LPCTSTR GetVersionC()        {return (LPCTSTR)_T("1.2");}

        CPPHtmlStatic();

// Attributes
public:

// Operations
public:

// Overrides
        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CPPHtmlStatic)
        public:
        virtual BOOL DestroyWindow();
        protected:
        virtual void PreSubclassWindow();
        //}}AFX_VIRTUAL

// Implementation
public:
        virtual ~CPPHtmlStatic();

        // Generated message map functions
protected:
        void SetDefaultFont(HFONT hFont);
        void SetText(LPCTSTR lpszText);
        void UpdateSurface();
        void RepaintWindow(HDC hDC = NULL);
        HRGN CreateRegion();

        void FreeResources();

        HBITMAP m_hBitmapBk;

        HRGN m_hRgn;
        BOOL m_bRectRgn;
        int  m_nRoundX;
        int  m_nRoundY;

        //Border of the tooltip
        HBRUSH m_hbrBorder;
        SIZE m_szBorder;

        SIZE m_szTextMargin;

        CRect m_rcArea;
        CSize m_szOutput;
        CSize m_szImage;

        CPPHtmlDrawer m_drawer;
        DWORD        m_dwAlign;
        CString m_sText;
        CString m_sOrgText; //Original
        int m_nWidthPercent;
        int m_nHeightPercent;
       
        BOOL m_bIsEnabled;
//        BOOL m_bIsFitOutput;

        //Timer
        BOOL m_bIsRunning;
        DWORD m_dwFrameRate;

        BOOL m_bIsImage;
        CString m_sTemplate;

        HFONT m_hFont;

        COLORREF m_clrText;
        COLORREF m_clrBkBegin;
        COLORREF m_clrBkMid;
        COLORREF m_clrBkEnd;
        int m_nBkMode;
        DWORD m_dwBkEffect;
        BYTE m_nGranularity;

        CScrollBar m_pHScroll;
        CScrollBar m_pVScroll;

        //{{AFX_MSG(CPPHtmlStatic)
        afx_msg void OnPaint();
        afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
        afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
        afx_msg BOOL OnEraseBkgnd(CDC* pDC);
        afx_msg void OnMouseMove(UINT nFlags, CPoint point);
        afx_msg void OnTimer(UINT nIDEvent);
        afx_msg void OnEnable(BOOL bEnable);
        afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
        afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
        afx_msg void OnSize(UINT nType, int cx, int cy);
        //}}AFX_MSG
        afx_msg LRESULT OnGetText(WPARAM, LPARAM);
        afx_msg LRESULT OnSetText(WPARAM, LPARAM);
        afx_msg LRESULT OnSetFont(WPARAM, LPARAM);
        afx_msg LRESULT OnGetFont(WPARAM, LPARAM);
    afx_msg LRESULT OnRepaintWindow(WPARAM wParam, LPARAM lParam);
    afx_msg LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam);
        DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif
支持 (0)  反对 (0)

TOP

#include "stdafx.h"
#include "PHtmlStatic.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define TIMER_ANIMATION                0x104

/////////////////////////////////////////////////////////////////////////////
// CPPHtmlStatic

CPPHtmlStatic::CPPHtmlStatic()
{
        m_hBitmapBk = NULL;

        m_hRgn = NULL;
        m_bRectRgn = FALSE;
        m_nRoundX = m_nRoundY = 0;

        m_bIsRunning = FALSE;
        m_dwFrameRate = 0;

        m_bIsImage = FALSE;
        SetText(_T(""));

        m_rcArea.SetRectEmpty();
        SetMargins();
       
        SetAlign(PPHTMLSTATIC_ALIGN_DEFAULT);
        SetHyperlinkStyle(RGB(0, 0, 255), FALSE, RGB(0, 0, 255), TRUE);
        SetImageZoom(100, 100);
//        SetFitOutput();

        SetBorder((HBRUSH)NULL);
       
        SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));

        //Customizes a static's background
        SetBkColor(::GetSysColor(COLOR_3DFACE));
        SetBkMode(OPAQUE);
        SetBkEffect(CPPDrawManager::EFFECT_SOLID);
} //End of CPPHtmlStatic

CPPHtmlStatic::~CPPHtmlStatic()
{
        if (NULL != m_hbrBorder)
        {
                :eleteObject(m_hbrBorder);
                m_hbrBorder = NULL;
        } //if
       
        FreeResources();
} //End of ~CPPHtmlStatic

BEGIN_MESSAGE_MAP(CPPHtmlStatic, CStatic)
        //{{AFX_MSG_MAP(CPPHtmlStatic)
        ON_WM_PAINT()
        ON_WM_SETCURSOR()
        ON_WM_LBUTTONDOWN()
        ON_WM_ERASEBKGND()
        ON_WM_MOUSEMOVE()
        ON_WM_TIMER()
        ON_WM_ENABLE()
        ON_WM_HSCROLL()
        ON_WM_VSCROLL()
        ON_WM_SIZE()
        //}}AFX_MSG_MAP
        ON_MESSAGE(WM_SETTEXT, OnSetText)
        ON_MESSAGE(WM_GETTEXT, OnGetText)
        ON_MESSAGE(WM_SETFONT, OnSetFont)
        ON_MESSAGE(WM_GETFONT, OnGetFont)
        ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
        ON_MESSAGE(UDM_TOOLTIP_HTML_REPAINT, OnRepaintWindow)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPPHtmlStatic message handlers
void CPPHtmlStatic:reSubclassWindow()
{
        //Enable the Static to send the Window Messages To its parent
        ModifyStyle(WS_HSCROLL|WS_VSCROLL, SS_NOTIFY);
        ModifyStyleEx(0, WS_EX_RIGHTSCROLLBAR);

        DWORD dwStyle = GetStyle();
//        SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwStyle | SS_NOTIFY);

//        DWORD dwExStyles = GetExStyle();
//        dwExStyles |= WS_EX_RIGHTSCROLLBAR;
//        SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, dwExStyles);

        m_bIsEnabled = (WS_DISABLED & dwStyle) ? FALSE : TRUE;
        m_drawer.EnableOutput(m_bIsEnabled);
       
        m_drawer.SetCallbackRepaint(GetSafeHwnd(), UDM_TOOLTIP_HTML_REPAINT);

        CFont* pFont = GetFont();
        HFONT hFont = NULL;
        //ENG: Gets a default system font
        //RUS: 项塍鬣屐 耔耱屐睇?梏?镱-箪铍鬣龛?
        if (NULL == hFont)
        {
                hFont = (HFONT)::GetStockObject(DEFAULT_GUI_FONT);
                if (NULL == hFont)
                        hFont = (HFONT)::GetStockObject(ANSI_VAR_FONT);
        }
        else hFont = (HFONT)pFont->GetSafeHandle();

        SetDefaultFont(hFont);

        //ENG: Sets a control's initializing text
        CString str;
        GetWindowText(str);
        SetText(str);
       
        CStatic:reSubclassWindow();
} //End of PreSubclassWindow

void CPPHtmlStatic::FreeResources()
{
        if (NULL != m_hBitmapBk)
        {
                :eleteObject(m_hBitmapBk);
                m_hBitmapBk = NULL;
        }
} //End of FreeResources

afx_msg BOOL CPPHtmlStatic::OnEraseBkgnd(CDC* pDC)
{
        return TRUE;
} //End of OnEraseBkgnd

BOOL CPPHtmlStatic:estroyWindow()
{
        ClearFrameRate();
        SetRgn(); //Delete a region
        return CStatic::DestroyWindow();
}

afx_msg void CPPHtmlStatic::OnTimer(UINT nIDEvent)
{
        if ((TIMER_ANIMATION == nIDEvent) && m_bIsEnabled)
        {
                m_drawer.OnTimer();
                RepaintWindow();
        }
       
        CStatic::OnTimer(nIDEvent);
} //End of OnTimer

afx_msg void CPPHtmlStatic::OnEnable(BOOL bEnable)
{
        CStatic::OnEnable(bEnable);
       
        m_bIsEnabled = bEnable;
        m_drawer.EnableOutput(bEnable);
//        EnableScrollBarCtrl(SB_HORZ, bEnable);
//        EnableScrollBarCtrl(SB_VERT, bEnable);
//        Invalidate();
//        UpdateWindow();
        UpdateSurface();
} //End of OnEnable

afx_msg LRESULT CPPHtmlStatic::OnSetText(WPARAM wParam, LPARAM lParam)
{
        m_bIsImage = FALSE;
        SetText((LPCTSTR)lParam);
        return 0;
} //End of OnSetFont

afx_msg LRESULT CPPHtmlStatic::OnGetText(WPARAM wParam, LPARAM lParam)
{
        return (LRESULT)(LPCTSTR)m_sText;
} //End of OnSetFont

afx_msg LRESULT CPPHtmlStatic::OnSetFont (WPARAM wParam, LPARAM lParam)
{
        SetDefaultFont((HFONT)wParam);
        return 0;
} //End of OnSetFont

afx_msg LRESULT CPPHtmlStatic::OnGetFont (WPARAM, LPARAM)
{
        return (LRESULT)m_hFont;
} //End of OnSetFont

afx_msg void CPPHtmlStatic::OnMouseMove(UINT nFlags, CPoint point)
{
        // Create TRACKMOUSEEVENT structure
        TRACKMOUSEEVENT tmeMouseEvent;               
       
        // Initialize members of structure
        tmeMouseEvent.cbSize = sizeof(TRACKMOUSEEVENT);
        tmeMouseEvent.dwFlags = TME_LEAVE;
        tmeMouseEvent.hwndTrack = m_hWnd;
       
        // Track mouse leave event
        _TrackMouseEvent(&tmeMouseEvent);
       
        CStatic::OnMouseMove(nFlags, point);
} //End of OnMouseMove

// Handler for WM_MOUSELEAVE
afx_msg LRESULT CPPHtmlStatic::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
        POINT point;
        ::GetCursorPos(&point);
        ScreenToClient(&point);
        m_drawer.OnSetCursor(&point);
//        RepaintWindow();

        return 0;
} // End of OnMouseLeave

void CPPHtmlStatic::UpdateSurface()
{
        if (::IsWindow(GetSafeHwnd()))
        {
                if (NULL == m_hRgn)
                {
                        Invalidate();
                        UpdateWindow();
                }
                else
                {
                        CRect (rc);
                        GetWindowRect(rc);
                        RedrawWindow();
                        GetParent()->ScreenToClient(rc);
                        GetParent()->InvalidateRect(rc,TRUE);
                        GetParent()->UpdateWindow();
                } //if
        } //if
} //End of UpdateSurface

void CPPHtmlStatic::OnSize(UINT nType, int cx, int cy)
{
        CStatic::OnSize(nType, cx, cy);

        //Stretch a region
        if (m_bRectRgn)
        {
                SetRgn(CreateRegion());
                m_bRectRgn = TRUE;
        }
        else
        {
                SetRgn();
        } //if
       
        if (TRANSPARENT != m_nBkMode)
                FreeResources();
        UpdateSurface();
} //End of OnSize
支持 (0)  反对 (0)

TOP

刷屏。。。。。。。。。。
超级简单易用的音视频转换组件 2008.08.24 最新版本 2.0b 推出,更强大 FFmpeg for Delphi http://www.CCAVC.com
支持 (0)  反对 (0)

TOP

代码太多了不发了,大家慢慢学习!
支持 (0)  反对 (0)

TOP

引用:
原帖由 w1984721 于 2008-3-12 21:22 发表
代码太多了不发了,大家慢慢学习!
一边星际,一边学习ING....感觉天下第一退步了,不要被这里的人同化,没有特色.以前那些发财帖要顶起来,那种精神要恢复起来GO GO GO.
Search author named w1984721 ,You will be surprised.
支持 (0)  反对 (0)

TOP

en.....

SHOW ME THE MONEY
支持 (0)  反对 (0)

TOP

我也是第一的粉丝

强烈 谴责 那些 娱乐化天下第一的行为
怎么赚美元和人民币..........知道的告诉我
支持 (0)  反对 (0)

TOP

楼主用 Delphi 吧。
用 VC++ 这样写进销存真的是浪费体力。
支持 (0)  反对 (0)

TOP

发新话题