【VC开源代码栏目提醒】:网学会员--在 VC开源代码编辑为广大网友搜集整理了:FBCtrlBar.cpp绩等信息,祝愿广大网友取得需要的信息,参考学习。
/*
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
文件:FBCtrlBar.cpp 类CFBCtrlBar的执行文件
版权:Firebird Software Workroom
声明:本源程序的版权受《中华人民共和国著作权法》以及其
它相关法律和条约的保护。任何有机会得到本源程序的
个人和机构,未经作者明确授权,不得将本源程序用于
任何商业目的(直接的或间接的)。对于非商业目的的使
用 (包括复制、传播、编译和修改), 原则上没有特别
的限制条款,但请在相关文档中说明其来源,并尊重原
作者的署名权。
编写:秦传安(chings) 1999.12 - 2000.5
联络:Tel:(0792)6323086 E_mail:
FBCtrlBar.cpp为[网学网-网友上传,谢谢支持]。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
#include "fclstd.h"
#include "resource.h"
#include "FBCtrlBar.h"
//#######################################################################
//
// class CFBCtrlBar
//
//#########################################################################
#define MOUSEMOVE_HOR 0x00000001
#define MOUSEMOVE_VER 0x00000002
#define MOUSEMOVE_ALL 0x00000003
//////////////////////////////////////////////////////////////////////
// 构造函数和析构函数
//////////////////////////////////////////////////////////////////////
CFBCtrlBar::CFBCtrlBar()
{
m_bDock = FALSE;
m_bDown = FALSE;
m_nSizeFlag = SIZEFLAG_NON;
SetRectEmpty(&m_rcOver);
}
CFBCtrlBar::~CFBCtrlBar()
{
}
///////////////////////////////////////////////////////////////////////
//窗口过程
LRESULT CFBCtrlBar::WindowProc(UINT msg,WPARAM wParam,LPARAM lParam)
{
LRESULT lResult = 0;
switch(msg)
{
case WM_PAINT:
{
if(!GetUpdateRect(m_hWnd,NULL,FALSE))
return 0;
PAINTSTRUCT ps;
BeginPaint(m_hWnd,&ps);
OnPaint(ps.hdc,&ps.rcPaint);
EndPaint(m_hWnd,&ps);
}
break;
case WM_SIZE:
OnSize();
break;
case FBWM_SETSIZE:
OnSetSize((LPRECT)lParam);
break;
case WM_CLOSE:
ShowWindow(m_hWnd,SW_HIDE);
if(m_pOwner)
lResult = SendMessage(m_pOwner->m_hWnd,FBWM_NOTIFY,MAKEWPARAM(GetWndID(),FB_CBN_CLOSE),0);
break;
case WM_COMMAND:
if(m_pOwner)
lResult = SendMessage(m_pOwner->m_hWnd,msg,wParam,lParam);
break;
case WM_NCLBUTTONDBLCLK://在标题栏双击时恢复上一次的停靠状态
if(wParam != HTCAPTION)
return CFBWnd::WindowProc(msg,wParam,lParam);
DockStateChange(m_nPreState);
break;
case WM_LBUTTONDBLCLK:
if(m_nStyle & CBS_FLYBY)
{
POINT pos;
pos.x = LOWORD(lParam);
pos.y = HIWORD(lParam);
if(HitTest(&pos) == HITTEST_GRIPPER)
DockStateChange(m_nPreState);
}
break;
case WM_NCLBUTTONDOWN:
if(wParam != HTCAPTION)
return CFBWnd::WindowProc(msg,wParam,lParam);
else
{
POINT pos;
pos.x = LOWORD(lParam);
pos.y = HIWORD(lParam);
ScreenToClient(m_hWnd,&pos);
OnLButtonDown(&pos,wParam);
}
break;
case WM_LBUTTONDOWN:
{
POINT pos;
pos.x = LOWORD(lParam);
pos.y = HIWORD(lParam);
OnLButtonDown(&pos,wParam);
}
break;
case WM_LBUTTONUP:
{
POINT pos;
pos.x = LOWORD(lParam);
pos.y = HIWORD(lParam);
OnLButtonUp(&pos,wParam);
}
break;
case WM_MOUSEMOVE:
{
POINT pos;
pos.x = LOWORD(lParam);
pos.y = HIWORD(lParam);
OnMouseMove(&pos,wParam);
}
break;
case WM_SETCURSOR:
{
POINT pos;
GetCursorPos(&pos);
ScreenToClient(m_hWnd,&pos);
if((HitTest(&pos) == HITTEST_SIZER && m_nDockState) ||
(m_nSizeFlag != SIZEFLAG_NON && m_bDown))
{
HCURSOR hcur;
if(m_nDockState& (CB_DOCK_TOP|CB_DOCK_BOTTOM))
{
hcur = LoadCursor(GetInstance(),MAKEINTRESOURCE(IDC_SIZINGNS));
m_nSizeFlag = SIZEFLAG_NS;
}
else
{
hcur = LoadCursor(GetInstance(),MAKEINTRESOURCE(IDC_SIZINGWE));
m_nSizeFlag = SIZEFLAG_WE;
}
SetCursor(hcur);
}
else
{
lResult = CFBWnd::WindowProc(msg,wParam,lParam);
m_nSizeFlag = SIZEFLAG_NON;
}
}
break;
case WM_NOTIFY:
OnNotify((LPNMHDR)lParam,lResult);
break;
default:
lResult = CFBWnd::WindowProc(msg,wParam,lParam);
break;
}
return lResult;
}
/////////////////////////////////////////////////////////////////////////////
BOOL CFBCtrlBar::Create(LPSTR lpszCaption,
CFBWnd* pParent,
UINT nStyle,
int width,
int height,
UINT uID)
{
m_nWidth = width;
m_nHeight = height;
m_nStyle = nStyle;
UINT style = WS_CHILD|WS_VISIBLE;//|WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
return CFBWnd::Create(CLS_FBSTDWNDCLASS,
lpszCaption,
pParent->GetInstance(),
pParent,
style,
WS_EX_TOOLWINDOW,
(HMENU)uID);
}
//////////////////////////////////////////////////////////////////////////
void CFBCtrlBar::OnSetSize(LPRECT pRect)
{
if(!m_bDock || !IsShow())return;
RECT rc;
CopyRect(&rc,pRect);
switch(m_nDockState)
{
case CB_DOCK_TOP:
rc.bottom = rc.top + m_nHeight;
pRect->top += m_nHeight;
break;
case CB_DOCK_BOTTOM:
rc.top = rc.bottom - m_nHeight;
pRect->bottom -= m_nHeight;
break;
case CB_DOCK_LEFT:
rc.right = rc.left + m_nWidth;
pRect->left += m_nWidth;
break;
case CB_DOCK_RIGHT:
rc.left = rc.right - m_nWidth;
pRect->right -= m_nWidth;
break;
default:
break;
}
if(m_nDockState != CB_DOCK_NON)
SetWindowPos(m_hWnd,NULL,rc.left,rc.top,
rc.right-rc.left,rc.bottom-rc.top,
SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOCOPYBITS);
}
//////////////////////////////////////////////////////////////////////////
void CFBCtrlBar::OnSize()
{
if((m_nStyle&CBS_FLYBY) && (m_nDockState == CB_DOCK_NON))
{
RECT rc;
GetWindowRect(m_hWnd,&rc);
CopyRect(&m_rcOver,&rc);
}
}
///////////////////////////////////////////////////////////////////////////
void CFBCtrlBar::OnPaint(HDC hDC,LPRECT prcPaint)
{
if(!m_bDock)return;
RECT rc;
GetClientRect(m_hWnd,&rc);
UINT style = m_nStyle & CBS_BORDER_RECT;
if(style)//画边框
{
if(style == CBS_BORDER_RECT)
DrawEdge(GetDC(m_hWnd),&rc,EDGE_ETCHED,BF_RECT);
else
{
if(style & CBS_BORDER_TOP)
DrawEdge(GetDC(m_hWnd),&rc,EDGE_ETCHED,BF_TOP);
if(style & CBS_BORDER_BOTTOM)
DrawEdge(GetDC(m_hWnd),&rc,EDGE_ETCHED,BF_BOTTOM);
if(style & CBS_BORDER_LEFT)
DrawEdge(GetDC(m_hWnd),&rc,EDGE_ETCHED,BF_LEFT);
if(style & CBS_BORDER_RIGHT)
DrawEdge(GetDC(m_hWnd),&rc,EDGE_ETCHED,BF_RIGHT);
}
}
if(m_nStyle & CBS_GRIPPER)//画把手
DrawGripper(hDC,&rc);
}
////////////////////////////////////////////////////////////////////////
void CFBCtrlBar::Docking(UINT nDockState)
{
m_bDock = TRUE;
m_nDockState =
上一篇:
FBCoolBar.cpp
下一篇:
ASP小区停车管理系统(Access)(含录像)