滚动字幕对话框






4.67/5 (6投票s)
1999年11月22日
2分钟阅读

82554

4191
在 MFC 下,以简单的方式实现滚动字幕。
引言
字幕对话框是一种整洁的方式,可以显示像电影中或某些 Microsoft 产品在按下隐藏键序列时弹出的滚动字幕窗口。
此对话框以用户定义的颜色和字体显示文本,并且还在滚动显示中显示位图! 您只需将希望出现在 CPP 文件中定义的静态数组中的文本输入,并使用用户定义的转义序列来指定不同的字体、颜色等。
您可以在大约 10 分钟内拥有一个漂亮的字幕窗口!
字幕循环播放,并再次回到开头,以实现永无止境的展示!
步骤
- 使用资源编辑器创建一个对话框,并将其样式设置为
WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION
。 在对话框上放置一个“确定”按钮,以便用户可以关闭对话框。 - 创建一个文本框作为字幕显示窗口(使其成为一个足够大的尺寸 :)。 将文本框命名为
IDC_DISPLAY_STATIC
(或者您喜欢的任何名称;但如果您使用不同的名称,则需要在提供的源代码中更改IDC_DISPLAY_STATIC
名称)。 - 使用 ClassWizard 为对话框生成类包装器。 为了本示例的目的,我们将使用 credits.cpp 和 credits.h 作为 ClassWizard 生成的文件,并将类名生成为
CCredits
。 将类基于CDialog
。 - 将以下数据成员添加到 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;
- 使用 ClassWizard 创建以下消息处理程序和函数
virtual void OnOK(); afx_msg void OnPaint(); virtual BOOL OnInitDialog(); afx_msg void OnTimer(UINT nIDEvent); afx_msg void OnDestroy();
- 将提供的 credits.cpp 文件中的函数剪切并粘贴到您新创建的函数中。
- 从另一个模块(例如您的“关于...”对话框)调用字幕对话框
CCredits dlgCredits; dlgCredits.DoModal();
玩得开心!