mfc界面排版问题

xyh79639981 2011-08-09 02:00:14
我做了2个停靠窗体。但是停靠在同一位置(例如界面底部)时,出现的是上下情况,也就是说一个窗体在上面,另一个在下面。现在我向使他们出现左右情况,一个在左边一个在右边,而且是同一高度,该怎么做呢?

只有50分了,请各位帮帮忙!
...全文
383 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Aking5018 2011-08-09
  • 打赏
  • 举报
回复
哦~哦~~~这样~~~~~
至善者善之敌 2011-08-09
  • 打赏
  • 举报
回复
这个需要自己调位置了

放我以前的代码

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// create a view to occupy the client area of the frame
if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
{
TRACE0("Failed to create view window\n");
return -1;
}

HICON m_hIcon;
//在MainFrm的OnCreate()里
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

//1.初始化变量
//m_psockServer=new CTCPSocket(TCP_SOCKET_SERVER);
//m_psockClient=new CTCPSocket(TCP_SOCKET_CLIENT);
//if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
// | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
// !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
//{
// TRACE0("Failed to create toolbar\n");
// return -1; // fail to create
//}

//去掉标题栏及其他样式
// SetWindowLong(this->m_hWnd,GWL_STYLE,0);

//去掉边框及其他样式
SetWindowLong(this->m_hWnd,GWL_EXSTYLE,0);

//if (!m_wndStatusBar.Create(this) ||
// !m_wndStatusBar.SetIndicators(indicators,
// sizeof(indicators)/sizeof(UINT)))
//{
// TRACE0("Failed to create status bar\n");
// return -1; // fail to create
//}
/////////////创建控制条///////////////
if (!m_wndMyBar1.Create(_T("我的控制条1"), this, CSize(150,260),TRUE,123)) //原来176
{
TRACE0("Failed to create mybar\n");
return -1;
}
if (!m_wndMyBar2.Create(_T("我的控制条2"), this,CSize(100,105),TRUE,124))
{
TRACE0("Failed to create mybar\n");
return -1;
}
if (!m_wndMyBar3.Create(_T("我的控制条3"), this,CSize(496,200),TRUE,125)) //原来620 ,300
{
TRACE0("Failed to create mybar\n");
return -1;
}
if (!m_wndMyBar4.Create(_T("我的控制条4"), this,CSize(750,105),TRUE,126)) //原来960,105
{
TRACE0("Failed to create mybar\n");
return -1;
}


m_TabCtrl.Create(WS_CHILD|WS_VISIBLE,CRect(0,0,100,100),&m_wndMyBar3,128);
m_TabCtrl2.Create(TCS_DOWN|WS_CHILD|WS_VISIBLE,CRect(0,0,100,100),&m_wndMyBar2,126);

/////////////创建仿QQ抽屉////////////////
if (!m_wndOutlookBar.Create(WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN, CRect(0,0,0,0),
&m_wndMyBar1, 123, OBS_XT_DEFAULT))
{
TRACE0("Failed to create outlook bar.");
return FALSE;
}
// Add items to the outlook bar.
m_wndOutlookBar.SetBackColor(RGB(0xe6,0xe6,0xfa));//(RGB(0x3a,0x6e,0xa5));
m_wndOutlookBar.SetTextColor(RGB(0x00,0x00,0x00));



/////////////这一段代码创建树型控件////////////
if (!m_RichEdit.Create(//WS_CHILD|WS_VISIBLE|
WS_VSCROLL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER|ES_MULTILINE|ES_READONLY|ES_WANTRETURN|TVS_LINESATROOT,

CRect(0, 0, 0, 0), &m_TabCtrl, IDC_MYTREECTRL))
{
TRACE0("Failed to create instant bar child\n");
return -1;
}
m_RichEdit.ModifyStyleEx(0, WS_EX_CLIENTEDGE);
m_RichEdit.SetType(CHATLOG);

