在家里写个tab control,好无问题,可是到公司,移植代码立即有错。问题:tab control 被固定死了,随着主对话框不会动, 这是为什么? 发帖数次,依然没有解决问题,我精神快崩溃了望仗义大侠出手相救,感激不已。先看初始化对话框函数
BOOL CTargetStateDialog::OnInitDialog()
{
CDockableForm::OnInitDialog();
//将tab control控件与其他对话框关联起来(比如:目标轨迹对话框,目标注释对话框)
m_tabCtrl.InsertItem(0,_T("目标轨迹"));
m_tabCtrl.InsertItem(1,_T("目标注释"));
m_tabCtrl.InsertItem(2,_T("数据库相关操作")); m_targetTrackDlg->Create(IDD_TARGET_STATE_DIALOG,GetDlgItem(IDC_TARGET_STATE_TAB)); //&m_tabCtrl); //look
CRect rc; GetClientRect(&rc);
m_tabCtrl.MoveWindow(&rc); m_tabCtrl.GetClientRect(&rc);
rc.bottom-=30; m_tabCtrl.MoveWindow(&rc);
m_targetTrackDlg->ShowWindow(TRUE);
m_tabCtrl.SetCurSel(0); // //设置默认的选项卡 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CTargetStateDialog::OnSize(UINT nType, int cx, int cy)
{
CDockableForm::OnSize(nType, cx, cy);
//对tab control控件及主对话框上面的对话框进行处理wm_size消息
if(m_tabCtrl.GetSafeHwnd())
{
CRect rc; GetClientRect(&rc);
m_tabCtrl.MoveWindow(&rc); m_tabCtrl.GetClientRect(&rc);
rc.bottom-=30;
m_targetTrackDlg->MoveWindow(&rc);
}
}
效果图为: 有图有图有图 有图有真相,有图有真相
BOOL CTargetStateDialog::OnInitDialog()
{
CDockableForm::OnInitDialog();
//将tab control控件与其他对话框关联起来(比如:目标轨迹对话框,目标注释对话框)
m_tabCtrl.InsertItem(0,_T("目标轨迹"));
m_tabCtrl.InsertItem(1,_T("目标注释"));
m_tabCtrl.InsertItem(2,_T("数据库相关操作")); m_targetTrackDlg->Create(IDD_TARGET_STATE_DIALOG,GetDlgItem(IDC_TARGET_STATE_TAB)); //&m_tabCtrl); //look
CRect rc; GetClientRect(&rc);
m_tabCtrl.MoveWindow(&rc); m_tabCtrl.GetClientRect(&rc);
rc.bottom-=30; m_tabCtrl.MoveWindow(&rc);
m_targetTrackDlg->ShowWindow(TRUE);
m_tabCtrl.SetCurSel(0); // //设置默认的选项卡 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CTargetStateDialog::OnSize(UINT nType, int cx, int cy)
{
CDockableForm::OnSize(nType, cx, cy);
//对tab control控件及主对话框上面的对话框进行处理wm_size消息
if(m_tabCtrl.GetSafeHwnd())
{
CRect rc; GetClientRect(&rc);
m_tabCtrl.MoveWindow(&rc); m_tabCtrl.GetClientRect(&rc);
rc.bottom-=30;
m_targetTrackDlg->MoveWindow(&rc);
}
}
效果图为: 有图有图有图 有图有真相,有图有真相
SetWindowPos试一下这两个函数
m_ToolBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS |CBRS_FLYBY | CBRS_BORDER_BOTTOM );
//装载工具条资源
m_ToolBar.LoadToolBar(IDR_MAIN_TOOLBAR) ;
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); //添加选项卡
m_Tab.InsertItem(0, _T(" 目标轨迹 "));
//关联对话框,并且将IDC_TAB控件设为父窗口
m_Concord.Create(IDD_CONCORD_DIALOG,GetDlgItem(IDC_MAIN_TAB));
//获得IDC_TABMAIN客户区大小
CRect rs;
m_Tab.GetClientRect(&rs);
//调整子对话框在父窗口中的位置
rs.top+=22; //+下降
rs.bottom-=2; //-上升
rs.left+=1;
rs.right-=12;
//设置子对话框尺寸并移动到指定位置
m_Concord.MoveWindow(&rs);
//分别设置隐藏和显示
m_Concord.ShowWindow(TRUE);
//设置默认的选项卡
m_Tab.SetCurSel(0);
CDialog::OnSize(nType, cx, cy);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0 ); //工具栏
m_Resize.OnSize(cx,cy); //这是一个EasySize类,用于主窗口Tab的自动缩放。
//手动缩放Tab控件的各个标签页(对话框)
CRect rect;
GetClientRect( &rect );
if( IsWindowVisible() ) {
m_Concord.MoveWindow(rect.left+1, 21, rect.right-rect.left-218, cy-100, TRUE); //标签窗口一
}
//
//////////////////////////////////////////////////////////////////////#if !defined(AFX_RESIZECONTROL_H__5F3BB72F_1190_4B42_A57A_3BFC83AFC3C3__INCLUDED_)
#define AFX_RESIZECONTROL_H__5F3BB72F_1190_4B42_A57A_3BFC83AFC3C3__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "afxtempl.h"
typedef struct _tagResize
{
UINT ID;
CRect rt;
int type1;
int type2;
}tagResize;
enum{PK_TOP_LEFT,PK_TOP_RIGHT,PK_BOTTOM_LEFT,PK_BOTTOM_RIGHT};class CResizeControl
{
public:
void SetResize(UINT ID,int type1,int type2);
void OnSize(int cx,int cy);
void SetOwner(CWnd *pWnd);
CResizeControl();
virtual ~CResizeControl();private:
CWnd *m_pWnd;
CArray <tagResize, tagResize>m_arrResize;
CRect m_rtParent;};#endif // !defined(AFX_RESIZECONTROL_H__5F3BB72F_1190_4B42_A57A_3BFC83AFC3C3__INCLUDED_)
//关联对话框,并且将IDC_TAB控件设为父窗口
m_Concord.Create(IDD_CONCORD_DIALOG,GetDlgItem(IDC_MAIN_TAB));确保IDD_CONCORD_DIALOG是子对话框ID,IDC_MAIN_TAB为tab控件ID。