// IEBar.cpp : implementation file
/***********************************************************
Written by : FanWenSheng
Address : HeFei University of Technology
Email : fanwenshengcom@sohu.com
Copyright (c) 2002.8.27
***********************************************************/
#include "stdafx.h"
#include "IECtrlBar.h"
#include "IEBar.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CIEBar dialog
#ifndef IE_FRM_WIDTH
#define IE_FRM_WIDTH 6
#endif
CIEBar::CIEBar(CWnd* pParent /*=NULL*/)
: CDialogBar()
{
m_TitleTxt = _T("浏览器");
m_cyTitle = 22;
m_cxIEBar = 200;
pTreeCtrl = NULL;
m_HideBtnRc.left =
m_HideBtnRc.top =
m_HideBtnRc.right =
m_HideBtnRc.bottom = 0;
m_VirClientRc.left =
m_VirClientRc.top =
m_VirClientRc.right =
m_VirClientRc.bottom = 0;
m_PrePnt.x =
m_PrePnt.y = 0;
m_bResize =
m_bTrack =
m_bRaised =
m_bPressed = false;
}
void CIEBar::DoDataExchange(CDataExchange* pDX)
{
CDialogBar::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CIEBar)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CIEBar, CDialogBar)
//{{AFX_MSG_MAP(CIEBar)
ON_WM_LBUTTONDBLCLK()
ON_WM_LBUTTONDOWN()
ON_WM_PAINT()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_WM_SETCURSOR()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CIEBar message handlers
BOOL CIEBar::InitIEBar()
{
UpdateData(FALSE);
SetWindowText("IE Control Bar");
m_Font.CreateFont(-12,0,0,0,400,0,0,0,134,3,2,1,2,"宋体");
SetFont(&m_Font);
// create the tree control
pTreeCtrl = new CTreeCtrl();
ASSERT(pTreeCtrl);
if(!pTreeCtrl->Create(WS_CHILD | WS_VISIBLE, CRect(0,0,0,0), this, 101))
{
TRACE0("Failed to create tree control!");
return FALSE;
}
// create the tool tip
if(!m_TipCtrl.Create(this))
return FALSE;
return TRUE;
}
// for tooltips
BOOL CIEBar::PreTranslateMessage(MSG* pMsg)
{
m_TipCtrl.RelayEvent(pMsg);
return CWnd::PreTranslateMessage(pMsg);
}
BOOL CIEBar::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
ChangeCursor();
return TRUE; // avoid the cross cursor flash
}
// change cursor
void CIEBar::ChangeCursor()
{
if(!m_VirClientRc.IsRectEmpty())
{
CPoint t_CurPnt;
::GetCursorPos(&t_CurPnt);
ScreenToClient(&t_CurPnt);
CRect t_CursorRc(m_VirClientRc);
t_CursorRc.left = m_VirClientRc.right;
t_CursorRc.right = t_CursorRc.left + IE_FRM_WIDTH;
HCURSOR hCursor = NULL;
if(t_CursorRc.PtInRect(t_CurPnt))
hCursor = AfxGetApp()->LoadCursor(IDC_RESIZE);
else
hCursor = AfxGetApp()->LoadStandardCursor(IDC_ARROW);
::SetCursor(hCursor);
}
}
void CIEBar::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// don't floating
return;
}
void CIEBar::OnLButtonDown(UINT nFlags, CPoint point)
{
SetCapture(); // capture mouse
if(!m_HideBtnRc.IsRectEmpty())
{
m_bTrack = true; // track enable
m_bRaised = false;
if(m_HideBtnRc.PtInRect(point))
m_bPressed = true;
InvalidateRect(&m_HideBtnRc);
}
// whether track mouse for risize IE bar
CRect t_CursorRc(m_VirClientRc);
t_CursorRc.left = m_VirClientRc.right;
t_CursorRc.right = t_CursorRc.left + IE_FRM_WIDTH;
if(t_CursorRc.PtInRect(point))
m_bResize = true;
// don't floating
return;
}
void CIEBar::OnLButtonUp(UINT nFlags, CPoint point)
{
ReleaseCapture();
m_bTrack =
m_bRaised =
m_bPressed = false;
// hide previous drag line
if(m_PrePnt != CPoint(0, 0))
{
DrawDragLine(m_PrePnt);
m_PrePnt = CPoint(0, 0);
}
// hide itself
if(!m_HideBtnRc.IsRectEmpty())
if(m_HideBtnRc.PtInRect(point))
GetDockingFrame()->ShowControlBar(this, FALSE, FALSE);
// adjust IE bar size
ResizeIEBar();
m_bResize = false;
CDialogBar::OnLButtonUp(nFlags, point);
}
// adjust IE bar size
void CIEBar::ResizeIEBar()
{
if(m_bResize)
{
CPoint t_CurPnt;
::GetCursorPos(&t_CurPnt);
ScreenToClient(&t_CurPnt);
m_cxIEBar = t_CurPnt.x;
CRect t_ClientRc;
GetClientRect(&t_ClientRc);
ClientToScreen(&t_ClientRc);
t_ClientRc.right = t_ClientRc.left + m_cxIEBar;
// resize right of the "t_ClientRc"
if(t_ClientRc.Width() < 11)
{
t_ClientRc.right = t_ClientRc.left + 11;
m_cxIEBar = 11;
}
else
{
CRect t_FrmRc;
GetDockingFrame()->GetClientRect(&t_FrmRc);
if(t_ClientRc.Width() > t_FrmRc.Width() / 2)
{
t_ClientRc.right = t_ClientRc.left + t_FrmRc.Width() / 2;
m_cxIEBar = t_FrmRc.Width() / 2;
}
}
GetDockingFrame()->ShowControlBar(this, FALSE, FALSE);
MoveWindow(&t_ClientRc);
GetDockingFrame()->ShowControlBar(this, TRUE, FALSE);
}
}
void CIEBar::OnMouseMove(UINT nFlags, CPoint point)
{
CDialogBar::OnMouseMove(nFlags, point);
// draw tracking line
if(m_bResize)
{
// hide previous drag line
if(m_PrePnt != CPoint(0, 0))
DrawDragLine(m_PrePnt);
// draw new drag line
CPoint t_ScrPnt(GetFitPnt());
ClientToScreen(&t_ScrPnt);
DrawDragLine(t_ScrPnt);
// for draw previous drag line
m_PrePnt = t_ScrPnt;
}
// draw hide-button for raised and pressed
DrawHideBtnFace(point);
}
// draw hide-button for raised and pressed
void CIEBar::DrawHideBtnFace(CPoint point)
{
if(!m_HideBtnRc.IsRectEmpty())
{
if(m_HideBtnRc.PtInRect(point))
{
SetCapture();
if(m_bRaised) // only draw once
return;
m_bRaised = m_bTrack ? false : true;
m_bPressed = m_bTrack ? true : false;
}
else
{
if(!m_bTrack)
ReleaseCapture();
if(!m_bRaised && !m_bPressed) // only draw once
return;
m_bRaised =
m_bPressed = false;
}
InvalidateRect(&m_HideBtnRc);
}
}
// get fit point
CPoint CIEBar::GetFitPnt()
{
CRect t_FrmRc;
GetDockingFrame()->GetClientRect(&t_FrmRc);
POINT t_CurPnt;
::GetCursorPos(&t_CurPnt);
ScreenToClient(&t_CurPnt);
if(t_CurPnt.x < 0)
return CPoint(0, t_CurPnt.y);
if(t_CurPnt.x > t_FrmRc.Width() / 2)
return CPoint(t_FrmRc.Width() / 2, t_CurPnt.y);
return t_CurPnt;
}
// draw draging line
void CIEBar::DrawDragLine(CPoint point)
{
CRect t_ClientRect;
GetClientRect(&t_ClientRect);
ClientToScreen(&t_ClientRect);
CRect t_FocusRect(point.x, t_ClientRect.top,
point.x, t_ClientRect.bottom);
t_FocusRect.InflateRect(2, 0, -2, -43);
CDC dc;
dc.Attach(::GetWindowDC(NULL)); // note: this dc is used in screen coordinates
int t_OldMode = dc.SetROP2(R2_NOT);
for(int i=0; i<2; i++) // draw drag lines here
{
t_FocusRect.left += 2;
t_FocusRect.right += 2;
dc.DrawFocusRect(&t_FocusRect);
}
dc.SetROP2(t_OldMode);
dc.DeleteDC();
}
CSize CIEBar::CalcDynamicLayout(int nLength, DWORD dwMode)
{
// get rectangle for main frame
CRect t_FrmRc;
GetDockingFrame()->GetClientRect(&t_FrmRc);
// resize tree control size
if(pTreeCtrl)
{
if(pTreeCtrl->m_hWnd != NULL)
{
CRect t_TreeRc(5, 8, m_cxIEBar-2-IE_FRM_WIDTH, t_FrmRc.Height() - 51);
t_TreeRc.top += m_cyTitle + 1;
pTreeCtrl->MoveWindow(&t_TreeRc);
}
}
// set IE bar size
return CSize(m_cxIEBar, t_FrmRc.Height());
}
// get tree control
CTreeCtrl* CIEBar::GetTreeCtrl()
{
if(pTreeCtrl)
return pTreeCtrl;
else
return NULL;
}
void CIEBar::OnPaint()
{
CPaintDC dc(this); // device context for painting
DrawFrm(dc); // draw big frame for IE bar
DrawTitleTxt(dc); // draw title text
DrawHideBtn(dc); // draw hide button
}
// draw big frame for IE bar
void CIEBar::DrawFrm(CDC& dc)
{
CRect
没有合适的资源?快使用搜索试试~ 我知道了~
商业编程-源码-IE控制条的实现代码.zip
共26个文件
h:7个
cpp:6个
bmp:4个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 16 浏览量
2022-06-21
12:22:34
上传
评论
收藏 25KB ZIP 举报
温馨提示
商业编程-源码-IE控制条的实现代码.zip
资源推荐
资源详情
资源评论
收起资源包目录
商业编程-源码-IE控制条的实现代码.zip (26个子文件)
IE控制条的实现代码
IECtrlBar
IECtrlBarView.h 2KB
Resource.h 778B
IECtrlBarDoc.cpp 2KB
res
IECtrlBarDoc.ico 1KB
IECtrlBar.rc2 401B
bmp00002.bmp 322B
icon1.ico 1KB
bmp00001.bmp 206B
IECtrlBar.ico 1KB
Toolbar.bmp 1KB
bitmap1.bmp 322B
7.cur 326B
IECtrlBar.cpp 4KB
IECtrlBar.clw 3KB
IECtrlBar.rc 12KB
IECtrlBarView.cpp 3KB
IECtrlBar.h 1KB
StdAfx.cpp 211B
MainFrm.cpp 3KB
IECtrlBar.dsp 5KB
IECtrlBar.dsw 541B
MainFrm.h 2KB
StdAfx.h 1KB
IEBar.h 3KB
IEBar.cpp 11KB
IECtrlBarDoc.h 1KB
共 26 条
- 1
资源评论
programxh
- 粉丝: 17
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功