Clistview的背景图片问题,高手给个解决方案 我的程序是基于SDI的,view是继承自CListView,现在我在我的listview视图中加载了背景图片,现在的问题是我的图片太小,我如何让他拉伸到覆盖整个listview!第二个问题:setbkimage是不是不能用HBITMAP? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 怎么画?void CCpkCalcView::OnDraw(CDC* pDC){ // TODO: 在此添加专用代码和/或调用基类 BITMAP bm; CBitmap m_bmp; m_bmp.GetBitmap(&bm); CBitmap * m_pbmCurrent = &m_bmp; CDC dcMem; dcMem.CreateCompatibleDC(pDC); CBitmap* pOldBitmap = dcMem.SelectObject(m_pbmCurrent); CRect rc; GetClientRect(&rc); pDC->StretchBlt(0,0,rc.Width(),rc.Height(),&dcMem,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);// pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcMem,0,0,SRCCOPY); dcMem.SelectObject(pOldBitmap);}我这样写,怎么没有效果? http://www.codeguru.com/Cpp/controls/listview/backgroundcolorandimage/article.php/c983/ 加个m_bmp.GetBitmap(&bm);试试 void CDeviceListView::OnInitialUpdate() { CListView::OnInitialUpdate(); CListCtrl &m_list = GetListCtrl(); //m_list.SetBkColor(RGB(242,251,255)); m_list.SetTextColor( RGB(12,26,234) ); m_list.InsertColumn(0 , "Device ID", LVCFMT_LEFT, 100, 0 ); m_list.InsertColumn(1 , "Port ID", LVCFMT_LEFT, 100, 1 ); m_list.ModifyStyle( LVS_TYPEMASK,LVS_REPORT | LVS_SINGLESEL ); m_list.SetExtendedStyle( LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES |LVS_EX_HEADERDRAGDROP | LVS_EX_ONECLICKACTIVATE ); // Set reasonable widths for our columns m_list.SetColumnWidth(0, LVSCW_AUTOSIZE_USEHEADER); m_list.SetColumnWidth(1, LVSCW_AUTOSIZE_USEHEADER); //load schedule list int line=0; LVITEM item; char sBuf[100]; char sBuf2[100]; struDevice *pDev; int devcnt = (int)(m_devListView.GetUpperBound()+1); for(int i=0;i<devcnt;i++) { pDev = (struDevice *)m_devListView.GetAt(i); //if ( pDev->wDevID && pDev->nPortID) line =m_list.GetItemCount(); item.mask = TVIF_TEXT; item.iItem = line; item.iSubItem = 0; sprintf(sBuf,"%ld",pDev->wDevID); item.pszText = sBuf; m_list.InsertItem(&item); sprintf(sBuf2,"%ld",pDev->nPortID); m_list.SetItemText(line,1,sBuf2); } //get current work directory and add background picture. LVBKIMAGE bki; CString strCurDir; char strBkgif[MAX_PATH]; char sModuleName[1025]; DWORD dwSize = GetModuleFileName(AfxGetApp()->m_hInstance,sModuleName,1024); sModuleName[dwSize] = '\0'; strCurDir = sModuleName; int nIndex = strCurDir.ReverseFind('\\'); strCurDir = strCurDir.Left(nIndex+1); //end with "\\" sprintf(strBkgif,"%sbg10.jpg",strCurDir); if (m_list.GetBkImage(&bki) && (bki.ulFlags == LVBKIF_SOURCE_NONE)) { m_list.SetBkImage(TEXT(strBkgif),TRUE); }} VC里有没有局部清屏函数?有又怎么用? 求解 MFC 中断 问一个简单逻辑问题 有关函数传值,高分拜求高手~! win32 SDK API 如何优化 怎么解决下面编译错误 函数怎么不能用了? 请问多文档中子窗口之间怎么通信? 如何自动关闭MessageBox()对话框。 icmp.dll的用法 ATL开发的activex为什么只有在IE6.0的机子上才能使用? 我在Com中开的线程中触发连接点事件Fire_XXXXEvent为什么客户程序没有任何响应呢??
void CCpkCalcView::OnDraw(CDC* pDC)
{
// TODO: 在此添加专用代码和/或调用基类
BITMAP bm;
CBitmap m_bmp;
m_bmp.GetBitmap(&bm);
CBitmap * m_pbmCurrent = &m_bmp;
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = dcMem.SelectObject(m_pbmCurrent);
CRect rc;
GetClientRect(&rc);
pDC->StretchBlt(0,0,rc.Width(),rc.Height(),&dcMem,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
// pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(pOldBitmap);}
我这样写,怎么没有效果?
m_bmp.GetBitmap(&bm);试试
{
CListView::OnInitialUpdate();
CListCtrl &m_list = GetListCtrl();
//m_list.SetBkColor(RGB(242,251,255));
m_list.SetTextColor( RGB(12,26,234) ); m_list.InsertColumn(0 , "Device ID", LVCFMT_LEFT, 100, 0 );
m_list.InsertColumn(1 , "Port ID", LVCFMT_LEFT, 100, 1 );
m_list.ModifyStyle( LVS_TYPEMASK,LVS_REPORT | LVS_SINGLESEL );
m_list.SetExtendedStyle( LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES |LVS_EX_HEADERDRAGDROP | LVS_EX_ONECLICKACTIVATE );
// Set reasonable widths for our columns
m_list.SetColumnWidth(0, LVSCW_AUTOSIZE_USEHEADER);
m_list.SetColumnWidth(1, LVSCW_AUTOSIZE_USEHEADER);
//load schedule list
int line=0;
LVITEM item;
char sBuf[100];
char sBuf2[100];
struDevice *pDev;
int devcnt = (int)(m_devListView.GetUpperBound()+1);
for(int i=0;i<devcnt;i++)
{
pDev = (struDevice *)m_devListView.GetAt(i);
//if ( pDev->wDevID && pDev->nPortID)
line =m_list.GetItemCount();
item.mask = TVIF_TEXT;
item.iItem = line;
item.iSubItem = 0;
sprintf(sBuf,"%ld",pDev->wDevID);
item.pszText = sBuf;
m_list.InsertItem(&item);
sprintf(sBuf2,"%ld",pDev->nPortID);
m_list.SetItemText(line,1,sBuf2);
} //get current work directory and add background picture.
LVBKIMAGE bki;
CString strCurDir;
char strBkgif[MAX_PATH];
char sModuleName[1025];
DWORD dwSize = GetModuleFileName(AfxGetApp()->m_hInstance,sModuleName,1024);
sModuleName[dwSize] = '\0';
strCurDir = sModuleName;
int nIndex = strCurDir.ReverseFind('\\');
strCurDir = strCurDir.Left(nIndex+1); //end with "\\"
sprintf(strBkgif,"%sbg10.jpg",strCurDir);
if (m_list.GetBkImage(&bki) && (bki.ulFlags == LVBKIF_SOURCE_NONE))
{
m_list.SetBkImage(TEXT(strBkgif),TRUE);
}
}