cformview,添加控件后,改变控件背景图的显示问题
单文档程序,继承cformview,我添加了listctrl控件。我想在listctrl控件中显示一幅图片作为背景图,但图片只显示一下就消失了,原因不明。代码放在ondraw()中
void CGmMnuView::OnDraw(CDC* pDC)
{
CGmMnuDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CDC *pmylistDC = m_mylist.GetDC();//取listctrl控件dc
IPicture *pPic;
IStream *pStm;
CFileStatus fstatus;
CFile file;
LONG cb;
//下面是显示jpeg图片的代码,代码来自网上的。(作者应该测试过)
if (file.Open("./backgroud.jpg",CFile::modeRead)&&file.GetStatus("./backgroud.jpg",
fstatus)&&
((cb = fstatus.m_size) != -1))
{
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);
LPVOID pvData = NULL;
if (hGlobal != NULL)
{
if ((pvData = GlobalLock(hGlobal)) != NULL)
{
file.ReadHuge(pvData, cb);
GlobalUnlock(hGlobal);
CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);
if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*
)&pPic)))
{
OLE_XSIZE_HIMETRIC hmWidth;
OLE_YSIZE_HIMETRIC hmHeight;
pPic->get_Width(&hmWidth);
pPic->get_Height(&hmHeight);
double fX,fY;
fX = (double)pmylistDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pmylistDC->GetDeviceCaps(HORZSIZE)*100.0);
fY = (double)pmylistDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pmylistDC->GetDeviceCaps(VERTSIZE)*100.0);
if(FAILED(pPic->Render(*pmylistDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))
AfxMessageBox("Failed To Render The picture!");
pPic->Release();
}
else
AfxMessageBox("Error Loading Picture From Stream!");
}
}
}
else
{
AfxMessageBox("Can't Open Image File!");
}
}
说明:
我如果将控件的dc指针pmylistDC替换成view的dc指针pdc则不会有任何问题,但为什么在控件中显示后马上就消失呢,请各位高手不吝赐教,谢过.
问题点数:20、回复次数:6Top
1 楼Mackz(在相互)回复于 2006-03-14 02:21:28 得分 15
CListCtrl::SetBkImageTop
2 楼look01(^-^)回复于 2006-03-14 12:53:51 得分 0
我要显示的jpg的不是bmp图象啊SetBkImage不能显示:(Top
3 楼orbit(走了走了)回复于 2006-03-14 13:12:10 得分 5
如果你想在listctrl中画背景,就应该处理listctrl的onpaint或onerasebkgnd,而不是在view中Top
4 楼Mackz(在相互)回复于 2006-03-14 15:22:58 得分 0
没问题,JPG、GIF都能显示。别忘了CoInitialize/CoUninitializeTop
5 楼look01(^-^)回复于 2006-03-14 19:32:38 得分 0
太好了,我成功了,谢谢Mackz(在相互)高手指点,不过现在有个不足之处就是当我改变窗体大小时,背景图片的大小并没有随着改变,有没有好办法实现呢?谢谢Top
6 楼look01(^-^)回复于 2006-03-15 12:21:43 得分 0
等待高手解答Top
相关问题
- 怎么添加Tree Control控件的背景图片?
- 如何给VB的SSTab和DataGrid控件添加背景色
- 如何为控件添加背景图片?
- Applet添加背景图,为什么背景遮住了控件?如何处理?
- 怎么用纯代码实现给treeview控件添加背景图片???????????????(不要别的控件)
- 各位老大: 如何在CFormView中动态的添加一组CStatic控件?
- 为什么我在修改对话框的背景色之后,添加的EDIT控件背景色也变了?
- (急)怎么改变Slider控件中的背景颜色或者添加背景图片?
- placeholder控件能否添加html控件??
- 在对话框中,用Picture 控件添加背景图片,和在OnPaint()中用LoadImage()添加背景有什么不同?




