请教大神,用MFC怎么在一个对话框的中间部分显示很多图片,通过添加的方式可以选择图片。

点“打开"按钮,能够在上面的白色区域内显示图片。要求可以显示很多张... 点“打开"按钮,能够在上面的白色区域内显示图片。要求可以显示很多张 展开
 我来答
xu19951930
2014-03-01 · TA获得超过294个赞
知道小有建树答主
回答量:163
采纳率:0%
帮助的人:164万
展开全部

试试看,是不是你要的功能。

添加头文件vector和atlimage.h

    std::vector<CString> vecFileName;
    CFileDialog *lpszOpenFile;
    lpszOpenFile = new CFileDialog(TRUE, NULL, NULL, OFN_ALLOWMULTISELECT | OFN_PATHMUSTEXIST, NULL, NULL);//生成一个对话框
    if (lpszOpenFile->DoModal() == IDOK)
    {
        POSITION pos = lpszOpenFile->GetStartPosition();
        while (pos != NULL)
        {
            vecFileName.push_back(lpszOpenFile->GetNextPathName(pos));
        }
    }
    delete lpszOpenFile;

    CImage img;
    CRect rcClient;
    GetClientRect(rcClient);
    CDC* pDC = GetDC();
    ::SetStretchBltMode(pDC->m_hDC, HALFTONE);
    ::SetBrushOrgEx(pDC->m_hDC, 0, 0, NULL);
    for (size_t i = 0; i < vecFileName.size(); i++)
    {
        if (!img.IsNull())
        {
            img.Destroy();
        }
        img.Load(vecFileName.at(i));
         if (img)
         {
            //将客户区分成16块
            CRect rcTemp(rcClient.Width() / 4 * (i % 4), rcClient.Height() / 4 * (i / 4), 
                rcClient.Width() / 4 * ((i % 4) + 1), rcClient.Height() / 4 * ((i / 4) + 1));
             img.Draw(pDC->m_hDC, rcTemp);
         }
    }
    img.Destroy();
    pDC->DeleteDC();
    vecFileName.clear();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
归悦欣cf
2014-03-01 · TA获得超过1443个赞
知道大有可为答主
回答量:4250
采纳率:60%
帮助的人:1289万
展开全部
需要使用打开文件对话框来获取打开的文件,之后可以使用相关方法(比如GDI+)显示图片
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式