一个窗口从继承CControlBar继承而来,创建时如何指定它的大小?另外程序关闭时如何取得它的位置大小?

Kaile 2005-08-18 12:18:35
有一个窗口,继承CControlBar,希望得到VC6中的output窗口的效果,现在创建时不知道如何指定它的大小,另外想程序关闭时取得它的位置和大小信息保存到注册表,下次启动恢复原样,该如何实现?
请看代码:

这是希望控制大小的窗口的OnCreate代码,窗口中只有一个listcontrol

int CGuiOutPut::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CGuiControlBar::OnCreate(lpCreateStruct) == -1)
return -1;

if (!m_TabSolExplorer.Create(WS_VISIBLE|WS_CHILD,CRect(0,0,0,0),this,0x9999))
return -1;

CFont m_Font;
m_Font.CreateStockObject (DEFAULT_GUI_FONT);
CRect rectClient (0, 0, lpCreateStruct->cx, lpCreateStruct->cy);
const DWORD dwStyle = LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL;

m_listControl.Create(WS_CHILD|WS_VISIBLE|LVS_REPORT,CRect(0,0,1000,1000), &m_TabSolExplorer, 0);
m_listControl.SetFont (&m_Font);
m_listControl.SetOwner (this);
CRect rect;
m_listControl.GetClientRect(&rect);
LV_ITEM lvi;
TCHAR szItem[256];
TCHAR szCol[256];
lvi.mask = LVIF_TEXT;


m_TabSolExplorer.SetImageList(IDB_DBPROJECTS, 16,8, RGB (255, 0, 0));
m_TabSolExplorer.Addtab(&m_listControl,"当前步",6);
SetIcon(IDB_BITMAPHELP,16,5,RGB(255,0,0),3);
return 0;
}

以下是mainframe.cpp中的OnCreate代码
if (!m_OutControl.Create(_T("高级控制"),WS_CHILD | WS_VISIBLE, this, 0x997))
{
TRACE0("Failed to create m_OutControl\n");
return -1;
}
m_OutControl.SetBarStyle(m_OutControl.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_OutControl.EnableDocking(CBRS_ALIGN_ANY);
//m_OutControl.SetMenuContext(IDR_MENUTOOLBARS);
DockControlBar(&m_OutControl, AFX_IDW_DOCKBAR_RIGHT);

现在可以停靠在右边,但大小每次都是固定的,不能调整,晕死。


继承关系:


CGuiOutPut m_OutControl;

class CGuiOutPut : public CGuiControlBar

class GUILIBDLLEXPORT CGuiControlBar : public CControlBar


结贴快,给分多,顶者有分。
...全文
176 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodboyws 2005-08-18
  • 打赏
  • 举报
回复
CSize CGuiOutPut::CalcFixedLayout(BOOL bStretch, BOOL bHorz)
{
CSize size;
size.cx = 200
size.cy = 20;
return size;
}

CSize CGuiOutPut::CalcDynamicLayout(int, DWORD nMode)
{
CSize size;
size.cx = 200
size.cy = 20;
return size;

}

Kaile 2005-08-18
  • 打赏
  • 举报
回复
CreateEx里应该如何写?
newbiestar 2005-08-18
  • 打赏
  • 举报
回复
或者在你的派生类的构造函数里面调用CControlBar::SetBorders,此时你的类对象构造已经完成了。
newbiestar 2005-08-18
  • 打赏
  • 举报
回复
这个需要靠CWnd的CreateEx成员来完成,直接从CControlBar应该是没有办法完成的
lixiaosan 2005-08-18
  • 打赏
  • 举报
回复
http://www.datamekanix.com/sizecbar/
Kaile 2005-08-18
  • 打赏
  • 举报
回复
我是这样做的:
CSize CGuiOutPut::CalcDynamicLayout(int nLength, DWORD nMode)
{
CSize size;
size = CControlBar::CalcDynamicLayout(nLength, nMode);
if(size.cx < 500) size.cx = 500;
return size;

}

这样,启动时大小为500,也可以动态调整了,不过不能小于500。

我想启动时设为500, 以后可以任意调整,有办法吗?

16,472

社区成员

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

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

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