怎么用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();     //重绘图片函数

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

Visual C++6.0使用GDI+的一般方法 1. 载解压GDI+开发包; 2. 正确设置include & lib 目录; 3. stdafx.h 添加: #ifndef ULONG_PTR #define ULONG_PTR unsigned long* #endif #include 4. 程序中添加GDI+的包含文件gdiplus.h以及附加的类库gdiplus.lib。 通常gdiplus.h包含文件添加在应用程序的stdafx.h文件中,而gdiplus.lib可用两种进行添加: 第一种是直接在stdafx.h文件中添加下列语句: #pragma comment( lib, "gdiplus.lib" ) 另一种方法是: 在VC.net中添加库文件在:项目菜单->属性->链接器->输入 举个例子: (1)在应用程序项目的应用类中,添加一个成员变量,如下列代码: ULONG_PTR m_gdiplusToken; 其中,ULONG_PTR是一个DWORD数据类型,该成员变量用来保存GDI+被初始化后在应用程序中的GDI+标识,以便能在应用程序退出后,引用该标识来调用Gdiplus:: GdiplusShutdown来关闭GDI+。 (2)在应用类中添加ExitInstance的重载,并添加下列代码用来关闭GDI+: int CGDITestApp::ExitInstance() { Gdiplus::GdiplusShutdown(m_gdiplusToken); return CWinApp::ExitInstance(); } (3)在应用类的InitInstance函数中添加GDI+的初始化代码: 注意:下面这些GDI+的初始化代码必须放在m_pMainWnd->UpdateWindow();之前。 CWinApp::InitInstance(); Gdiplus::GdiplusStartupInput gdiplusStartupInput; Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL); (4)在需要绘图的窗口或视图类中添加GDI+的绘制代码。 下面分别就单文档和基于对话框应用程序为例,说明使用GDI+的一般过程和方法。 1. 在单文档应用程序中使用GDI+ 在上面的过程中,我们就是以一个单文档应用程序Ex_GDIPlus作为示例的。下面列出第4步所涉及的代码: void CGDITestView::OnDraw(CDC* pDC) { CGDITestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here usingnamespace Gdiplus; Graphics graphics(pDC->m_hDC); Pen newPen(Color(255,0,0),3); HatchBrush newBrush(HatchStyleCross,Color(255,0,255,0),Color(255,0,0,255));//创建一个填充画刷,前景色为绿色,背景色为蓝色 graphics.DrawRectangle(&newPen,50,50,100,60);// 在(50,50)处绘制一个长为100,高为60的矩形 graphics.FillRectangle(&newBrush,50,50,100,60); // 在(50,50)处填充一个长为100,高为60的矩形区域 } 编译并运行,结果如图:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值