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

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

结贴快,给分多,顶者有分。
...全文
192 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
i_noname 2005-08-18
  • 打赏
  • 举报
回复
写注册表:
RegOpenKeyEx
RegCreateKeyEx
RegSetValueEx
读:
RegOpenKeyEx
RegQueryValueEx
i_noname 2005-08-18
  • 打赏
  • 举报
回复
SetWindowPos就可以啊。
放在注册表还不如保存在文件中呢。
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;

}
goodboyws 2005-08-18
  • 打赏
  • 举报
回复
重载CalcFixedLayout和CalcDynamicLayout
Kaile 2005-08-18
  • 打赏
  • 举报
回复
继承关系:


CGuiOutPut m_OutControl;

class CGuiOutPut : public CGuiControlBar

class GUILIBDLLEXPORT CGuiControlBar : public CControlBar
Kaile 2005-08-18
  • 打赏
  • 举报
回复
请看代码:

这是希望控制大小的窗口的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);

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

teli_eurydice 2005-08-18
  • 打赏
  • 举报
回复
up
goodboyws 2005-08-18
  • 打赏
  • 举报
回复
在Floate状态下, CControlbar的父窗口是CDockBar, CDockBar的父窗口是一个叫CMiniDockFrameWnd的类,改变CMiniDockFrameWnd的位置才可以改变CControlbar的位置

在Dock状态下, CControlbar的父窗口是CDockBar, CDockBar的父窗口是CFrameWnd, 位置是自动安排的

仔细看MFC的代码就知道了
goodboyws 2005-08-18
  • 打赏
  • 举报
回复
CControlbar的大小应该不需要指定,而是由他的内容决定的。重载CalcFixedLayout和CalcDynamicLayout可以改变他的大小
dirdirdir3 2005-08-18
  • 打赏
  • 举报
回复
加了SetRegistryKey("llt");之后
在app中直接用
WriteProfileInt;
WriteProfileString:
...
等来写入。
GetProfileInt;
...
等来读出。
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, 以后可以任意调整,有办法吗?

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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