⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sizebar.cpp

📁 在VC编程环境下
💻 CPP
字号:
/*
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
	文件:SizeBar.cpp  类CSizeBar的执行文件
	版权:Firebird Software Workroom
	声明:任何有机会得到本源程序的人,未经作者明确授权,不得将本源程序
		  用于任何商业目的。对于非商业目的的使用,亦请在相关文档中说明
		  其来源。
	编写:秦传安	1999.12 - 2000.5
	联络:Tel:(0792)6323086	E_mail:chings@163.net
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
#include "fclstd.h"
#include "FBCtrlBar.h"

//#######################################################################
//
//			class CSizeBar
//
//#########################################################################

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSizeBar::CSizeBar()
{
	m_hChild = NULL;
}

CSizeBar::~CSizeBar()
{

}
///////////////////////////////////////////////////////////////////////
//窗口过程
LRESULT CSizeBar::WindowProc(UINT msg,WPARAM wParam,LPARAM lParam)
{
	LRESULT lResult = 0;

	switch(msg)
	{
	case WM_ERASEBKGND:
		{
			RECT rc;
			GetChildWndRect(&rc);
			ExcludeClipRect((HDC)wParam,rc.left,rc.top,rc.right,rc.bottom);
			lResult = DefWindowProc(m_hWnd,msg,wParam,lParam);
		}
		break;
	case WM_DRAWITEM:
		lResult = SendMessage(m_hChild,msg,wParam,lParam);
		break;
	default:
		lResult = CFBCtrlBar::WindowProc(msg,wParam,lParam);
		break;
	}

	return lResult;
}
//////////////////////////////////////////////////////////////////////////////////////////
void CSizeBar::GetChildWndRect(LPRECT pRect)
{
	GetClientRect(m_hWnd,pRect);

	switch(m_nDockState)
	{
	case CB_DOCK_TOP:
		pRect->top += 4;
		pRect->bottom -= 8;
		pRect->left += 14;
		pRect->right -= 4;
		break;
	case CB_DOCK_BOTTOM:
		pRect->top += 8;
		pRect->bottom -= 4;
		pRect->left += 14;
		pRect->right -= 4;
		break;
	case CB_DOCK_LEFT:
		pRect->top += 14;
		pRect->bottom -= 4;
		pRect->left += 4;
		pRect->right -= 8;
		break;
	case CB_DOCK_RIGHT:
		pRect->top += 14;
		pRect->bottom -= 4;
		pRect->left += 8;
		pRect->right -= 4;
		break;
	default:
		break;
	}
}
//////////////////////////////////////////////////////////////////////////////////////////
void CSizeBar::SetChild(HWND hChild)
{
	m_hChild = hChild;
	SetParent(hChild,m_hWnd);
}
//////////////////////////////////////////////////////////////////////////////////////////
void CSizeBar::OnSize()
{
	CFBCtrlBar::OnSize();

	if(!m_hChild)return;

	RECT rc;
	GetChildWndRect(&rc);

	SetWindowPos(m_hChild,NULL,rc.left,rc.top,
				rc.right - rc.left,rc.bottom - rc.top,
				SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOCOPYBITS);
}
////////////////////////////////////////////////////////////////////////////////
void CSizeBar::OnPaint(HDC hDC,LPRECT prcPaint)
{
	RECT rc,rcClient;

	GetClientRect(m_hWnd,&rc);
	CopyRect(&rcClient,&rc);
	switch(m_nDockState)
	{
	case CB_DOCK_TOP:
		{
			DrawEdge(hDC,&rcClient,EDGE_ETCHED,BF_LEFT);
			DrawEdge(hDC,&rcClient,EDGE_ETCHED,BF_RIGHT);
			rcClient.top = rcClient.bottom - 4;
			rcClient.left += 1;
			rcClient.right -= 1;
			DrawEdge(hDC,&rcClient,BDR_RAISEDINNER,BF_TOP);

			rc.top += 2;
			rc.bottom -= 4;
		}
		break;
	case CB_DOCK_BOTTOM:
		{
			DrawEdge(hDC,&rcClient,EDGE_ETCHED,BF_BOTTOMLEFT);
			DrawEdge(hDC,&rcClient,EDGE_ETCHED,BF_RIGHT);
			rcClient.bottom = rcClient.top + 4;
			rcClient.left += 1;
			rcClient.right -= 1;
			DrawEdge(hDC,&rcClient,BDR_RAISEDINNER,BF_BOTTOM);

			rc.top += 4;
			rc.bottom -= 2;
		}
		break;
	case CB_DOCK_LEFT:
		{
			DrawEdge(hDC,&rcClient,EDGE_ETCHED,BF_BOTTOMLEFT);
			rcClient.left = rcClient.right - 4;
			rcClient.top += 1;
			rcClient.bottom -= 2;
			DrawEdge(hDC,&rcClient,BDR_RAISEDINNER,BF_LEFT);

			rc.left += 2;
			rc.right -= 4;
		}
		break;
	case CB_DOCK_RIGHT:
		{
			DrawEdge(hDC,&rcClient,EDGE_ETCHED,BF_BOTTOMRIGHT);
			rcClient.right = rcClient.left + 4;
			rcClient.top += 1;
			rcClient.bottom -= 2;
			DrawEdge(hDC,&rcClient,BDR_RAISEDINNER,BF_RIGHT);

			rc.left += 4;
			rc.right -= 2;
		}
		break;
	}
	DrawGripper(hDC,&rc);

	CopyRect(&m_rcSizer,&rcClient);
}
////////////////////////////////////////////////////////////////////////////
void CSizeBar::OnNotify(LPNMHDR pNMHDR,LRESULT& lResult)
{
	if(pNMHDR->hwndFrom == m_hChild)
		lResult = SendMessage(m_hChild,WM_NOTIFY,(WPARAM)pNMHDR->idFrom,(LPARAM)pNMHDR);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -