vc层叠式窗体控件指南

豆豆网   技术应用频道   2007年06月14日    社区交流

内容摘要:本指南的目标读者为程序员新手,在开始之前,我想挑战你一下:即在不阅读本文的情况下先尝试自己开发这个控件。尽管这看起来可能会让人退缩或你可能不知道从哪里开始,它不是像你想像得那样难。

  下一个任务是写一个允许我们添加面板到控件上的public方法。这没有什么困难。我们使窗体对象的指针作为参数传递,并设置新的面板如其所显示的一样。

int CStackedWndCtrl::AddPane( CWnd* pwndRubric, CWnd* pwndContent )
{
   // 隐藏无论哪一个正在显示面板的内容窗体
   //我们将总是显示最近添加的面板的内容窗体
   for( int i = 0; i < m_arrPanes.GetSize(); i++ )
     if( m_arrPanes[ i ]->m_bOpen )
     m_arrPanes[ i ]->m_bOpen = FALSE;
   //创建一个新的面板结构
   PTDS_PANE pPane = new TDS_PANE;    
   if( pPane == NULL )
    {
    AfxMessageBox( "Failed to add a new pane to"
                " the stack.
Out of memory." );
    return -1;
    }
    // 拷贝指针到标题和内容窗体
    //同时,设置这个面板为打开状态
    pPane->m_pwndRubric = pwndRubric;
    pPane->m_pwndContent = pwndContent;
    pPane->m_bOpen = TRUE;
    // 添加该新面板到栈的尾部
    int iIndex = m_arrPanes.Add( pPane );
    // 重新排列栈
    RearrangeStack();
    // 返回新面板的索引号
    return iIndex;
}

  在我们担心排列和显示面板之前(如果你想要测试这个代码,只要参考RearrangeStack

  方法的调用 ),我们要确保在退出时该结构体被完全删除是非常重要的,以免内存泄漏。我们在析构器中执行该任务,如下所示:

作者:Franc Morales    责编:豆豆技术应用

正在加载评论...