zoukankan      html  css  js  c++  java
  • 一个卡对话框

    在最近的一个项目中使用视觉框架中,我需要一个对话框,总是存在重叠,其内容(子控件和布局)是变化的根据当前选择的视图或选项卡。而不是创建几个独立对话框,选择哪一个是可见的,我设计了一个所谓的卡片对话框。 卡对话框是一个空的标准对话框。它包含一个卡片列表(子对话框)。这取决于应用程序,一个卡片是可见的和启用。此外,卡对话框将调整大小的卡片。几个虚拟函数使程序员能够创建时初始化卡/销毁或(de)时激活。 步骤1: 创建一个空的对话框资源(这将是一个卡对话框)。大小并不重要。应该是空的(没有控制)以来客户区将会覆盖着一个卡片。使用ClassWizard创建相应的类。如果你打算使用它作为一个模态对话框然后创建OnInitDialog处理程序。 步骤2: 创建一个单独的对话框资源为每张卡片。对话框资源应该有以下方式: 子对话框 没有边界 没有标题 禁用 不可见的 地方任何控件,您需要在每个对话框。使用ClassWizard,创建一个对应的类。这个类必须来自TCard。TCard类没有任何特殊的实现。它唯一的目的是防止关闭卡当用户按下Enter键或逃避(TCard:位置()和TCard::虚()空表实现)。 步骤3: 初始化卡对话框中通过添加卡片。这是示例(一张非模态的对话框):隐藏,复制Code

    // Create a modeless card dialog
    m_CardDialog.Create(IDD_CARD_DIALOG, this);
    
    // Add cards
    m_CardDialog.AddCard(IDD_CARD_ONE);
    m_CardDialog.AddCard(IDD_CARD_TWO);
    m_CardDialog.AddCard(IDD_CARD_THREE);
    
    // Show third card
    m_CardDialog.ShowCard(IDD_CARD_THREE);
    
    // Show card dialog
    m_CardDialog.ShowWindow(SW_SHOW);

    如果TCardDialog:: ShowCard()是不叫的,卡对话框将显示第一个卡。 先前的示例使用TCardDialog:: AddCard()使用UINT国家免疫日添加卡是卡的资源ID)(国家免疫日。在这种情况下,AddCard()将调用一个虚拟函数TCardDialog:: CreateCard()使用UINT国家免疫日断言。所以,m_CardDialog必须一个类的实例来自TCardDialog实现函数CreateCard()以以下方式:隐藏,复制Code

    CDialog *CCardDialog::CreateCard(UINT nId)
    {
      switch (nId) {
        case IDD_CARD_ONE: return new CCardOne; // CCardOne is derived from TCard
        case IDD_CARD_TWO: return new CCardTwo; // CCArdTwo is derived from TCard
        ....
      }
          return NULL;
    }

    另一种解决方案是使用TCardDialog: AddCard(,使用UINT国家免疫日TCard * pDialog) pDialog在哪一个类的实例来自TCard和创建新的。实际创建对话框不应该。示例:隐藏,复制Code

    // Create a modeless card dialog
    m_CardDialog.Create(IDD_CARD_DIALOG, this);
    
    // Add cards
    m_CardDialog.AddCard(IDD_CARD_ONE, new CCardOne);
    m_CardDialog.AddCard(IDD_CARD_TWO, new CCardTwo);
    m_CardDialog.AddCard(IDD_CARD_THREE, new CCardThree);
    
    // Show third card
    m_CardDialog.ShowCard(IDD_CARD_THREE);
    
    // Show card dialog
    m_CardDialog.ShowWindow(SW_SHOW);

    在这种情况下,m_CardDialog可以TCardDialog因为虚函数的实例CreateCard()将不会被调用。 当创建一个卡片(对话框),TCardDialog将调用虚函数TCardDialog:: OnCardCreated()。卡被摧毁之前,TCardDialog将调用虚函数TCardDialog:: OnCardDestroyed()。这两个虚函数使派生类来执行初始化的卡片。 步骤4: 为了切换活动卡,调用以下函数:隐藏,复制Code

    m_CardDialog.ShowCard(IDD_CARD_TWO);

    您可以获得一个指向当前活动卡:隐藏,复制Code

    CDialog *pDialog = m_CardDialog.GetCard();

    TCardDialog: ShowCard()将调用虚函数TCardDialog:: CanShowCard()检查是否允许改变活动卡。活动卡一旦改变,TCardDialog将调用虚函数TCardDialog:: OnShowCard()首先为停用卡,然后激活。这两个虚函数允许一个派生类来执行更多任务相关的卡片。 我希望你会发现这门课很有用。 可以从http://www.scasoftware.com/下载最新版本。 本文转载于:http://www.diyabc.com/frontweb/news8112.html

  • 相关阅读:
    页面生命周期
    设计模式
    算法
    window服务
    Xml
    sql声明变量,及if else语句、while语句的用法
    SQL 使用临时表和临时变量完成update表字段实际案例
    SQL Server遍历表的几种方法
    node快速构建express项目
    词法分析
  • 原文地址:https://www.cnblogs.com/Dincat/p/13467547.html
Copyright © 2011-2022 走看看