CPropertySheet procSheet("对话框");
procSheet.Create();
procSheet.ShowWindow(SW_SHOW);
Create中的默认参数第二个是风格,默认的话有四个标签,但都不起作用 ,这是为什么?
如果procSheet.DoModal();的话,默认的按扭都有效果。
如何在非模态对话框中设置自定义的按钮?和对应消息处理

解决方案 »

  1.   

    CPropertySheet::AddPage
    void AddPage( CPropertyPage *pPage );要加入页.
      

  2.   

    对于用 Create 函数创建的无模式属性表,框架不创建命令按钮。除非想添加其他控件(如预览窗口)或显示无模式属性表,否则不必从 CPropertySheet 派生类。但该步骤对于无模式属性表是必需的,因为无模式属性表不包含任何可用于关闭属性表的默认控件。 
      

  3.   

    比如说QQ的那个查找功能,点击后出现的无模态属性表对话框,那个是怎么实现的,有点晕,这么说Create的无模态属性表对话框没有默认的关闭按钮,那要自己自己设置按钮的话又找不到CPropertySheet对应的对话框,该怎么办呢?
      

  4.   

    msdn中关于“CPropertySheet::AddPage”的一段
    When you add a property page using AddPage, the CPropertySheet is the parent of the CPropertyPage. To gain access to the property sheet from the property page, call CWnd::GetParent. 大意是property page可以通过GetParent得到其父窗口
      

  5.   

    这个问题搞定了,在CPropertySheet对应的派生类中,重载OnCommand函数
    具体代码如下:
    BOOL CFindDlg::OnCommand(WPARAM wParam, LPARAM lParam) 
    {
    // TODO: Add your specialized code here and/or call the base class

    if(HIWORD(wParam) == BN_CLICKED)      
    {      
    switch(LOWORD(wParam))
    {      
    case ID_APPLY_NOW:     //     Apply      
    PressButton(PSBTN_APPLYNOW);      
    return TRUE;      
    case IDCANCEL:      
    PressButton(PSBTN_CANCEL);
    DestroyWindow();      
    return TRUE;
    case ID_WIZFINISH:      
    PressButton(PSBTN_FINISH);
    DestroyWindow();      
    return TRUE;
    case IDHELP:      
    PressButton (PSBTN_HELP);      
    return TRUE;
    }      
    }       
    return CPropertySheet::OnCommand(wParam, lParam);
    }
      

  6.   

    技术可行,符合你的要求吗?更多内容敬请访问
    个人网站
    博客
    本人花了6个月的拙作<<深入浅出——Visual C++入门、进阶与应用实例 >>