CDialogBar中的属性页大小控制问题
现在修改一些代码:
在SDI界面上放了一个CDialogBar的工具条,上面放置属性页控件,类似MSDN左边的工具条。
在MainFrm中创建CDialogBar
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (!m_wndTemplate.Create(this, IDD_DIALOG_TEMPLATE,
CBRS_RIGHT,
IDD_DIALOG_TEMPLATE))
{
TRACE0("Failed to create dialog bar m_controlPanel\n");
return FALSE; // fail to create
}
}
然后在CDialogBar的派生类中创建属性页,并初始化大小
void CDlgModTemplate::InitDialogBarHandler(WORD wParam, DWORD lParam)
{
m_bApplyBodypart = TRUE;
m_bImpre=TRUE;
m_bDesc=TRUE;
m_bSImpose=FALSE;
m_strCurTempKey=_T("");
CRect rect;
GetWindowRect(rect);
ScreenToClient(&rect);
m_controlSheet.MoveWindow(rect);
m_controlSheet.m_Page1.MoveControl(rect);
UpdateData(FALSE);
}
int CDlgModTemplate::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialogBar::OnCreate(lpCreateStruct) == -1)
return -1 ;
// TODO: Add your specialized creation code here
// ---------
m_controlSheet.CommonConstruct(NULL, 0);
//创建属性页
if (!m_controlSheet.Create(this, WS_CHILD | WS_VISIBLE | DS_CONTEXTHELP | DS_3DLOOK))
{
TRACE0("Failed to create m_controlSheet\n");
return -1;
}
m_sizeDefault.cy = 600;//这里不知道是怎么操作CDialogBar的大小的
m_sizeDefault.cx = 200;
m_controlSheet.SetWindowPos(NULL, 2 ,2 ,0 ,0 , SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE );
// Info Bar Settings
SetBarStyle(this->GetBarStyle() |
CBRS_SIZE_DYNAMIC);
EnableDocking(CBRS_ALIGN_LEFT | CBRS_ALIGN_RIGHT);
SetWindowPos(NULL,
0, 0, m_sizeDefault.cx + 4, m_sizeDefault.cy + 4,
SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE );
// We post WM_INITDIALOGBAR message here to dialog bar
PostMessage (WM_INITDIALOGBAR, 0 , 0) ;
return 0 ;
}
当我把显示器分辨率调到1600×1200之后,发现属性页大小并没有随着CDialogBar的大小改变而改变
CRect rect;
GetWindowRect(rect);
ScreenToClient(&rect);
m_controlSheet.MoveWindow(rect);
而我用AfxMessageBox观察rect的区域大小是随着分辨率的不同而改变的,可是界面上的属性页大小没有改变,没有占满屏幕的高度,且属性页的控件重新排列后,有些就被遮住了看不到了。我不知道毛病出在哪里,请大家帮忙,看看上面的程序问题出现在什么地方?