怎样能在dialog上创建一个propertysheet
编号:QA004400
建立日期: 2001年9月10日 最后修改日期:2001年9月10日
所属类别:
flj:
操作系统: win2k
编程工具: visual c++ 6.0
问题: 在sdk中,怎样能在dialog上创建一个propertysheet?
或者如果使用tabctrl,对于多个页,每个页下的控件较多时,又如何调整控件?
水平: 中级
回答:
直接在对话框中使用tabctrl并不好,对于每个页下的控件较多的情况,很难调整控件。使用propertysheet是个好主义。你可以先在对话框中留出地方给propertysheet,然后在初始化对话框时将propertysheet设置为对话框的子控件。下面是一段MFC代码:
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_dlgPropSheet.AddPage(&m_stylePage);
m_dlgPropSheet.AddPage(&m_colorPage);
m_dlgPropSheet.AddPage(&m_fontPage);
m_dlgPropSheet.Create(this, WS_CHILD | WS_VISIBLE, 0);
m_dlgPropSheet.ModifyStyleEx (0, WS_EX_CONTROLPARENT);
m_dlgPropSheet.ModifyStyle( 0, WS_TABSTOP );
CRect rcSheet;
GetDlgItem( IDC_PROPSHEET )->GetWindowRect( &rcSheet );
ScreenToClient( &rcSheet );
m_dlgPropSheet.SetWindowPos( NULL, rcSheet.left-7, rcSheet.top-7, 0, 0,
SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE );
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
对于SDK方式,基本步骤相同,但注意两点:修改GWL_EXSTYLE时,除了添加WS_EX_CONTROLPARENT,还要去掉WS_EX_DLGMODALFRAME;修改GWL_STYLE时,删除WS_POPUPWINDOW | WS_DLGFRAME,添加WS_TABSTOP | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS。之所以多出这些,是因为MFC类会自动做这种处理。
flj问:
操作系统: win2k,wince
编程工具: visual c++ 6.0
问题: 李海,你好.非常感谢你上次的回答!在上次的回答中.对propertysheet窗口属性的设置在sdk中需要propertysheet窗口的HWND,而我用PropertySheet(&psh)来创建时,只能创建非模态时才能获得。在模态对话框下怎样得到?另外,在wince中是否适用?
我现在想完成的工作是这样的:在wince(win2k下的仿真)中,在指定的对话框上创建propertysheet。
水平: 中级
答:上面的方法同样适用于模态对话框,因为调用PropertySheet是在处理WM_INITDIALOG消息时,而你的消息处理函数的第一个参数不就是对话框的句柄吗?
此问题由李海回答。
| |
|
|
| |
|
|