OnPaint函数中位图显示不出来,请大家帮帮忙!解决办法
OnPaint函数中位图显示不出来,请大家帮帮忙!
我是利用CFileDialog打开一张位图文件,然后在对话框显示,代码如下:
void CMy1106Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString lpszFilter= "位图(*.bmp)|*.bmp|\
全部文件(*.*)|*.*|| ";
CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|
OFN_ALLOWMULTISELECT,lpszFilter,NULL);
if(dlg.DoModal()==IDOK)
{
m_hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),dlg.GetPathName(),
IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
m_pBmp = CBitmap::FromHandle(m_hBitmap);
}
}
void CMy1106Dlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
if(m_hBitmap)//如果得到位图句柄
{
BITMAP bm;
CDC dcMem;
VERIFY(m_pBmp-> GetObject(sizeof(bm),(LPVOID)&bm));
dcMem.CreateCompatibleDC(&dc);
CBitmap *pOldBMP=(CBitmap *)dcMem.SelectObject(m_pBmp);
BitBlt(dc.m_hDC,0, 0, bm.bmWidth, bm.bmHeight, dcMem.m_hDC, 0, 0, SRCCOPY);
dcMem.SelectObject(pOldBMP);
}
}
位图不能显示出来,请问这是怎么回事?
------解决方案--------------------
首先看看m_hBitmap是否有效,其次既然保存了句柄而且你喜欢用API函数,就不要转换成CBitmap*那么麻烦了,直接用句柄好了。再次如果一定要用CBitmap,可以不用指针,CBitmap m_Bmp;
m_Bmp.Attach(m_hBitmap);
------解决方案--------------------
还有,你OnButton1后面加一句Invalidate()
我是利用CFileDialog打开一张位图文件,然后在对话框显示,代码如下:
void CMy1106Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString lpszFilter= "位图(*.bmp)|*.bmp|\
全部文件(*.*)|*.*|| ";
CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|
OFN_ALLOWMULTISELECT,lpszFilter,NULL);
if(dlg.DoModal()==IDOK)
{
m_hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),dlg.GetPathName(),
IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
m_pBmp = CBitmap::FromHandle(m_hBitmap);
}
}
void CMy1106Dlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
if(m_hBitmap)//如果得到位图句柄
{
BITMAP bm;
CDC dcMem;
VERIFY(m_pBmp-> GetObject(sizeof(bm),(LPVOID)&bm));
dcMem.CreateCompatibleDC(&dc);
CBitmap *pOldBMP=(CBitmap *)dcMem.SelectObject(m_pBmp);
BitBlt(dc.m_hDC,0, 0, bm.bmWidth, bm.bmHeight, dcMem.m_hDC, 0, 0, SRCCOPY);
dcMem.SelectObject(pOldBMP);
}
}
位图不能显示出来,请问这是怎么回事?
------解决方案--------------------
首先看看m_hBitmap是否有效,其次既然保存了句柄而且你喜欢用API函数,就不要转换成CBitmap*那么麻烦了,直接用句柄好了。再次如果一定要用CBitmap,可以不用指针,CBitmap m_Bmp;
m_Bmp.Attach(m_hBitmap);
------解决方案--------------------
还有,你OnButton1后面加一句Invalidate()