高手救命!!

yaly 2000-08-19 09:30:00
// DevCoolBar.cpp : implementation file
//

#include "stdafx.h"
#include "mycool.h"
#include "DevCoolBar.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDevCoolBar

CDevCoolBar::CDevCoolBar():
m_clrBtnHilight(::GetSysColor(COLOR_BTNHILIGHT)),
m_clrBtnShadow(::GetSysColor(COLOR_BTNSHADOW))
{
m_sizeMin=CSize(32,32);
m_sizeHorz=CSize(200,200);
m_sizeVert=CSize(200,200);
m_sizeFloat=CSize(200,200);
m_bTracking=FALSE;
m_bInRecalcNC=FALSE;
m_cxEdge=6;
m_cxBorder=3;
m_cxGripper=20;
}

CDevCoolBar::~CDevCoolBar()
{
}

BOOL CDevCoolBar::Create(CWnd* pParentWnd,CTreeCtrl*pTree,CString &pTitle,UINT nID,DWORD dwStyle)
{
ASSERT_VALID(pParentWnd);
ASSERT(!((dwStyle & CBRS_SIZE_FIXED)&&(dwStyle & CBRS_SIZE_DYNAMIC)));
m_dwStyle = dwStyle;
m_dwStyle = (dwStyle & CBRS_ALL);

if(nID == AFX_IDW_TOOLBAR)
m_dwStyle and =CBRS_HIDE_INPLACE;

dwStyle &=~CBRS_ALL;

CString wndclass = AfxRegisterWndClass(CS_DBLCLKS and IDC_ARROW,LoadCursor(NULL,IDC_ARROW),
CreateSolidBrush(GetSysColor(COLOR_BTNFACE)),0);

if(!CWnd::Create(wndclass,pTitle,dwStyle,CRect(0,0,0,0),
pParentWnd,0))
return FALSE;
m_pTree = pTree;
DWORD dwTreeStyle= WS_VISIBLE and WS_CHILD and TVS_HASLINES and
TVS_LINESATROOT and TVS_HASBUTTONS;
pTree->Create(dwTreeStyle,CRect(0,0,100,100),this,ID_TREE_BOX);
SetWindowLong(pTree->GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(pTree->GetSafeHwnd(),GWL_EXSTYLE) and WS_EX_CLIENTEDGE);
CRect rc;
m_pTree->GetWindowRect(rc);
m_sizeHorz=m_sizeVert=m_sizeFloat=rc.Size();
m_sizeHorz.cy+=m_cxEdge+m_cxBorder;
m_sizeVert.cx+=m_cxEdge+m_cxBorder;
return TRUE;
}

BOOL CDevCoolBar::IsHorz() const
{
return (m_nDockBarID==AFX_IDW_DOCKBAR_TOP and and m_nDockBarID==AFX_IDW_DOCKBAR_BOTTOM);
}

CSize CDevCoolBar::CalcDynamicLayout(int nLength,DWORD dwMode)
{ if (dwMode&(LM_HORZDOCK and LM_VERTDOCK))
{
SetWindowPos(NULL,0,0,0,0,
SWP_NOSIZE and SWP_NOMOVE and SWP_NOZORDER and
SWP_NOACTIVATE and SWP_FRAMECHANGED);
m_pDockSite->RecalcLayout();
return CControlBar::CalcDynamicLayout(nLength,dwMode);
}
if(dwMode&LM_MRUWIDTH)
return m_sizeFloat;
if(dwMode&LM_COMMIT)
{
m_sizeFloat.cx=nLength;
return m_sizeFloat;
}
if(dwMode&LM_LENGTHY)
return CSize(m_sizeFloat.cx,m_sizeFloat.cy=max(m_sizeMin.cx,nLength));
else
return CSize(max(m_sizeMin.cx,nLength),m_sizeFloat.cy);
}

