怎么用VC++6.0编写图片浏览器

  1. ​打开VC++6.0,新建一个MFC工程,工程取名【ShowPic】;步骤:【文件】--【工程】--【MFC Appwizard[exe]】--【工程名】--【位置】--【确定】

  • 选择【基本对话框】,然后直接点击【完成】,这里我们全部默认MFC应用程序向导的剩余步骤

  • MFC向导直接给我们生成了一个对话框,这个对话框是可以编译运行的,不过没有什么功能而已

  • 在对话框上单击鼠标右键,选择【属性】,默认对话框ID,更改标题为:百度经验图片秀,在更改的同时,对话框的标题就及时的更改了

  • 在控件里选择【图片控件】,拖放到对话框里,并拖拽为需要的大小

  • 在图片控件上单击鼠标右键,选择【属性】,ID改为:IDC_Showing,标题默认为位图

  • 继续点选属性里的【样式】标签,选取【凹陷】、【图像居中】、【真实大小图像】

  • 在控件里选择【按钮控件】,在对话框中添加一个按钮控件,在其属性页更改ID为:IDC_Open,标题改为:打开位图

  • 编译,运行程序,此时的图片秀还没有具体功能,不过所需资源已经就位

  • 第一个关键点到了,为按钮控件绑定函数。打开【MFC ClassWizard】,在Class name下选择CShowPicDlg类,Object IDs下选择按钮控件的ID:IDC_Open,在Message下选择BN_CLICKED,然后点击Add Function按钮,在弹出的对话框内填写OnBtnOpenBmp(这个是函数名),点击OK,然后点击EditCode编辑函数

  • 在打开的ShowPicDlg.cpp文件中OnBtnOpenBmp()位置添加以下代码:

    CFileDialog dlg(TRUE,"bmp",".bmp",OFN_HIDEREADONLY,"BMP Files(*.bmp)|*.bmp||"); 
    if(dlg.DoModal() != IDOK) 

    return;
    }
    m_path = dlg.GetPathName(); //获得图片路径
    UpdateData(false); //更新路径公共变量
    ShowPic();   //调用显示图片函数

  • 在头文件ShowPicDlg.h添加CShowPicDlg类需要的函数和成员变量声明

    public:
    void CShowPicDlg::ShowPic();
    private:
    CString m_path;
    RECT rect;
    BITMAP bm;
    HBITMAP hBitmap;
    HDC hSrcDC;
    HDC hDesDC;
    CWnd *hwnd;

  • 继续转回ShowPicDlg.cpp文件中,编写ShowPic()函数体,代码如下:

    oid CShowPicDlg::ShowPic()
    {
    if(m_path=="")        //判断图片路径是否存在
    {
    return;
    }
    hwnd = GetDlgItem(IDC_ShowImg);
    hDesDC = hwnd->GetDC()->m_hDC;
    hSrcDC = CreateCompatibleDC(hDesDC);
    hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),m_path,IMAGE_BITMAP,0,0,
    LR_LOADFROMFILE|LR_CREATEDIBSECTION);
    GetObject(hBitmap, sizeof(BITMAP), &bm);
    SelectObject(hSrcDC, hBitmap);
    hwnd->GetClientRect(&rect);
    ::SetStretchBltMode(hDesDC,COLORONCOLOR);      
    ::StretchBlt(hDesDC, rect.left, rect.top, rect.right, rect.bottom, hSrcDC,
    0, 0, bm.bmWidth, bm.bmHeight,+SRCCOPY);
    UpdateData(false);
    }

  • 编译,运行,打开图片,显示图片都正常,但是当程序被覆盖或者拖拽到屏幕边缘再恢复时,被覆盖的部位图片消息了?

  • 这是因为在控件恢复的时候没有重绘图片,我们需要在OnPaint()内添加负责重绘图片控件的代码,如下:

    //更新windows窗口,如果无这步调用,图片显示还会出现问题
    CDialog::UpdateWindow();
    ShowPic();     //重绘图片函数

  • 再次编译,运行,一切正常,至此,百度经验图片秀编写完成了

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值