65.9K
CodeProject 正在变化。 阅读更多。
Home

滚动字幕对话框

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (6投票s)

1999年11月22日

2分钟阅读

viewsIcon

82554

downloadIcon

4191

在 MFC 下,以简单的方式实现滚动字幕。

Scrolling Credits Screenshot

引言

字幕对话框是一种整洁的方式,可以显示像电影中或某些 Microsoft 产品在按下隐藏键序列时弹出的滚动字幕窗口。

此对话框以用户定义的颜色和字体显示文本,并且还在滚动显示中显示位图! 您只需将希望出现在 CPP 文件中定义的静态数组中的文本输入,并使用用户定义的转义序列来指定不同的字体、颜色等。

您可以在大约 10 分钟内拥有一个漂亮的字幕窗口!

字幕循环播放,并再次回到开头,以实现永无止境的展示!

步骤

  1. 使用资源编辑器创建一个对话框,并将其样式设置为 WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION。 在对话框上放置一个“确定”按钮,以便用户可以关闭对话框。
  2. 创建一个文本框作为字幕显示窗口(使其成为一个足够大的尺寸 :)。 将文本框命名为 IDC_DISPLAY_STATIC(或者您喜欢的任何名称;但如果您使用不同的名称,则需要在提供的源代码中更改 IDC_DISPLAY_STATIC 名称)。
  3. 使用 ClassWizard 为对话框生成类包装器。 为了本示例的目的,我们将使用 credits.cppcredits.h 作为 ClassWizard 生成的文件,并将类名生成为 CCredits。 将类基于 CDialog
  4. 将以下数据成员添加到 credits.h 文件中(或从提供的 credits.h 文件中复制并粘贴它们)
    #define DISPLAY_TIMER_ID  150   timer id
    
    RECT    m_ScrollRect,r;    // rect of Static Text frame
    int      nArrIndex, nCounter;// work ints
    CString    m_szWork;// holds display line
    BOOL     m_bFirstTime;// first time boolean
    BOOL     m_bDrawText;// drawing text or bitmap?
    int      nClip;// clip amount
    int      nCurrentFontHeight;// current font height
    
    CWnd*    m_pDisplayFrame; // output display wnd
    
    CBitmap    m_bmpPIE;
    CBitmap    m_bmpWork;
    CBitmap* pBmpOld;
    CBitmap* m_bmpCurrent;
    
    HBITMAP  m_hBmpOld;
    
    CSize     m_size;
    CPoint     m_pt;
    BITMAP     m_bmpInfo;
    CDC     m_dcMem;
    BOOL     m_bProcessingBitmap;
  5. 使用 ClassWizard 创建以下消息处理程序和函数
    virtual void OnOK();
    afx_msg void OnPaint();
    virtual BOOL OnInitDialog();
    afx_msg void OnTimer(UINT nIDEvent);
    afx_msg void OnDestroy();
  6. 将提供的 credits.cpp 文件中的函数剪切并粘贴到您新创建的函数中。
  7. 从另一个模块(例如您的“关于...”对话框)调用字幕对话框
    CCredits dlgCredits;
    dlgCredits.DoModal();

玩得开心!

© . All rights reserved.