问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

vc打开多个图片 然后点击按钮显示下一张 或上一张

发布网友 发布时间:2022-05-27 16:43

我来回答

1个回答

热心网友 时间:2023-11-04 12:27

PictureControl就是类CStatic,下面是VC++ WTL的编程用法,你着重看下WM_PAINT及设置图片的函数就能知道,如何用在MFC里了。关于Load图片的函数AtlLoadGdiplusImage(nRes, pstrType),我没贴出来,主要是为了方便你了解。

当你切换图片时,就调用SetBitmap(HBITMAP hBitmap)函数,就可以切换图片了。SizeToFit()函数是根据你设定的图片,自动调整控件窗口大小。

#ifndef _THEMEDIMAGE_H_INCLUDE_
#define _THEMEDIMAGE_H_INCLUDE_
#pragma once

//////////////////////////////////////////////////////////////////////
// Themed Image control
//

class CThemedImageCtrl : public CWindowImpl<CThemedImageCtrl, CStatic>
{
public:
CWindowm_wndThemeParent;
CBrushm_brBack;
CBitmapm_bmpImage;

// Operations

BOOL SubclassWindow(HWND hWnd)
{
ATLASSERT(m_hWnd==NULL);
ATLASSERT(::IsWindow(hWnd));
BOOL bRet = CWindowImpl<CThemedImageCtrl, CStatic>::SubclassWindow(hWnd);
if( bRet ) Init();
return bRet;
}

void Init()
{
m_wndThemeParent = GetParent();
Invalidate();
}

void SetThemeParent(HWND hWnd)
{
ATLASSERT(::IsWindow(hWnd));
m_wndThemeParent = hWnd;
if( !m_brBack.IsNull() ) m_brBack.DeleteObject();
}

void SetBitmap(HBITMAP hBitmap)
{
m_bmpImage = (HBITMAP) ::CopyImage(hBitmap, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
if( IsWindow() ) Invalidate();
}

void SetBitmap(UINT nRes, LPCTSTR pstrType)
{
m_bmpImage = AtlLoadGdiplusImage(nRes, pstrType);
if( IsWindow() ) Invalidate();
}

void SizeToFit()
{
ATLASSERT(!m_bmpImage.IsNull());
BITMAP BmpInfo = { 0 };
m_bmpImage.GetBitmap(&BmpInfo);
ResizeClient(BmpInfo.bmWidth, BmpInfo.bmHeight);
if( IsWindow() ) Invalidate();
}

// Message map and handlers

BEGIN_MSG_MAP(CThemedImageCtrl)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
MESSAGE_HANDLER(WM_MOVE, OnSize)
MESSAGE_HANDLER(WM_SIZE, OnSize)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_PRINTCLIENT, OnPaint)
END_MSG_MAP()

LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
{
Init();
bHandled = FALSE;
return 0;
}

LRESULT OnSize(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
if( !m_brBack.IsNull() ) m_brBack.DeleteObject();
return TRUE;
}

LRESULT OnEraseBkgnd(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
return 1;
}

LRESULT OnPaint(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
if( wParam != NULL )
{
DoPaint((HDC) wParam);
}
else
{
CPaintDC dc(m_hWnd);
DoPaint(dc.m_hDC);
}
return 0;
}

// Implementation

void DoPaint(CDCHandle dc)
{
CRect rcClient;
GetClientRect(&rcClient);

// Preserve background
if( m_brBack.IsNull() ) m_brBack = AtlGetBackgroundBrush(m_hWnd, m_wndThemeParent);
HBRUSH hOldBrush = dc.SelectBrush(m_brBack);
dc.PatBlt(rcClient.left, rcClient.top, rcClient.Width(), rcClient.Height(), PATCOPY);
dc.SelectBrush(hOldBrush);

// Paint image (assume that it is a 32bit with alpha-pr-pixel)...
CDC dcCompat;
dcCompat.CreateCompatibleDC(dc);
BITMAP BmpInfo = { 0 };
m_bmpImage.GetBitmap(&BmpInfo);
BLENDFUNCTION bf = { AC_SRC_OVER, 0, 255, AC_SRC_ALPHA };
HBITMAP hOldBitmap = dcCompat.SelectBitmap(m_bmpImage);
dc.AlphaBlend(0, 0, rcClient.Width(), rcClient.Height(), dcCompat, 0, 0, BmpInfo.bmWidth, BmpInfo.bmHeight, bf);
dcCompat.SelectBitmap(hOldBitmap);
}

};
#endif //_THEMEDIMAGE_H_INCLUDE_
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 JAVA点击&quot;打开&quot;按钮,选择图片并打开 多囊怀孕后推荐吃什么? 多囊怀孕后吃什么? 子宫肌瘤多囊卵巢饮食上有什么需要注意的呢 学法减分可以在电脑上学吗 多囊卵巢综合症能吃螃蟹吗 痰瘀互结者不宜食用 为什么更改手机号不能更改? 右肺上叶后段空腔 右肺中叶胸膜下微结节;是什么意思 想找卖手机的工作! 目前准备公积金贷款买房,但是还有各种负债累计8.4万,不知道能不能通过公积金贷款。 普通话老师的普通话等级必须达到什么标准 电视里的智能应用商城下载不了软件,打不开总显示网络连接断开请检查网络,可网络是好的,怎么办啊? 女儿大二了,会计专业,我想让她考CPA,但是女儿想考研,到底该怎么选? 北京朝阳台球群都有哪些? 手机手写突然写不出字了,为什么? 血检尿酸单独能查吗 怎样查尿酸 21题为什么不是支气管扩张症或硅肺呢? 支气管扩张症发病特点是什么? 支气管扩张从何而来 如何打开一个图片文件,并通过按钮来自动按某一文件名保存? 那位高手知道怎么用按钮打开图片!!! flash用按钮打开图片 VS2010用MFC文件对话框实现如下功能,点击“打开”按钮,选一张图片显示到图片控件中,程序该怎么写? 做矿泉水生意,想问问哪个亲自做过矿泉水生意的。不要复制的,亲身在做或者做过的。怎么进货? 恒大冰泉是如何在如此短的时间内铺货全国乃至全球的? 西安自己有矿泉水卖到哪里? 一个不知名的矿泉水怎么进入市场 品质好的矿泉水怎么样才能快速打开销路? 通常超市或者商店,他们的矿泉水都是具体从哪里批发的? 孕妇咳嗽可以大蒜冰糖水吗 姜跟大蒜、红糖煮水孕妇可以喝吗? 哪个软件管家好?360软件管家和金山软件管家相比怎么样? 电脑用什么下载一些软件好呢?是不是直接在百度上下载就行?还是用电脑管家里的软件管理下? 求解 哪个软件管理的软件最好用? 上千元的吸尘器与几百元的吸尘器有什么不同?价格高的吸尘器一定更好用吗? 在淘宝上100块钱左右价位的吸尘器能吸起来生米粒沙子这样重量的东西吗 吸尘器能用在瓷砖地板吗? 请问后缀为.DAT的压缩文件用什么解压缩呢? 漯河人民路丹尼斯带希字的贴手机钢化膜的店?