CDialogBar中的属性页大小控制问题

huaboy408 2004-07-01 04:39:07
现在修改一些代码:
在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的区域大小是随着分辨率的不同而改变的,可是界面上的属性页大小没有改变,没有占满屏幕的高度,且属性页的控件重新排列后,有些就被遮住了看不到了。我不知道毛病出在哪里,请大家帮忙,看看上面的程序问题出现在什么地方?
...全文
274 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
huaboy408 2004-07-05
  • 打赏
  • 举报
回复
谢谢各位帮忙
huaboy408 2004-07-03
  • 打赏
  • 举报
回复
老大,我不大明白,怎么move里面的tab control,我没用过GetTabCtrl,多谢指教
蒋晟 2004-07-03
  • 打赏
  • 举报
回复
handle WM_SIZE and move window.
huaboy408 2004-07-02
  • 打赏
  • 举报
回复
TO: happyparrot(快乐鹦鹉)
要是程序一开始是我做的,我肯定采用最简单的方法,可是现在不好改了

TO:xxhfortrue(红叶) & TieShou(铁手) ( )
是不是重载CDialogBar派生类CDlgModTemplate的OnSize()?

To:codewarrior(会思考的草) ( )
m_sizeDefault的大小是控制DialogBar大小的吧?因为CDlgModTemplate就是继承自CDialogBar的,
m_controlSheet.SetWindowPos(NULL, 2 ,2 ,0 ,0 , SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE );这里建立属性页后设置的区域应该为是空的
DialogBar的大小应该跟SetBarStyle(this->GetBarStyle() |
CBRS_SIZE_DYNAMIC);是可以随着分辨率变化改变的
会思考的草 2004-07-02
  • 打赏
  • 举报
回复
当我把显示器分辨率调到1600×1200之后,发现属性页大小并没有随着CDialogBar的大小改变而改变

//你是怎么调整CDialogBar的大小的?
会思考的草 2004-07-02
  • 打赏
  • 举报
回复
如果你希望DialogBar 可以调整大小,建议你还是继承一个CDialogBar的派生类。
会思考的草 2004-07-02
  • 打赏
  • 举报
回复
Create的时候不要手动指定m_sizeDefault的大小,先用空的Rect创建属性页,然后用函数CalcInsideRect算出内部rect,再movewindow。
TieShou 2004-07-02
  • 打赏
  • 举报
回复

CRect rect;
GetWindowRect(rect);
ScreenToClient(&rect);
m_controlSheet.MoveWindow(rect);
放到OnSize()里面去做,应该就可以了。
xxhfortrue 2004-07-02
  • 打赏
  • 举报
回复
重载OnSize试试
快乐鹦鹉 2004-07-02
  • 打赏
  • 举报
回复
用属性页干啥。用CTabCtrl吧。有现成的。
huaboy408 2004-07-02
  • 打赏
  • 举报
回复
没人帮忙吗?各位老大帮忙看看啊
蒋晟 2004-07-02
  • 打赏
  • 举报
回复
属性页大小变化的时候没有move里面的tab control(可以用GetTabCtrl访问)
北狐狸 2004-07-02
  • 打赏
  • 举报
回复
up
huaboy408 2004-07-01
  • 打赏
  • 举报
回复
在线等待,解决了还可以加分,谢谢各位了

15,980

社区成员

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

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