如何在界面上显示一个图片但程序文件夹下面不必包含这个图片? 如题,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //从资源里面装入位图 CBitmap bitmap; CBitmap* pOldBitmap; CDC MemDC; CRect rect; GetClientRect(&rect); MemDC.CreateCompatibleDC(pDC); bitmap.LoadBitmap(IDB_BITMAP1); pOldBitmap=MemDC.SelectObject(&bitmap); pDC->BitBlt(0,0,m_x,m_y,&MemDC,0,0,SRCCOPY); MemDC.SelectObject(pOldBitmap);//----------------------------------------------------------------------------- //从文件里装入位图 HBITMAP bitmap,OldBitmap; bitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),"untitled1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); ASSERT(bitmap); CDC MemDC; CRect rect; MemDC.CreateCompatibleDC(pDC); GetClientRect(rect); OldBitmap=(HBITMAP)MemDC.SelectObject(bitmap); pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY); MemDC.SelectObject(OldBitmap); 楼上的兄弟,pDC怎么得到啊?我MFC很菜 比如要在一个static text上面显示图片,是不是pDC = GetDlgItem(IDC_STSTIC1)->GetDC()? void CTreandDlg::OnPaint() //可以在这个涵数里定义{ //... 以上代码省略 CPaintDC pDC(this); CDC pDC; //这两种定义方都可以,任意选择一种; //如果还不清楚的话就看一下MFC里面的设备上下文,很好理解的...} 刚看了一下,应该是CDC *pDC吧?我用下面的代码为什么不行呢?好像因为pDC没有赋值得原因?CBitmap bitmap;CBitmap* pOldBitmap;CDC *pDC ;CDC MemDC;CRect rect;GetClientRect(&rect);MemDC.CreateCompatibleDC(pDC); bitmap.LoadBitmap(IDB_BITMAP1);pOldBitmap=MemDC.SelectObject(&bitmap);pDC->BitBlt(0,0,450,450,&MemDC,0,0,SRCCOPY);MemDC.SelectObject(pOldBitmap);另外:比如要在一个static text上面显示图片,是不是pDC = GetDlgItem(IDC_STSTIC1)->GetDC()?谢谢!咋就搞不定了?汗! 哈哈,pDC不用你定义,是映射函数的参数 我有源代码,刚刚写好的,你有email吗? //将DIB转化为DDBHBITMAP CreateBitmapObjectFromDibFile (HDC hdc, PTSTR szFileName){ BITMAPFILEHEADER * pbmfh ; BOOL bSuccess ; DWORD dwFileSize, dwHighSize, dwBytesRead ; HANDLE hFile ; HBITMAP hBitmap ; // Open the file: read access, prohibit write access hFile = CreateFile (szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL) ; if (hFile == INVALID_HANDLE_VALUE) return NULL ; // Read in the whole file dwFileSize = GetFileSize (hFile, &dwHighSize) ; if (dwHighSize) { CloseHandle (hFile) ; return NULL ; } pbmfh = malloc (dwFileSize) ; if (!pbmfh) { CloseHandle (hFile) ; return NULL ; } bSuccess = ReadFile (hFile, pbmfh, dwFileSize, &dwBytesRead, NULL) ; CloseHandle (hFile) ; // Verify the file if (!bSuccess || (dwBytesRead != dwFileSize) || (pbmfh->bfType != * (WORD *) "BM") || (pbmfh->bfSize != dwFileSize)) { free (pbmfh) ; return NULL ; } // Create the DDB hBitmap = CreateDIBitmap (hdc, (BITMAPINFOHEADER *) (pbmfh + 1), CBM_INIT, (BYTE *) pbmfh + pbmfh->bfOffBits, (BITMAPINFO *) (pbmfh + 1), DIB_RGB_COLORS) ; free (pbmfh) ; return hBitmap ;} /////////////////////////////将图片显示到一个windowBOOL ddbShow(HWND hDlg,PTSTR lpFileName,int index,int idWindow){ HDC hdcDlg,hdcMem,hdcWindow; BITMAP bm; HBITMAP hBitmap; static HWND hPic2; RECT Rect; BOOL showSuccess; //HDCRETURN hdcReturn; hdcDlg = GetDC (hDlg) ; hBitmap = (HBITMAP)CreateBitmapObjectFromDibFile (hdcDlg,lpFileName) ; hPic2=GetDlgItem(hDlg,idWindow); hdcWindow = (HDC)GetWindowDC (hPic2) ; GetClientRect( hPic2, // handle to window &Rect // address of structure for client coordinates ); if (hBitmap) { hdcMem = CreateCompatibleDC (hdcWindow) ; SelectObject (hdcMem, hBitmap) ;// //获取DDB对象 GetObject(hBitmap,sizeof(BITMAP),(PSTR)&bm); //设置显示DDB显示模式 SetStretchBltMode(hdcWindow, COLORONCOLOR); //Rect.right=Rect.left+(Rect.bottom-Rect.top)+index; showSuccess=StretchBlt (hdcWindow, Rect.left+index, 0, Rect.bottom, Rect.bottom, hdcMem, 0, 0, bm.bmWidth,bm.bmHeight, SRCCOPY) ; DeleteDC (hdcMem) ; } //ReleaseDC (hDlg, hdcMem) ; ReleaseDC (hDlg, hdcWindow) ; ReleaseDC (hDlg, hdcDlg) ; return showSuccess; } to hhjdk967(汉靖):BOOL ddbShow(HWND hDlg,PTSTR lpFileName,int index,int idWindow)hDlg是窗口的handle,我现在要在一个静态文本框上面显示就应该是这个static text的句柄?lpFileName是图片名,要不要包含路径?index什么意思?idWindow怎么获得?谢谢。 to yes555(a ~tu);你说的是OnPaint() ?哪有什么参数啊? OnPaint()这个涵数里的CPaintDC dc(this)这个也以用的. 用那个的话错误提示:cannot convert parameter 1 from 'class CPaintDC' to 'class CDC *'我实在太菜 用GetDlgItem(hwnd,Itemid)hwnd是当前窗口的handle,Itemid是static的id VC中如何将ACCESSS数据库中的二进制数据转成CString? 关于const 望有SDK for Win98/95的兄弟能提供两个文件,不胜感激 怎样有效控制多个线程同时修改一个变量? 对话框显示问题,很急! 程序只运行一个进程,再次运行传参数给第一个进程的问题 静态库引用问题 文件的路径选择对话框使用的是哪个API函数? 有谁知道阳历转换阴历的算法 opencv 不可思议!debug运算结果正确,release却错误. 怎样区分中文和英文字符。
CBitmap bitmap;
CBitmap* pOldBitmap;
CDC MemDC;
CRect rect;
GetClientRect(&rect);
MemDC.CreateCompatibleDC(pDC);
bitmap.LoadBitmap(IDB_BITMAP1);
pOldBitmap=MemDC.SelectObject(&bitmap);
pDC->BitBlt(0,0,m_x,m_y,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldBitmap);//-----------------------------------------------------------------------------
//从文件里装入位图
HBITMAP bitmap,OldBitmap;
bitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),"untitled1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
ASSERT(bitmap);
CDC MemDC;
CRect rect;
MemDC.CreateCompatibleDC(pDC);
GetClientRect(rect);
OldBitmap=(HBITMAP)MemDC.SelectObject(bitmap);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(OldBitmap);
我MFC很菜
pDC = GetDlgItem(IDC_STSTIC1)->GetDC()?
{
//...
以上代码省略
CPaintDC pDC(this);
CDC pDC;
//这两种定义方都可以,任意选择一种;
//如果还不清楚的话就看一下MFC里面的设备上下文,很好理解的...}
我用下面的代码为什么不行呢?好像因为pDC没有赋值得原因?
CBitmap bitmap;
CBitmap* pOldBitmap;
CDC *pDC ;
CDC MemDC;
CRect rect;
GetClientRect(&rect);
MemDC.CreateCompatibleDC(pDC);
bitmap.LoadBitmap(IDB_BITMAP1);
pOldBitmap=MemDC.SelectObject(&bitmap);
pDC->BitBlt(0,0,450,450,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldBitmap);
另外:比如要在一个static text上面显示图片,是不是
pDC = GetDlgItem(IDC_STSTIC1)->GetDC()?
谢谢!
咋就搞不定了?汗!
HBITMAP CreateBitmapObjectFromDibFile (HDC hdc, PTSTR szFileName)
{
BITMAPFILEHEADER * pbmfh ;
BOOL bSuccess ;
DWORD dwFileSize, dwHighSize, dwBytesRead ;
HANDLE hFile ;
HBITMAP hBitmap ; // Open the file: read access, prohibit write access hFile = CreateFile (szFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL) ; if (hFile == INVALID_HANDLE_VALUE)
return NULL ; // Read in the whole file dwFileSize = GetFileSize (hFile, &dwHighSize) ;
if (dwHighSize)
{
CloseHandle (hFile) ;
return NULL ;
}
pbmfh = malloc (dwFileSize) ;
if (!pbmfh)
{
CloseHandle (hFile) ;
return NULL ;
}
bSuccess = ReadFile (hFile, pbmfh, dwFileSize, &dwBytesRead, NULL) ;
CloseHandle (hFile) ;
// Verify the file
if (!bSuccess || (dwBytesRead != dwFileSize)
|| (pbmfh->bfType != * (WORD *) "BM")
|| (pbmfh->bfSize != dwFileSize))
{
free (pbmfh) ;
return NULL ;
} // Create the DDB hBitmap = CreateDIBitmap (hdc,
(BITMAPINFOHEADER *) (pbmfh + 1),
CBM_INIT,
(BYTE *) pbmfh + pbmfh->bfOffBits,
(BITMAPINFO *) (pbmfh + 1),
DIB_RGB_COLORS) ;
free (pbmfh) ; return hBitmap ;
}
BOOL ddbShow(HWND hDlg,PTSTR lpFileName,int index,int idWindow)
{
HDC hdcDlg,hdcMem,hdcWindow;
BITMAP bm;
HBITMAP hBitmap;
static HWND hPic2;
RECT Rect;
BOOL showSuccess;
//HDCRETURN hdcReturn; hdcDlg = GetDC (hDlg) ;
hBitmap = (HBITMAP)CreateBitmapObjectFromDibFile (hdcDlg,lpFileName) ;
hPic2=GetDlgItem(hDlg,idWindow);
hdcWindow = (HDC)GetWindowDC (hPic2) ;
GetClientRect(
hPic2, // handle to window
&Rect // address of structure for client coordinates
);
if (hBitmap)
{
hdcMem = CreateCompatibleDC (hdcWindow) ;
SelectObject (hdcMem, hBitmap) ;//
//获取DDB对象
GetObject(hBitmap,sizeof(BITMAP),(PSTR)&bm);
//设置显示DDB显示模式
SetStretchBltMode(hdcWindow, COLORONCOLOR);
//Rect.right=Rect.left+(Rect.bottom-Rect.top)+index;
showSuccess=StretchBlt (hdcWindow, Rect.left+index, 0,
Rect.bottom, Rect.bottom,
hdcMem, 0, 0, bm.bmWidth,bm.bmHeight,
SRCCOPY) ;
DeleteDC (hdcMem) ;
}
//ReleaseDC (hDlg, hdcMem) ;
ReleaseDC (hDlg, hdcWindow) ;
ReleaseDC (hDlg, hdcDlg) ;
return showSuccess;
}
BOOL ddbShow(HWND hDlg,PTSTR lpFileName,int index,int idWindow)
hDlg是窗口的handle,我现在要在一个静态文本框上面显示就应该是这个static text的句柄?
lpFileName是图片名,要不要包含路径?
index什么意思?
idWindow怎么获得?
谢谢。
你说的是OnPaint() ?哪有什么参数啊?
这个涵数里的CPaintDC dc(this)这个也以用的.
cannot convert parameter 1 from 'class CPaintDC' to 'class CDC *'
我实在太菜
hwnd是当前窗口的handle,Itemid是static的id