VS2012下新建MFC单文档工程,添加C++类EffectDisplay.
在EffectDisplay.h中添加
//显示特效枚举
enum EffectDisplayType
{
EDT_SCANDOWN = 0, //向下扫描
EDT_VSCAN, //垂直双重扫描
EDT_MOVERIGHT, //向右移动
EDT_HSMOVE, //水平双重移动
EDT_VBLIND, //垂直百叶窗
EDT_HBLIND, //水平百叶窗
EDT_VRASTER, //垂直栅条
EDT_HRASTER, //水平栅条
EDT_MOSAIC, //马赛克
EDT_RAINDROP, //雨滴
EDT_NONE, //无特效
EDT_RAND //随机特效
};
class EffectDisplay
{
public:
static int s_nOffsetX; //图像在内存CDC中的x偏移量
static int s_nOffsetY; //图像在内存CDC中的y偏移量
static int s_nPicWidth; //图像的宽度
static int s_nPicHeight; //图像的高度
static int s_nCDCWidth; //内存CDC的宽度
static int s_nCDCHeight; //内存CDC的高度
};
在EffectDisplay.cpp中添加
#include <cmath>
//静态成员遍历初始化
int EffectDisplay::s_nOffsetX = 0;
int EffectDisplay::s_nOffsetY = 0;
int EffectDisplay::s_nPicWidth = 0;
int EffectDisplay::s_nPicHeight = 0;
int EffectDisplay::s_nCDCWidth = 0;
int EffectDisplay::s_nCDCHeight = 0;
具体相应实现特效的方法之后再添加。
在“视图”菜单项中添加一个菜单项,ID为ID_VIEW_CONTROL,Caption属性为“控制窗口(&C)”
插入分隔符,然后添加一个弹出菜单,Caption属性为“图像(&I)”,为其添加子菜单,如下图
ID | Caption | Prompt |
ID_IMAGE_PREV | 上一张\tPage Up | 上一张\n 上一张 |
ID_IMAGE_NEXT | 下一张\tPage Down | 下一张\n 下一张 |
ID_IMAGE_FIRST | 第一张\tHome | 第一张\n 第一张 |
ID_IMAGE_LAST | 最后一张\tEnd | 最后一张\n 最后一张 |
添加一个“显示模式”的新菜单
ID | Caption | Prompt |
ID_MODE_NORMAL | 原始大小 | 原始大小\n 原始大小 |
ID_MODE_WIDTH | 适合宽度 | 适合宽度\n 适合宽度 |
ID_MODE_HEIGHT | 适合高度 | 适合高度\n 适合高度 |
ID_MODE_SCREEN | 适合屏幕 | 适合屏幕\n 适合屏幕 |
ID | Caption | Prompt |
ID_EFFECT_NONE | 无 | 不显示特效 |
ID_EFFECT_RAND | 随机 | 以随机方式显示特效 |
ID_EFFECT_SCANDOWN | 向下扫描 | 适合高度\n 适合高度 |
ID_EFFECT_VSCAN | 垂直双重扫描 | 适合屏幕\n 适合屏幕 |
ID_EFFECT_MOVERIGHT | 向右移动 | 向右移动 |
ID_EFFECT_HSMOVE | 水平双重移动 | 水平双重移动 |
ID_EFFECT_VBLIND | 垂直百叶窗 | 垂直百叶窗 |
ID_EFFECT_SBLIND | 水平百叶窗 | 水平百叶窗 |
ID_EFFECT_VRASTER | 垂直栅条 | 垂直栅条 |
ID_EFFECT_HRASTER | 水平栅条 | 水平栅条 |
ID_EFFECT_MOSAIC | 马赛克 | 马赛克 |
ID_EFFECT_RAINDROP | 雨滴 | 雨滴 |
编辑工具栏,仅保留“打开”和“帮助”按钮,其余全部删除,然后添加6个新工具栏按钮。
表示VS2012不太会编辑工具栏
直接导入已有toolbar.bmp并修改.rc文件了
IDR_MAINFRAME BITMAP "res\\Toolbar.bmp"
/
//
// Toolbar
//
IDR_MAINFRAME TOOLBAR 16, 15
BEGIN
BUTTON ID_FILE_OPEN
SEPARATOR
BUTTON ID_IMAGE_PREV
BUTTON ID_IMAGE_NEXT
SEPARATOR
BUTTON ID_MODE_NORMAL
BUTTON ID_MODE_WIDTH
BUTTON ID_MODE_HEIGHT
BUTTON ID_MODE_SCREEN
SEPARATOR
BUTTON ID_APP_ABOUT
END
修改快捷键(Accelarator)
IDR_MAINFRAME ACCELERATORS
BEGIN
//省略原来的代码
VK_HOME, ID_IMAGE_FIRST, VIRTKEY
VK_END, ID_IMAGE_LAST, VIRTKEY
VK_NEXT, ID_IMAGE_NEXT, VIRTKEY
VK_PRIOR, ID_IMAGE_PREV, VIRTKEY
END
新建对话框(Dialog)资源,改名为IDD_PREV,创建对应对话框类CPrevDlg。
由于要使用对话框类的动态创建功能,所以需要将.h文件的DECLARE_DYNAMIC宏改成DECLARE_DYNCREATE宏,同时将cpp文件中的IMPLEMENT_DYNAMIC宏改成IMPLEMENT_DYNCREATE宏。
IDD_PREV的Caption设置为“控制窗口”