if (!m_RichEdit1.Create(//WS_CHILD|WS_VISIBLE|
WS_VSCROLL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER|ES_MULTILINE|ES_READONLY|ES_WANTRETURN|TVS_LINESATROOT,

CRect(0, 0, 0, 0), &m_TabCtrl, 61205))
{
TRACE0("Failed to create instant bar child\n");
return -1;
}
m_RichEdit1.ModifyStyleEx(0, WS_EX_CLIENTEDGE);
m_RichEdit1.SetType(CHATLOG);

if (!m_RichEdit2.Create(//WS_CHILD|WS_VISIBLE|
WS_VSCROLL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER|ES_MULTILINE|ES_READONLY|ES_WANTRETURN|TVS_LINESATROOT,

CRect(0, 0, 0, 0), &m_TabCtrl, 61206))
{
TRACE0("Failed to create instant bar child\n");
return -1;
}
m_RichEdit2.ModifyStyleEx(0, WS_EX_CLIENTEDGE);
m_RichEdit2.SetType(CHATLOG);


if(!m_SendEdit.Create(WS_VSCROLL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|TVS_LINESATROOT,CRect(0,0,0,0),&m_wndMyBar4,1102))
return -1;
m_SendEdit.ModifyStyleEx(0,WS_EX_CLIENTEDGE);


m_TabCtrl.AddPage(&m_RichEdit,L"JBT群聊... ",IDI_ICON1);
m_TabCtrl.AddPage(&m_RichEdit1,L"JBT私聊... ",IDI_ICON2);
m_TabCtrl.AddPage(&m_RichEdit2,L"小组公告... ",IDI_ICON3);
// m_TabCtrl.AddPage(&m_RichEdit,L"JBT私聊... ",IDI_ICON2);
m_TabCtrl.UpdateWindow();

// m_RichEdit.SubclassWindow(m_sendEditCtrl.GetSafeHwnd());

