求解:怎么在对话框里动态的显示图片 我在对话框里加了个picture控件,想在调用这个对话框时根据不同的情况显示不同的图片不知道怎么实现,各位哥哥帮忙 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以在同一个位置放置多个Picture,根据需要在统一时刻显示其中的一个Picture最好给这个控件添加一个CStatic变量,使用他的SetBitmap成员函数 这段代码用于显示图片,你自己研究研究吧#include "WindowSx.h"CFile file("*.bmp",CFile::modeRead);BITMAPFILEHEADER BitmapFileHeader;file.Read(&BitmapFileHeader,sizeof(BITMAPFILEHEADER));if (BitmapFileHeader.bfType==0X4D42){ BYTE* pMem=(BYTE*)GlobalAllocPtr(GMEM_MOVEABLE,file.GetLength()-sizeof(BITMAPFILEHEADER)); file.Read(pMem,file.GetLength()-sizeof(BITMAPFILEHEADER)); BITMAPINFO* pBitmapInfo=(BITMAPINFO*)pMem; BITMAPINFOHEADER* pBitmapInfoHeader=(BITMAPINFOHEADER*)pMem; RGBQUAD* pRGB=(RGBQUAD*)(pMem+pBitmapInfoHeader->biSize); UINT iColor; if (pBitmapInfoHeader->biClrUsed==0) switch (pBitmapInfoHeader->biBitCount) { case 1: iColor=2; break; case 4: iColor=16; break; case 8: iColor=256; break; default: iColor=0; } else iColor=pBitmapInfoHeader->biClrUsed; BYTE* pData=pMem+pBitmapInfoHeader->biSize; if (iColor<=256) pData+=sizeof(RGBQUAD)*iColor; if (iColor>0 && iColor<=256) { struct { WORD iVersion; WORD iEntry; PALETTEENTRY entries[256]; } palette={0X300,256}; for (UINT i=0; i<iColor; i++) { palette.entries[i].peRed=pRGB[i].rgbRed; palette.entries[i].peGreen=pRGB[i].rgbGreen; palette.entries[i].peBlue=pRGB[i].rgbBlue; palette.entries[i].peFlags=0; } HPALETTE hPalette=::CreatePalette((LPLOGPALETTE)&palette); HPALETTE hOldPalette=::SelectPalette(dc.m_hDC,hPalette,FALSE); ::RealizePalette(dc.m_hDC); ::StretchDIBits(dc.m_hDC, iX,iY,pBitmapInfoHeader->biWidth,pBitmapInfoHeader->biHeight, iXSource,iYSource,pBitmapInfoHeader->biWidth,pBitmapInfoHeader->biHeight, pData,pBitmapInfo, DIB_RGB_COLORS,SRCCOPY); ::SelectPalette(dc.m_hDC,hOldPalette,FALSE); ::DeleteObject(hPalette); } else ::StretchDIBits(dc.m_hDC, iX,iY,pBitmapInfoHeader->biWidth,pBitmapInfoHeader->biHeight, iXSource,iYSource,pBitmapInfoHeader->biWidth,pBitmapInfoHeader->biHeight, pData,pBitmapInfo, DIB_RGB_COLORS,SRCCOPY); GlobalFreePtr(pMem);} 这个控件怎么加CStatic变量啊?ClassWizard里都没用这个控件的ID啊 to:mynameisno1() 谢了,我先看看啊 选中Picture控件,按回车,出现属性对话框。把ID由IDC_STATIC改成其他的东西,只要不是IDC_STATIC就可以。然后再看ClassWizard,就会有了 我觉得只要你会用Picture控件来显示图片,就应该会这个问题呀。只不过当不同情况的时候,重新Load一下Bitmap。 我没用过picture,不好意思,新手 建成CStatic变量之后怎么控制?我感觉好像不用建多个picture也能实现 这个问题简单!建立一个CPicture1 , DDX为 m_Pic1 , TYPE 为 BITMAP HBITMAP hbmp; hbmp = (HBITMAP)LoadImage(AfxGetInstanceHandle(), (char *)"C:\\1.tmp",IMAGE_BITMAP,170,80, LR_LOADFROMFILE | LR_CREATEDIBSECTION); m_Pic1.SetBitmap(hbmp); 我是这么做的,可什么也显示不出来,位图没问题,各位哥哥帮忙看看CBitmap m_mapstore; VERIFY(m_mapstore.LoadBitmap(IDB_BITMAP2));m_Map.SetBitmap(m_mapstore); 照我说的方法!绝对没问题!!!!!!!!建立一个图片控件IDC_STATIC1 , DDX为 m_Pic1 , TYPE 为 BITMAP HBITMAP hbmp; hbmp = (HBITMAP)LoadImage(AfxGetInstanceHandle(), (char *)"C:\\1.tmp",IMAGE_BITMAP,170,80, LR_LOADFROMFILE | LR_CREATEDIBSECTION); m_Pic1.SetBitmap(hbmp); to:xqk(夏乾坤) 哥,这方法是没问题,可太麻烦了,我用的那种方法理论能实现的,但不知道出什么错了,但还是谢谢你啊! VC中ListCtrl控件中如何显示网格? MFC对话框层次问题 CListCtrl如何响应鼠标的右击事件 RtlMoveMemory函数怎么使用? 编译通过,怎么连接出现问题???? 异步读数据时漏数据 该如何解决呢?? 模拟按键中遇到的问题,大家帮帮忙,建议方案都行 一个简单的对话框之间通信绘图的问题,请帮忙解决 急!!! 偶做了个传奇外挂但功能不全 VARIANT 和 BSTR 是如何互相转换? 又是installshield的问题 如何停止主线程
最好给这个控件添加一个CStatic变量,使用他的SetBitmap成员函数
#include "WindowSx.h"CFile file("*.bmp",CFile::modeRead);
BITMAPFILEHEADER BitmapFileHeader;
file.Read(&BitmapFileHeader,sizeof(BITMAPFILEHEADER));
if (BitmapFileHeader.bfType==0X4D42)
{
BYTE* pMem=(BYTE*)GlobalAllocPtr(GMEM_MOVEABLE,file.GetLength()-sizeof(BITMAPFILEHEADER));
file.Read(pMem,file.GetLength()-sizeof(BITMAPFILEHEADER));
BITMAPINFO* pBitmapInfo=(BITMAPINFO*)pMem;
BITMAPINFOHEADER* pBitmapInfoHeader=(BITMAPINFOHEADER*)pMem;
RGBQUAD* pRGB=(RGBQUAD*)(pMem+pBitmapInfoHeader->biSize);
UINT iColor;
if (pBitmapInfoHeader->biClrUsed==0)
switch (pBitmapInfoHeader->biBitCount)
{
case 1:
iColor=2;
break;
case 4:
iColor=16;
break;
case 8:
iColor=256;
break;
default:
iColor=0;
}
else
iColor=pBitmapInfoHeader->biClrUsed;
BYTE* pData=pMem+pBitmapInfoHeader->biSize;
if (iColor<=256)
pData+=sizeof(RGBQUAD)*iColor;
if (iColor>0 && iColor<=256)
{
struct {
WORD iVersion;
WORD iEntry;
PALETTEENTRY entries[256];
} palette={0X300,256};
for (UINT i=0; i<iColor; i++)
{
palette.entries[i].peRed=pRGB[i].rgbRed;
palette.entries[i].peGreen=pRGB[i].rgbGreen;
palette.entries[i].peBlue=pRGB[i].rgbBlue;
palette.entries[i].peFlags=0;
}
HPALETTE hPalette=::CreatePalette((LPLOGPALETTE)&palette);
HPALETTE hOldPalette=::SelectPalette(dc.m_hDC,hPalette,FALSE);
::RealizePalette(dc.m_hDC);
::StretchDIBits(dc.m_hDC,
iX,iY,pBitmapInfoHeader->biWidth,pBitmapInfoHeader->biHeight,
iXSource,iYSource,pBitmapInfoHeader->biWidth,pBitmapInfoHeader->biHeight,
pData,pBitmapInfo,
DIB_RGB_COLORS,SRCCOPY);
::SelectPalette(dc.m_hDC,hOldPalette,FALSE);
::DeleteObject(hPalette);
}
else
::StretchDIBits(dc.m_hDC,
iX,iY,pBitmapInfoHeader->biWidth,pBitmapInfoHeader->biHeight,
iXSource,iYSource,pBitmapInfoHeader->biWidth,pBitmapInfoHeader->biHeight,
pData,pBitmapInfo,
DIB_RGB_COLORS,SRCCOPY);
GlobalFreePtr(pMem);
}
然后再看ClassWizard,就会有了
hbmp = (HBITMAP)LoadImage(AfxGetInstanceHandle(),
(char *)"C:\\1.tmp",IMAGE_BITMAP,170,80,
LR_LOADFROMFILE | LR_CREATEDIBSECTION); m_Pic1.SetBitmap(hbmp);
CBitmap m_mapstore;
VERIFY(m_mapstore.LoadBitmap(IDB_BITMAP2));
m_Map.SetBitmap(m_mapstore);
hbmp = (HBITMAP)LoadImage(AfxGetInstanceHandle(),
(char *)"C:\\1.tmp",IMAGE_BITMAP,170,80,
LR_LOADFROMFILE | LR_CREATEDIBSECTION); m_Pic1.SetBitmap(hbmp);