• 一个动画风格的对话框类


    介绍 我一直在使用Almond和Maunder的DrawWireRects函数,因为 我总是喜欢我的程序看起来很酷。这个功能很好,但是, 为了使用它,我需要重载OnCreate和OnDestroy函数 每个对话框类,我希望它被影响,有一些不便 关于直接重用DrawWireRects功能: 如果有很多(比方说5种)不同的对话框,我将在a中使用 项目,由于它们的功能不同,因此每个类都必须是一个新的类 我需要重载每个类中的OnCreate和OnDestroy函数 并添加一些其他成员,以补充动画效果。那些 会有很多重复的代码。除了动画对话框,我可能还需要不时地做一些调整, 例如,我想要一个类名为CMyDialog的对话框 然后接近它的右下角,然后几分钟后我 改变主意,让它靠近系统托盘…无论如何,我应该 能够通过简单的使用DrawWireRects来做这些事情,但是很快我就会发现尺寸 MyDialog.cpp生长 该项目中的其他对话框类也是如此。 如果有一个现有的类可以封装所有这些必要的东西就好了, 我可以从它派生我的类,它会替我做所有的苦差事。 这就是CAniDialog类的由来。 CAniDialog类 首先,这个类的核心和灵魂是DrawWireRects函数, 这是由阿蒙德和蒙德写的,所以信用在那里。我试着 保持这个功能尽可能完整,有必要做一些小改动, 然而,为了使它与其他班级成员很好地合作。 类CAniDialog派生自CDialog 这个类的目的是使使用动画对话框像使用一样简单 MessageBox函数,这是唯一需要的 由用户提供的是一个CPoint对象,它指定对话框应该从哪里弹出 如果要使用as_reference动画样式标志,请接近。 所有其他元素都有默认值,而且在大多数情况下,它们已经经过了优化,不需要更改。 CAniDialog类的公共方法 隐藏,收缩,复制Code

    // construction
    CAniDialog(UINT nDlgID, CWnd* pParent);
    CAniDialog(CPoint pt, UINT nDlgID, CWnd* pParent);
    
    // operation
    
    // access frame number
    UINT GetFrameNum() const;
    void SetFrameNum(UINT nFrames);
    
    // access animation speed
    UINT GetAniSpeed() const;
    void SetAniSpeed(UINT nMillSec);
    
    // access the reference point
    CPoint GetRefPt() const;
    void SetRefPt(CPoint pt);
    
    // access animation styles
    WORD GetOpenStyle() const;
    WORD GetCloseStyle() const;
    void SetAniStyles(WORD wOpenStyle, WORD wCloseStyle);
    WORD GetDispStyle() const;
    void SetDispStyle(WORD wDispStyle);
    
    // temporarily enable/disable animation
    void EnableAni(BOOL bEnable = TRUE);
    
    // check object status
    BOOL IsAniValid() const;

    动画风格 预定义的动画样式标志: 隐藏,收缩,复制Code

    // animation styles
    
    // animate from/to the refer point
    #define AS_REFER        0 
    
    // animate from/to center
    #define AS_CENTER       1 
    
    // animate from/to corners
    #define AS_TOPLEFT      2 
    
    #define AS_TOPRIGHT     3
    #define AS_BOTTOMLEFT   4
    #define AS_BOTTOMRIGHT  5
    
    // animate from/to sides
    #define AS_LEFT         6 
    #define AS_TOP          7
    #define AS_RIGHT        8
    #define AS_BOTTOM       9
    
    // animate from/to a random point inside of dialog
    #define AS_RANDOM      10 
    
    // define displaying style
    
    // call "DrawWireRects"
    #define DS_WIRE         0 
    // call "::DrawAnimatedRects"
    #define DS_CAPTION      1 

    如何使用 要使用CAniDialog类,你需要: 添加AniDialog.h和AniDialog.cpp到你的项目和 在需要的地方包括AniDialog.h。 使用资源编辑器创建一个新的对话框,在对话框上绘制任何控件 然后使用类向导为它创建一个新类,例如,命名新 类CMyDlg并让CDialog作为它的基类。转到mydll .h并使用代码编辑器的替换特性来 用CAniDialog替换整个文件中的所有CDialog。转到mydll .cpp并使用代码编辑器的“替换”特性来 用CAniDialog替换整个文件中的所有CDialog。在这一点上,你已经改变了底面 类的CMyDlg从CDialog到CAniDialog。 修改CMyDlg类的构造函数,使它看起来像这样: 隐藏,复制代码// CMyDlg(CWnd* pParent = NULL);/ /原始 CMyDlg(CPoint pt, CWnd* pParent = NULL);/ /现在 构造函数的主体就变成了这样:CMyDlg(CPoint pt, CWnd* pParent /*=NULL*/) : // CDialog(CMyDlg::IDD, pParent) //原件 CAniDialog(pt, CMyDlg::IDD, pParent) //现在 { / / {{AFX_DATA_INIT (CDemoPopupDlg) //注意:ClassWizard会添加 //这里的成员初始化 / /}} AFX_DATA_INIT } 就是这样!现在CMyDlg类已经准备好了。 在创建CMyDlg对象时,需要向它传递一个CPoint 对象,它告诉对话框从哪里弹出,从哪里靠近。 隐藏,复制Code

    // If you are going to use the AS_REFER flag, 
    // you must provide a valid CPoint.
    // If you are not going to use the AS_REFER flag, 
    // then the value of this CPoint
    // does not matter at all, in that case, 
    // just give it one so the compiler won't
    // complain.
    CPoint pt;
    
    // we are going to use the AS_REFER flag so 
    // we need a valid CPoint value.
    ::GetCursorPos(&pt); // fetch current cursor position
    
    CMyDlg dlg(pt);
    
    // optional
    // you can specify animation styles, displaying 
    // styles, animation speed, animation
    // frame numbers etc.
    
    // the dialog will pop up from you cursor
    dlg.SetAniStyles(AS_REFER, AS_CENTER); 
    
    // position and close inwards its own center
    dlg.DoModal(); // watch the animation!

    本文转载于:http://www.diyabc.com/frontweb/news3656.html

  • 相关阅读:
    关于Git的使用方法
    Python读取Excel数据
    用到的Dos命令总结 持续更新
    windows下使用Jenkins+Gitea持续集成
    HDFS概述(2)————Block块大小设置
    分布式文件系统比较出名的有HDFS  和 GFS
    c++里面有没有什么办法做到 判断某个给定的未知数是double类型还是int类型 呢?
    About HDFS blocks
    hadoop深入学习之SequenceFile
    使用RawComparator加速Hadoop程序
  • 原文地址:https://www.cnblogs.com/Dincat/p/13461255.html
Copyright © 2020-2023  润新知