//m_TabCtrl2.AddPage(&m_func,IDD_BASEF," 基本设置 ",IDI_ICON6);
m_TabCtrl2.AddPage(RUNTIME_CLASS(base_func),IDD_BASEF,L" 基本功能 ",IDI_ICON4);
m_TabCtrl2.AddPage(RUNTIME_CLASS(FileAndVOL),IDD_FILE,L"传输功能 ",IDI_ICON5);
m_TabCtrl2.AddPage(RUNTIME_CLASS(PortSet),IDD_COMMSET,L"通讯设置 ",IDI_ICON6);
m_TabCtrl2.UpdateWindow();
///////////////停靠控制///////////////////
m_wndMyBar1.SetBarStyle(m_wndMyBar1.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_wndMyBar2.SetBarStyle(m_wndMyBar2.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_wndMyBar3.SetBarStyle(m_wndMyBar3.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_wndMyBar4.SetBarStyle(m_wndMyBar4.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
// m_wndMyBar5.SetBarStyle(m_wndMyBar5.GetBarStyle() |
// CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
// m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
m_wndMyBar1.EnableDocking(CBRS_ALIGN_ANY);
m_wndMyBar2.EnableDocking(CBRS_ALIGN_ANY);
m_wndMyBar3.EnableDocking(CBRS_ALIGN_ANY);
m_wndMyBar4.EnableDocking(CBRS_ALIGN_ANY);
// m_wndMyBar5.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY );
// FloatControlBar (&m_wndMyBar4, CPoint (400, 200));
// DockControlBar(&m_wndToolBar);

DockControlBar(&m_wndMyBar3, AFX_IDW_DOCKBAR_LEFT);
DockControlBar(&m_wndMyBar1, AFX_IDW_DOCKBAR_LEFT);
DockControlBar(&m_wndMyBar2, AFX_IDW_DOCKBAR_BOTTOM);
// DockControlBar(&m_wndMyBar5, AFX_IDW_DOCKBAR_BOTTOM);
DockControlBar(&m_wndMyBar4, AFX_IDW_DOCKBAR_LEFT);

// DockControlBarLeftOf(&m_wndMyBar3, &m_wndMyBar1);

DockControlBarLeftOf(&m_wndMyBar4, &m_wndMyBar2);
////////使浮动与停靠显示相同的头部////

#ifdef _SCB_REPLACE_MINIFRAME
m_pFloatingFrameClass = RUNTIME_CLASS(CSCBMiniDockFrameWnd);
#endif //_SCB_REPLACE_MINIFRAME

InitializeOutlookBar();

//删除原始菜单栏
CMenu *pMenu = GetMenu();
if (NULL!=pMenu)
{
DelAllMenu(pMenu->GetSafeHmenu());
}

CenterWindow( );

//m_RichEdit.AddMessageUser(_T("海洋之心"),RGB(0,110,254));
//m_RichEdit.AddMessgaeText(_T("欢迎使用静态表情控件CRichEditCtrlEx扩展类,更多信息在http://blog.csdn.net/akof1314无幻博客"),_T("宋体"),9,false,false,false,RGB(0,0,0),&m_BmpPicker);



return 0;
}

void CMainFrame::DockControlBarLeftOf(CCoolBar* Bar,CCoolBar* LeftOf)
{ //设置工具条并列停靠在同一条边上

CRect rect; //矩形区域定义
DWORD dw;
UINT n=0;
RecalcLayout();//重新显示
LeftOf->GetWindowRect(&rect);
// rect.OffsetRect(1,0);//设置偏移值以停靠在同一边上
rect.OffsetRect(0,1);
dw=LeftOf->GetBarStyle();
n=(dw&CBRS_ALIGN_TOP)?AFX_IDW_DOCKBAR_TOP:n;
n=(dw&CBRS_ALIGN_BOTTOM&&n==0)?AFX_IDW_DOCKBAR_BOTTOM:n;
n=(dw&CBRS_ALIGN_LEFT&&n==0)?AFX_IDW_DOCKBAR_LEFT:n;
n=(dw&CBRS_ALIGN_RIGHT&&n==0)?AFX_IDW_DOCKBAR_RIGHT:n;
DockControlBar(Bar,n,&rect);
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs

/*cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE
| WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX;*/

cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
cs.lpszClass = AfxRegisterWndClass(0);
cs.style&=~WS_THICKFRAME;//禁止用户改变窗口大小
cs.style&=~WS_MAXIMIZEBOX;//禁止用户改变放大窗口
cs.cx=650; //原来800
cs.cy=450; //原来500
return TRUE;
}


xyh79639981 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xyh79639981 的回复:]
引用 5 楼 babilife 的回复:
是单文档分割窗体?还是自己动态创建的窗体?


单文档
[/Quote]

应该是单文档自己动态创建的窗体(停靠窗体时自己创建的)
xyh79639981 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kkrmr 的回复:]
创建停靠窗口的时候,一个LEFT,一个RIGHT停靠,可以吗
[/Quote]

停靠窗体的我已经弄出来了,一右边,一底部,但是都停靠在底部的时候就出现,我问的那种情况了,我向让他们在同一水平线上,一左一右的分布
xyh79639981 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 babilife 的回复:]
是单文档分割窗体?还是自己动态创建的窗体?
[/Quote]

单文档
kkrmr 2011-08-09
  • 打赏
  • 举报
回复
创建停靠窗口的时候,一个LEFT,一个RIGHT停靠,可以吗
至善者善之敌 2011-08-09
  • 打赏
  • 举报
回复
是单文档分割窗体?还是自己动态创建的窗体?
xyh79639981 2011-08-09
  • 打赏
  • 举报
回复
能不能说的详细点,小弟是新手,能给点这方面的列子最好,发到我邮箱或者上传给我个连接方式,先谢谢各位了,迷茫的很 121723391@qq.com
gz_qmc 2011-08-09
  • 打赏
  • 举报
回复
重载框架窗口的RecalcLayout智能分配位置和空间
东莞某某某 2011-08-09
  • 打赏
  • 举报
回复
对 获得主窗体的坐标后 再使用SetWindowsPos摆置下
無_1024 2011-08-09
  • 打赏
  • 举报
回复
说一下思路吧 用setwindowpos重置位置 非模式窗口创建

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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