CSize CDevCoolBar::CalcFixedLayout(BOOL bStretch,BOOL bHorz)
{
CRect rc;
m_pDockSite->GetControlBar(AFX_IDW_DOCKBAR_TOP)->GetWindowRect(rc);
int nHorzDockBarWidth = bStretch?32767:rc.Width()+4;
m_pDockSite->GetControlBar(AFX_IDW_DOCKBAR_LEFT)->GetWindowRect(rc);
int nVertDockBarHeight=bStretch?32767:rc.Height()+4;
if(IsFloating())
return m_sizeFloat;
else if(bHorz)
return CSize(nHorzDockBarWidth,m_sizeHorz.cy);
else
return CSize(m_sizeVert.cx,nVertDockBarHeight);
}
void CDevCoolBar::OnUpdateCmdUI(class CFrameWnd *pTarget,int bDisableIfNoHndler)
{
UpdateDialogControls(pTarget,bDisableIfNoHndler);
}
BEGIN_MESSAGE_MAP(CDevCoolBar, CControlBar)
//{{AFX_MSG_MAP(CDevCoolBar)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CDevCoolBar message handlers
======================================================================================
#if !defined(AFX_DEVCOOLBAR_H__1E0E5BD4_75A8_11D4_8FFC_B90C5D33AB4D__INCLUDED_)
#define AFX_DEVCOOLBAR_H__1E0E5BD4_75A8_11D4_8FFC_B90C5D33AB4D__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// DevCoolBar.h : header file
//

/////////////////////////////////////////////////////////////////////////////
// CDevCoolBar window

class CDevCoolBar : public CControlBar
{

public:
BOOL IsHorz() const;
virtual BOOL Create(CWnd* pParentWnd,CTreeCtrl *pTree,CString &pTitle,UINT nID,DWORD
dwStyle = WS_CHILD and WS_VISIBLE and CBRS_LEFT and CBRS_SIZE_DYNAMIC);
virtual CSize CalcFixedLayout(BOOL bStretch,BOOL bHorz);
virtual CSize CalcDynamicLayout(int nLength,DWORD dwMode);
virtual void OnUpdateCmdUI(CFrameWnd* pTarget,BOOL bDisableIfNoHndle);

CDevCoolBar();


// Attributes
public:

// Operations
public:

// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CDevCoolBar)
//}}AFX_VIRTUAL

// Implementation
public:
virtual ~CDevCoolBar();

// Generated message map functions

protected:
CTreeCtrl* m_pTree;
CSize m_sizeMin;
CSize m_sizeHorz;
CSize m_sizeVert;
CSize m_sizeFloat;
CRect m_rectBorder;
CRect m_rectTracker;
UINT m_nDockBarID;
CPoint m_ptOld;
BOOL m_bTracking;
BOOL m_bInRecalcNC;
int m_cxEdge;
CRect m_rectUndock;
CRect m_rectClose;
CRect m_rectGripper;
int m_cxGripper;
int m_cxBorder;
// CDockContext m_pDockContext;
//{{AFX_MSG(CDevCoolBar)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
const COLORREF m_clrBtnHilight;
const COLORREF m_clrBtnShadow;
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_DEVCOOLBAR_H__1E0E5BD4_75A8_11D4_8FFC_B90C5D33AB4D__INCLUDED_)
=====================================================================================

按照书上的例题打的COOLBARCLASS,此类实现功能:类似VC6的WORKSPACE的样子.
现在的问题是:此类能用,但是形成不了自定义的工作区,只能显示一小白条,
其余部分全被挡住,单改变窗口大小,此工作区能出来.请各位大虾帮忙看一下,下地谢过.问题回答后,分数奉上决不食言.
...全文
109 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Holly 2000-08-19
  • 打赏
  • 举报
回复
不知你如何用的!
我将你的代码使用了一下,略微修改就成功了!
修改如下:
(不知有何内容导致无法贴上,邮件给你)
Sniper 2000-08-19
  • 打赏
  • 举报
回复
找个地方Invalidate()一下。
yaly 2000-08-19
  • 打赏
  • 举报
回复
holly:
我没收到你的邮件,您的意思是代码没有问题吗.

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