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:
CWindow m_wndThemeParent;
CBrush m_brBack;
CBitmap m_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_
温馨提示:内容为网友见解,仅供参考
vc打开多个图片 然后点击按钮显示下一张 或上一张
PictureControl就是类CStatic,下面是VC++ WTL的编程用法,你着重看下WM_PAINT及设置图片的函数就能知道,如何用在MFC里了。关于Load图片的函数AtlLoadGdiplusImage(nRes, pstrType),我没贴出来,主要是为了方便你了解。当你切换图片时,就调用SetBitmap(HBITMAP hBitmap)函数,就可以切换图片了。SizeToF...
在VC++中,怎么点击按钮隐藏文本,显示下一个文本?
方法:你直接单击你的单选框按钮,就行了 然后在单击事件里添加 GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);这里的IDC_BUTTON1要换成的你的按钮的id
5张图片,点击一个按钮能实现图片的连续播放。小白一枚 求帮助_百度...
close(fd);\/\/关闭显示屏 } void bmp_display(const char* filename,int x,int y){ \/\/1.打开文件 int fd=open(filename,O_RDONLY);if(-1 == fd){ printf("open %s fial",filename);perror("fail");return ;} \/\/2.判断是不是bmp图片 char buf1[2];read(fd,buf1,2);if(!(buf...
如何在VC中实现,双击打开桌面上的图片,能够自动在自己做的图片浏览器...
HKEY_CLASSES_ROOT\\Word.txtfile\\shell\\open\\command 默认值:"D:\\Office\\winword.exe" "%1"这样 TXT 文件右键菜单就会显示 "使用 Word 打开",而其类型也显示为 "Word 文本文件"。以上例子中的 Word.txtfile、D:\\Office\\winword.exe(假定 Word 实际路径)、"使用 Word 打开" 等都是示例。实际...
《vc++ mfc》如何实现图片切换
如果不需要对图片进行缩放以满足显示区域,则使用BitBlt函数,反之使用StrechBlt函数。如果两张图片大小相同或bbb大于aaa,将图片bbb覆盖在aaa显示的位置就可以了,反之需要先将aaa显示区域用底色填充,然后显示bbb
高分急求:VC中鼠标移到按钮上后,更改按钮图片的实现代码
IconButton(HWND hParent, LPRECT prcPos) { \/\/ 按钮在不同状态下显示的文本 m_pszHover = _T("hover");m_pszLeave = _T("leave");m_pszPressed = _T("pressed");\/\/ 按钮在不同状态下显示的图标 m_hIconHover = LoadIcon(NULL, IDI_INFORMATION);m_hIconLeave = LoadIcon(NULL, ...
VC6.0中怎样根据操作在图像控件中显示图片
STATIC)改成其他的,比如说这里的IDC_PIC HBITMAP hBitmap=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));\/\/加载IDB_BITMAP1 st->SetBitmap(hBitmap);\/\/设置位图显示 以上实现的就是代码控制位图在图片控件上的显示了,你只要分别在两个单选按钮里加载不同的位图就可以了。
VC6.0(VisualC++6.0)使用教程(使用VC6.0编写C语言程序)
1、新建Win32 Console Application工程,在你的电脑上找到图一(也就是VC6.0,当然你要事先安装好这个软件),双击打开VC6.0。在菜单栏中选择“文件->新建”(也可以直接用快捷键Ctrl+n),弹出下面的框框。2、选择你C语言文件的存储位置。如下图的步骤,先点击位置右下方的三个点,会弹出最右面...
运行VC++6.0,点击“文件>打开”后弹出一小框,提示“内存不能为read...
打开【工具】→【定制】菜单,找到【命令】选项卡,在类别一栏中选择Add-ins,可以看到右边的按钮中有刚才加入的【添加到项目】和【打开文件】两个蓝色的按钮,如下图。单击文件菜单,将上图中的【打开文件】命令拖拽放到之前显示打开文件命令的位置,如下图,按照同样的方法将【添加到工程】命令拖拽到...
VS2010 MFC 点击缩略图如何将这张图片显示到picture control中?_百度知 ...
监听CListCtrl控件的选中事件,在选中事件中从控件获取选中项的文字(GetItemText),这个文字就是文件名。然后使用文件名取读取图片文件,并将图片设置到PicureBox控件上。