📄 dockingframe.h
字号:
bool bRes=( (key==0) && GetActiveWindow()!=0 );
if(bRes)
bRes=m_ahManager.MouseEnter(m_hWnd,pt);
return bRes;
}
bool OnMouseHover(DWORD key,const CPoint& pt)
{
if(key==0)
m_ahManager.MouseHover(m_hWnd,pt);
return true;
}
bool PinUp(DFPINUP* pHdr)
{
bool bUpdate;
bool bRes=m_ahManager.PinUp(m_hWnd,pHdr,bUpdate);
if(bUpdate)
{
T* pThis = static_cast<T*>(this);
pThis->UpdateLayout(FALSE);
pThis->RedrawWindow(NULL,NULL,RDW_INVALIDATE | RDW_UPDATENOW |
((m_hWndClient==NULL)?RDW_ERASE:0));
}
return bRes;
}
LRESULT IsPinned(DFMHDR* pHdr) const
{
return pHdr->hBar==m_ahManager.m_hWnd;
}
#endif
protected:
////////////////messages handlers//////////////////////
BEGIN_MSG_MAP(thisClass)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
MESSAGE_HANDLER(WM_SETTINGCHANGE, OnSettingChange)
MESSAGE_HANDLER(WM_SYSCOLORCHANGE, OnSettingChange/*OnSysColorChange*/)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
MESSAGE_HANDLER(WM_SETCURSOR,OnSetCursor)
MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown)
MESSAGE_HANDLER(WM_GETMINMAXINFO,OnGetMinMaxInfo)
#ifdef DF_AUTO_HIDE_FEATURES
MESSAGE_HANDLER(WM_MOUSEMOVE, OnMouseMove)
MESSAGE_HANDLER(WM_MOUSEHOVER, OnMouseHover)
#endif
/////////////////////
MESSAGE_HANDLER(WMDF_DOCK,OnDock)
#ifdef DF_FOCUS_FEATURES
CHAIN_MSG_MAP_MEMBER(m_focusHandler)
#endif
CHAIN_MSG_MAP(baseClass)
END_MSG_MAP()
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
{
T* pThis=static_cast<T*>(this);
pThis->InitializeDockingFrame();
bHandled=FALSE;
return 0;
}
LRESULT OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
{
bHandled = false;
#ifdef DF_FOCUS_FEATURES
m_focusHandler.RemoveHook(m_hWnd);
#endif
return 0;
}
LRESULT OnSettingChange(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
T* pThis=static_cast<T*>(this);
pThis->ApplySystemSettings();
// pThis->UpdateLayout();
return 0;
}
// LRESULT OnSysColorChange(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
// {
// return 0;
// }
LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
T* pThis=static_cast<T*>(this);
CPaintDC dc(pThis->m_hWnd);
pThis->Draw(dc);
return 0;
}
LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
{
return DefWindowProc(uMsg,wParam,lParam);
}
LRESULT OnSetCursor(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
T* pThis = static_cast<T*>(this);
if((HWND)wParam == pThis->m_hWnd && LOWORD(lParam) == HTCLIENT)
{
DWORD dwPos = ::GetMessagePos();
CPoint pt(GET_X_LPARAM(dwPos), GET_Y_LPARAM(dwPos));
pThis->ScreenToClient(&pt);
HCURSOR hCursor=pThis->GetCursor(pt);
bHandled=(hCursor!=NULL);
if(bHandled)
SetCursor(hCursor);
return bHandled;
}
bHandled = FALSE;
return 0;
}
LRESULT OnLButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& bHandled)
{
CPoint pt( GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
T* pThis = static_cast<T*>(this);
bHandled=pThis->StartSliding(pt);
return !bHandled;
}
LRESULT OnGetMinMaxInfo(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
{
T* pThis=static_cast<T*>(this);
LRESULT lRes=pThis->DefWindowProc(uMsg,wParam,lParam);
pThis->GetMinMaxInfo(reinterpret_cast<LPMINMAXINFO>(lParam));
return lRes;
}
#ifdef DF_AUTO_HIDE_FEATURES
LRESULT OnMouseMove(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
CPoint pt( GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
T* pThis = static_cast<T*>(this);
bHandled=pThis->OnMouseMove(wParam,pt);
return 0;
}
LRESULT OnMouseHover(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
CPoint pt( GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
T* pThis = static_cast<T*>(this);
bHandled=pThis->OnMouseHover(wParam,pt);
return 0;
}
#endif
LRESULT OnDock(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/)
{
LRESULT lRes=FALSE;
T* pThis=static_cast<T*>(this);
DFMHDR* pHdr=reinterpret_cast<DFMHDR*>(lParam);
switch(pHdr->code)
{
case DC_ADJUSTDRAGRECT:
lRes=pThis->AdjustDragRect(reinterpret_cast<DFDOCKRECT*>(pHdr));
break;
case DC_ACCEPT:
lRes=pThis->AcceptDock(reinterpret_cast<DFDOCKRECT*>(pHdr));
break;
case DC_DOCK:
lRes=pThis->Dock(reinterpret_cast<DFDOCKRECT*>(pHdr));
break;
case DC_UNDOCK:
lRes=pThis->Undock(pHdr);
break;
case DC_SETDOCKPOSITION:
lRes=pThis->SetDockingPosition(reinterpret_cast<DFDOCKPOS*>(pHdr));
break;
case DC_GETDOCKPOSITION:
lRes=pThis->GetDockingPosition(reinterpret_cast<DFDOCKPOS*>(pHdr));
break;
#ifdef DF_AUTO_HIDE_FEATURES
case DC_PINUP:
lRes=pThis->PinUp(reinterpret_cast<DFPINUP*>(pHdr));
break;
case DC_ISPINNED:
lRes=pThis->IsPinned(pHdr);
break;
#endif
}
return lRes;
}
protected:
CDWSettings m_settings;
CWndPackage m_vPackage;
CWndPackage m_hPackage;
CRect m_rcClient;
#ifdef DF_AUTO_HIDE_FEATURES
CAHManager m_ahManager;
#endif
#ifdef DF_FOCUS_FEATURES
CDockingFocusHandler m_focusHandler;
#endif
};
/////////////////CDockingSiteBasement
template <class T, class TBase = CWindow, class TWinTraits = CDockingSiteTraits>
class ATL_NO_VTABLE CDockingSiteBasement : public CWindowImpl<T, TBase, TWinTraits >
{
typedef CDockingSiteBasement<T, TBase, TWinTraits > thisClass;
public:
DECLARE_WND_CLASS(NULL)
CDockingSiteBasement():m_hWndClient(NULL)
{
}
protected:
BEGIN_MSG_MAP(thisClass)
MESSAGE_HANDLER(WM_SIZE, OnSize)
MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackground)
END_MSG_MAP()
LRESULT OnSize(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
{
if(wParam != SIZE_MINIMIZED)
{
T* pT = static_cast<T*>(this);
pT->UpdateLayout();
}
bHandled = FALSE;
return 1;
}
LRESULT OnEraseBackground(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
{
if(m_hWndClient != NULL)
return 1;
bHandled = FALSE;
return 0;
}
protected:
HWND m_hWndClient;
};
/////////////////CDockingSiteImpl
template < class T,
class TBase = CWindow,
class TWinTraits = CDockingSiteTraits,
class TBaseImpl = CDockingSiteBasement<T,TBase,TWinTraits> >
class CDockingSiteImpl:
public CDockingFrameImplBase< T, TBaseImpl ,TWinTraits >
{
typedef CDockingSiteImpl<T,TBase,TWinTraits,TBaseImpl> thisClass;
typedef CDockingFrameImplBase< T, TBaseImpl ,TWinTraits > baseClass;
public:
DECLARE_WND_CLASS(_T("CDockingSiteImpl"))
void UpdateLayout(BOOL bResizeBars = TRUE)
{
bResizeBars;// avoid level 4 warning
CRect rc;
T* pT = static_cast<T*>(this);
pT->GetClientRect(&rc);
CClientDC dc(m_hWnd);
#ifdef DF_AUTO_HIDE_FEATURES
m_ahManager.UpdateLayout(dc,rc);
m_ahManager.Draw(dc);
#endif
m_vPackage.UpdateLayout(rc);
m_vPackage.Draw(dc);
}
};
/////////////////CDockingFrameImpl
template < class T,
class TBase = CWindow,
class TWinTraits = CDockingFrameTraits >
class ATL_NO_VTABLE CDockingFrameImpl:
public CDockingFrameImplBase< T, CFrameWindowImpl< T ,TBase, TWinTraits> ,TWinTraits >
{
public:
DECLARE_WND_CLASS(_T("CDockingFrameImpl"))
};
/////////////////CMIDIDockingFrameImpl
template <class T,
class TBase = CMDIWindow,
class TWinTraits = CDockingFrameTraits >
class ATL_NO_VTABLE CMDIDockingFrameImpl :
public CDockingFrameImplBase< T, CMDIFrameWindowImpl< T ,TBase, TWinTraits> ,TWinTraits >
{
public:
DECLARE_WND_CLASS(_T("CMDIDockingFrameImpl"))
};
}//namespace dockwins
#endif // __WTL_DW__DOCKINGFRAME_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -