/////////////////////////////////////////////////////////////////////////
//
// CDockPageBar Version 1.2
//
// Created: Mar 16, 2004
//
/////////////////////////////////////////////////////////////////////////
// Copyright (C) 2004 by Cuick. All rights reserved.
//
// This code is free for personal and commercial use, providing this
// notice remains intact in the source files and all eventual changes are
// clearly marked with comments.
//
// Send bug reports, bug fixes, enhancements, requests, flames, etc. to
// Cuick@163.net
//
// Hint: These classes are intended to be used as base classes. Do not
// simply add your code to these file - instead create a new class
// derived from CDockPageBar classes and put there what you need. See
// CTestBar classes in the demo projects for examples.
// Modify this file only to fix bugs, and don't forget to send me a copy.
/////////////////////////////////////////////////////////////////////////
// Acknowledgements:
// o 感谢Cristi Posea的CSizingControlBar
// o 借鉴了王骏的《轻松实现类VC界面》中的部分代码,在这里表示感谢。
// o 感谢hengai帮助修改了部分内存泄漏问题
// o 开发过程中遇到的问题得到了VC知识库论坛中很多人的帮助,这里一并感谢。
//
// DockPageBar.cpp : implementation file
//
#include "stdafx.h"
#include "DockPageBar.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////
// delete the line between menu bar and tool bar
// From <afximpl.h>
struct AUX_DATA
{
int _unused1, _unused2;
int _unused3, _unused4;
int cxBorder2, cyBorder2;
};
extern __declspec(dllimport) AUX_DATA afxData;
class INIT_afxData
{
public:
INIT_afxData ()
{
afxData.cxBorder2 = afxData.cyBorder2 = 0;
}
} g_afxData2;
/////////////////////////////////////////////////////////////////////////
// CMyButton
CMyButton::CMyButton()
{
bRaised = FALSE;
bPushed = FALSE;
}
void CMyButton::Paint(CDC* pDC, BOOL isActive)
{
CRect rc = GetRect();
if (bPushed)
pDC->Draw3dRect(rc, ::GetSysColor(COLOR_BTNSHADOW),
::GetSysColor(COLOR_BTNHIGHLIGHT));
else
if (bRaised)
pDC->Draw3dRect(rc, ::GetSysColor(COLOR_BTNHIGHLIGHT),
::GetSysColor(COLOR_BTNSHADOW));
}
// draw close button
void CCloseButton::Paint(CDC* pDC, BOOL isActive)
{
CMyButton::Paint(pDC, isActive);
COLORREF clrOldTextColor = pDC->GetTextColor();
if(TRUE == isActive)
pDC->SetTextColor(RGB(255,255,255));
else
pDC->SetTextColor(RGB(0,0,0));
int nPrevBkMode = pDC->SetBkMode(TRANSPARENT);
CFont font;
int ppi = pDC->GetDeviceCaps(LOGPIXELSX);
int pointsize = MulDiv(75, 96, ppi); // 6 points at 96 ppi
font.CreatePointFont(pointsize, _T("Marlett"));
CFont* oldfont = pDC->SelectObject(&font);
pDC->TextOut(ptOrg.x + 2, ptOrg.y + 2, CString(_T("r"))); // x-like
pDC->SelectObject(oldfont);
pDC->SetBkMode(nPrevBkMode);
pDC->SetTextColor(clrOldTextColor);
}
CStudButton::CStudButton()
{
}
// draw stud
void CStudButton::Paint(CDC* pDC, BOOL isActive)
{
CMyButton::Paint(pDC, isActive);
HPEN oldPen;
CPen pen;
if(TRUE == isActive)
pen.CreatePen (PS_SOLID, 1, RGB(255,255,255));
else
pen.CreatePen (PS_SOLID, 1, RGB(0,0,0));
oldPen = (HPEN)pDC->SelectObject (pen);
if(FALSE == bFloat)
{
pDC->MoveTo (ptOrg.x + 4, ptOrg.y + 8);
pDC->LineTo (ptOrg.x + 4, ptOrg.y + 3);
pDC->LineTo (ptOrg.x + 8, ptOrg.y + 3);
pDC->LineTo (ptOrg.x + 8, ptOrg.y + 8);
pDC->MoveTo (ptOrg.x + 7, ptOrg.y + 3);
pDC->LineTo (ptOrg.x + 7, ptOrg.y + 8);
pDC->MoveTo (ptOrg.x + 2, ptOrg.y + 8);
pDC->LineTo (ptOrg.x + 11, ptOrg.y + 8);
pDC->MoveTo (ptOrg.x + 6, ptOrg.y + 8);
pDC->LineTo (ptOrg.x + 6, ptOrg.y + 12);
}
else
{
pDC->MoveTo (ptOrg.x + 5, ptOrg.y + 4);
pDC->LineTo (ptOrg.x + 10, ptOrg.y + 4);
pDC->LineTo (ptOrg.x + 10, ptOrg.y + 8);
pDC->LineTo (ptOrg.x + 5, ptOrg.y + 8);
pDC->MoveTo (ptOrg.x + 5, ptOrg.y + 7);
pDC->LineTo (ptOrg.x + 10, ptOrg.y + 7);
pDC->MoveTo (ptOrg.x + 5, ptOrg.y + 2);
pDC->LineTo (ptOrg.x + 5, ptOrg.y + 11);
pDC->MoveTo (ptOrg.x + 1, ptOrg.y + 6);
pDC->LineTo (ptOrg.x + 5, ptOrg.y + 6);
}
pDC->SelectObject(oldPen);
}
/////////////////////////////////////////////////////////////////////////////
// CPageItem
void CPageItem::Draw(CDC *pDC, BOOL bActive)
{
CRect rect = m_rect;
COLORREF crOldText;
rect.top +=2;
if(bActive)
{
rect.bottom -= 2;
CRect rcButton=rect;
rcButton.DeflateRect(-1,0,0,-2);
CBrush brush(GetSysColor(COLOR_3DFACE));
pDC->FillRect(rcButton,&brush);
CPen pen(PS_SOLID,1,GetSysColor(COLOR_3DDKSHADOW));
HPEN oldPen = (HPEN)pDC->SelectObject (&pen);
pDC->MoveTo (rect.left-1 , rect.bottom+2 );
pDC->LineTo (rect.right ,rect.bottom+2);
pDC->MoveTo (rect.right-1, rect.top);
pDC->LineTo (rect.right-1,rect.bottom+3 );
pDC->SelectObject (oldPen);
crOldText = pDC->SetTextColor(RGB(0,0,0));
m_pWnd->ShowWindow(SW_SHOW);
}
else
{
CPen pen(PS_SOLID, 1, RGB(128,128,128));
HPEN oldPen = (HPEN)pDC->SelectObject (&pen);
pDC->MoveTo (rect.right, rect.top + 5);
pDC->LineTo (rect.right, rect.bottom -1);
pDC->SelectObject (oldPen);
crOldText = pDC->SetTextColor(RGB(128,128,128));
m_pWnd->ShowWindow(SW_HIDE);
}
rect.left += 3;
rect.right -= 2;
// draw Icon
if(rect.Width() > 16 && m_hIcon != NULL)
{
::DrawIconEx(pDC->m_hDC,rect.left,rect.top + 3,m_hIcon,16,16,0,NULL,DI_NORMAL);
rect.left += 22;
}
if (!m_sText.IsEmpty())
{
// draw text
rect.top += 2;
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 += "...";
}
int nPrevBkMode = pDC->SetBkMode(TRANSPARENT);
pDC->DrawText(sText, &rect, DT_LEFT | DT_VCENTER | DT_SINGLELINE);
pDC->SetBkMode(nPrevBkMode);
}
pDC->SetTextColor (crOldText);
}
/////////////////////////////////////////////////////////////////////////////
// CDockPageBar
IMPLEMENT_DYNAMIC(CDockPageBar, baseCDockPageBar);
CDockPageBar::CDockPageBar()
{
m_szMinHorz = CSize(50, 50);
m_szMinVert = CSize(60, 60);
m_szMinFloat = CSize(150, 150);
m_cyGripper = CAPTION_HEIGHT+4;
m_isActive = FALSE;
m_Title = "";
m_nActivePage = -1;
m_stud.bFloat = FALSE;
}
CDockPageBar::~CDockPageBar()
{
for(POSITION pos = m_PageList.GetHeadPosition(); pos;)
{
CPageItem* pItem=(CPageItem*)m_PageList.GetNext(pos);
delete pItem; pItem=NULL;
}
m_PageList.RemoveAll();
for(pos = m_pDPBContext.GetHeadPosition(); pos;)
{
CDockPageBarContext* pDPBContext = (CDockPageBarContext*)m_pDPBContext.GetNext(pos);
if(pDPBContext)
{
pDPBContext->FreeAll();
}
}
m_pDPBContext.RemoveAll();
}
BEGIN_MESSAGE_MAP(CDockPageBar, baseCDockPageBar)
//{{AFX_MSG_MAP(CDockPageBar)
ON_WM_CREATE()
ON_WM_NCPAINT()
ON_WM_SIZE()
//ON_WM_PAINT()
ON_WM_NCHITTEST()
ON_WM_NCLBUTTONUP()
ON_WM_NCLBUTTONDOWN()
ON_WM_NCLBUTTONDBLCLK()
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDockPageBar message handlers
int CDockPageBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (baseCDockPageBar::OnCreate(lpCreateStruct) == -1)
return -1;
if (m_font.CreatePointFont(85, "Tahoma"))
SetFont(&m_font);
m_isActive = FALSE;
return 0;
}
void CDockPageBar::OnDestroy()
{
}
void CDockPageBar::OnUpdateCmdUI(CFrameWnd *pTarget, BOOL bDisableIfNoHndler)
{
if (!HasGripper())
return;
BOOL bNeedPain
没有合适的资源?快使用搜索试试~ 我知道了~
窗体停靠 类似VC开发的界面
共77个文件
h:13个
cpp:12个
sbr:12个
4星 · 超过85%的资源 需积分: 17 25 下载量 139 浏览量
2011-07-23
08:51:43
上传
评论
收藏 4.95MB RAR 举报
温馨提示
类似VC的界面 很好的窗体停靠功能 可以把每个停靠的窗口吸附到边界并隐藏 当鼠标移动到边界是停靠窗体滑出
资源推荐
资源详情
资源评论
收起资源包目录
dotNetSDI.rar (77个子文件)
dotNetSDI
TestBar.h 1KB
StdAfx.cpp 212B
resource.h 1KB
dotNET界面.rc 13KB
dotNET界面.dsp 6KB
dotNET界面Doc.cpp 2KB
dotNET界面Doc.h 1KB
dotNET界面View.cpp 3KB
dotNET界面.dsw 545B
dotNET界面.opt 53KB
dotNET界面.clw 4KB
MainFrm.h 2KB
dotNET界面.h 1KB
SearchResult.h 1KB
SearchDlg.cpp 1KB
dotNET界面.vcproj 11KB
Debug
AutoHideBar.obj 119KB
dotNET界面.pch 9.05MB
vc60.pdb 524KB
MainFrm.sbr 0B
SearchDlg.sbr 0B
dotNET界面.bsc 4.06MB
vc60.idb 273KB
dotNET界面View.obj 21KB
SearchResult.obj 17KB
dotNET界面Doc.sbr 0B
SearchDlg.obj 17KB
sizecbar.obj 83KB
dotNET界面.pdb 769KB
dotNET界面.ilk 703KB
TestBar.sbr 0B
dotNET界面View.sbr 0B
DockPageBar.obj 116KB
dotNET界面.sbr 0B
MyStatusBar.sbr 0B
DockPageBar.sbr 0B
dotNET界面.obj 23KB
MainFrm.obj 27KB
AutoHideBar.sbr 0B
StdAfx.obj 149KB
dotNET界面.res 9KB
SearchResult.sbr 0B
dotNET界面.exe 224KB
sizecbar.sbr 0B
StdAfx.sbr 1.77MB
dotNET界面Doc.obj 15KB
TestBar.obj 13KB
MyStatusBar.obj 14KB
MyStatusBar.h 1KB
SearchDlg.h 1KB
StdAfx.h 1KB
src
sizecbar.h 8KB
sizecbar.cpp 44KB
AutoHideBar.h 7KB
DockPageBar.h 6KB
AutoHideBar.cpp 38KB
DockPageBar.cpp 48KB
dotNET界面.plg 1KB
dotNET界面.ncb 169KB
TestBar.cpp 1KB
MainFrm.cpp 5KB
dotNET界面.cpp 4KB
dotNET界面.sln 909B
res
ico00003.ico 318B
ico00002.ico 318B
dotNET界面.rc2 402B
dotNET界面Doc.ico 1KB
Thumbs.db 11KB
ico00001.ico 318B
Toolbar.bmp 1KB
dotNET界面.ico 1KB
icon1.ico 318B
dotNET界面.suo 20KB
SearchResult.cpp 2KB
dotNET界面View.h 2KB
MyStatusBar.cpp 1KB
dotNET界面.aps 47KB
共 77 条
- 1
资源评论
- 欲说还休cjt2013-09-19是可以实现停靠功能,但是效果不是我很想要的那种。。。
- 铸魂2013-05-10东西不错,很不错
xh_newsky
- 粉丝: 2
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功