MFC界面保存实现课案_第1页
MFC界面保存实现课案_第2页
MFC界面保存实现课案_第3页
MFC界面保存实现课案_第4页
MFC界面保存实现课案_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、将屏幕和MFC程序界面保存成bmp格式图片保存分类:C+专区MFC客户端2014-06-0316:39915人阅读评论收藏举报将屏幕保存为图片,使用VS2008编译通过。#include"stdafx.h"#include<windows.h>#include<atlimage.h>int_stdcallWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnShowCmd)HWNDhwnd=:GetDesktopWindow();HDChDC=:GetDC(hwnd)

2、;/获取屏幕DCRECTrect;:GetClientRect(hwnd,&rect);/获取屏幕大小HDChDCMem=:CreateCompatibleDC(hDC);/创建兼容DCHBITMAPhBitMap=:CreateCompatibleBitmap(hDC,rect.right,rect.bottom);创建兼容位图HBITMAPhOldMap=(HBITMAP):SelectObject(hDCMem,hBitMap);/将位图选入DC,并保存返回值:BitBlt(hDCMem,0,0,rect.right,rect.bottom,hDC,0,0,SRCCOPY);/将

3、屏幕DC的图象复制到内存DC中CImageimage;image.Attach(hBitMap);image.Save(_T("c:/B.jpg");/如果文件后缀为.bmp,则保存为为bmp格式image.Detach();:SelectObject(hDCMem,hOldMap);/选入上次的返回值/释放:DeleteObject(hBitMap);:DeleteDC(hDCMem);:DeleteDC(hDC);return0;将当前MFC程序(这里是单文档程序)保存为图片,使用vs2005。第一个使用CImage类保存图片,第二个使用BITMAPINFO。第一个:v

4、oidCMainFrame:OnGetMap()HWNDhwnd=this->GetSafeHwnd();HDChDC=:GetWindowDC(hwnd);/获取DCRECTrect;GetWindowRect(hwnd,&rect);/获取屏幕大小HDChDCMem=二CreateCompatibleDC(hDC);/创建兼容DCHBITMAPhBitMap=二CreateCompatibleBitmap(hDC,rect.right-rect.left,rect.bottom-rect.top);创建兼容位图HBITMAPhOldMap=(HBITMAP):SelectOb

5、ject(hDCMem,hBitMap);/将位图选入DC,并保存返回值:BitBlt(hDCMem,0,0,rect.right-rect.left,rect.bottom-rect.top,hDC,0,0,SRCCOPY);/将屏幕DC的图象复制到内存DC中CImageimage;/需要#include<atlimage.h>image.Attach(hBitMap);image.Save(_T(''c:/B.jpg'');/如果文件后缀为.bmp,则保存为为bmp格式image.Detach();SelectObject(hDCMem,hOld

6、Map);/选入上次的返回值/释放:DeleteObject(hBitMap);DeleteDC(hDCMem);DeleteDC(hDC);VC6.0通过,第二个:voidCMainFrame:OnGetMap()CDC*pDC=GetWindowDC();CBitmapbitmap;CDCmemDC;CRectrect;GetWindowRect(rect);memDC.CreateCompatibleDC(pDC);bitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height();memDC.SelectObject(&bi

7、tmap);memDC.BitBlt(0,0,rect.Width(),rect.Height(),pDC,0,0,SRCCOPY);位图文件CFileDialogfDlg(FALSE,_T("bmp"),NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("|*.bmp"),this);if(fDlg.DoModal()=IDOK)CStringbmpfile=fDlg.GetPathName();CFilefile(bmpfile,CFile:modeCreate|CFile:modeWrite);BITMAPb

8、Info;bitmap.GetBitmap(&bInfo);计算调色板大小intpanelsize=0;if(bInfo.bmBitsPixel<24)/非真彩色panelsize=pow(double)2,bInfo.bmBitsPixel)*sizeof(RGBQUAD);定义位图信息BITMAPINFO*bMapInfo=(BITMAPINFO*)LocalAlloc(LPTR,sizeof(BITMAPINFO)+panelsize);bMapInfo->bmiHeader.biBitCount=bInfo.bmBitsPixel;bMapInfo->bmiH

9、eader.biClrImportant=0;bMapInfo->bmiHeader.biCompression=0;bMapInfo->bmiHeader.biHeight=bInfo.bmHeight;bMapInfo->bmiHeader.biPlanes=bInfo.bmPlanes;bMapInfo->bmiHeader.biSize=sizeof(BITMAPINFO);bMapInfo->bmiHeader.biSizeImage=bInfo.bmHeight*bInfo.bmWidthBytes;bMapInfo->bmiHeader.biW

10、idth=bInfo.bmWidth;bMapInfo->bmiHeader.biXPelsPerMeter=0;bMapInfo->bmiHeader.biYPelsPerMeter=0;获取位图的实际数据char*pData=newcharbMapInfo->bmiHeader.biSizeImage;intlen=GetD旧its(pDC->m_hDC,bitmap,0,bInfo.bmHeight,pData,bMapInfo,D旧_RGB_COLORS);BITMAPFILEHEADERbFileHeader;bFileHeader.bfType=0x4D42

11、;bFileHeader.bfReserved1=0;bFileHeader.bfReserved2=0;bFileHeader.bfSize=sizeof(BITMAPFILEHEADER);bFileHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+panelsize;向文件中写入位图数据file.Write(&bFileHeader,sizeof(BITMAPFILEHEADER);file.Write(&bMapInfo->bmiHeader,sizeof(BITMAPINFOHE

12、ADER);file.Write(pData,bMapInfo->bmiHeader.biSizeImage+panelsize);file.Close();deletepData;LocalFree(bMaplnfo);bitmap.DeleteObject();memDC.DeleteDC();C+截取屏幕图片并保存(函数代码实现)<strong>/获取桌面窗口的CDCCDC*pdeskdc=GetDesktopWindow()->GetDC();CRectre;/获取窗口的大小GetDesktopWindow()->GetClientRect(&re

13、);CBitmapbmp;bmp.CreateCompatibleBitmap(pdeskdc,re.Width(),re.Height();创建一个兼容的内存画板CDCmemorydc;memorydc.CreateCompatibleDC(pdeskdc);/选中画笔CBitmap*pold=memorydc.SelectObject(&bmp);绘制图像memorydc.BitBlt(0,0,re.Width(),re.Height(),pdeskdc,0,0,SRCCOPY);/获取鼠标位置,然后添加鼠标图像CPointpo;GetCursorPos(&po);HICO

14、Nhinco=(HICON)GetCursor();memorydc.DrawIcon(po.x-10,po.y-10,hinco);/选中原来的画笔memorydc.SelectObject(pold);BITMAPbit;bmp.GetBitmap(&bit);/DWORDsize=bit.bmWidth*bit.bmHeight;/定义图像大小(单位:byte)DWORDsize=bit.bmWidthBytes*bit.bmHeight;LPSTRIpdata=(LPSTR)GlobalAlloc(GPTR,size);msdn后面是创建一个bmp文件的必须文件头,想要了解可以

15、参考BITMAPINFOHEADERpbitinfo;pbitinfo.biBitCount=24;pbitinfo.biClrImportant=0;pbitinfo.biCompression=BI_RGB;pbitinfo.biHeight=bit.bmHeight;pbitinfo.biPlanes=1;pbitinfo.biSize=sizeof(BITMAPINFOHEADER);pbitinfo.biSizeImage=size;pbitinfo.biWidth=bit.bmWidth;pbitinfo.biXPelsPerMeter=0;pbitinfo.biYPelsPerM

16、eter=0;GetDIBits(pdeskdc->m_hDC,bmp,0,pbitinfo.biHeight,lpdata,(BITMAPINFO*)&pbitinfo,DIB_RGB_COLORS);BITMAPFILEHEADERbfh;bfh.bfReserved1=bfh.bfReserved2=0;bfh.bfType=(WORD)('M'<<8)|'B');bfh.bfSize=54+size;bfh.bfOffBits=54;写入文件CFilefile;if(file.Open("1.bmp",CFi

17、le:modeCreate|CFile:modeWrite)file.WriteHuge(&bfh,sizeof(BITMAPFILEHEADER);file.WriteHuge(&pbitinfo,sizeof(BITMAPINFOHEADER);file.WriteHuge(lpdata,size);file.Close();GlobalFree(lpdata);</strong>http:MFC程序实现给对话框添加背景图片1 .插入一个Bitmap的资源图片,假设资源名称为:IDC_BITMAP12 .在CXXXDialog:OnPaint()中实现:void

18、CMyDialogDlg:OnPaint()if(IsIconic()CPaintDCdc(this);/用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND,reinterpret_cast<WPARAM>(dc.GetSafeHdc(),0);/使图标在工作区矩形中居中intcxIcon=GetSystemMetrics(SM_CXICON);intcyIcon=GetSystemMetrics(SM_CYICON);CRectrect;GetClientRect(&rect);intx=(rect.Width()-cxIcon+1)/2;in

19、ty=(rect.Height()-cyIcon+1)/2;/绘制图标dc.DrawIcon(x,y,m_hIcon);else/给窗体添加背景/CPaintDCdc(this);CRectrc;GetClientRect(&rc);CDCdcMem;dcMem.CreateCompatibleDC(&dc);CBitmapbmpBackground;bmpBackground.LoadBitmap(IDB_BITMAP1);BITMAPbitmap;bmpBackground.GetBitmap(&bitmap);CBitmap*pbmpPri=dcMem.Selec

20、tObject(&bmpBackground);dc.StretchBlt(0,0,rc.Width(),rc.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);VC+中播放声音的方法声音是多媒体的一个重要组成部分,在应用程序中加入声音可以使界面更友好。在VC+中可以根据不同的应用要求,用不同的方法实现声音的播放。一.播放声音文件的简单方法在VC+中的多媒体动态连接库中提供了一组与音频设备有关的函数。利用这些函数可以方便地播放声音。最简单的播放声音方法就是直接调用VC+中提供的声音播放函数BOOLsndPla

21、ySound(LPCSTRlpszSound,UINTfuSound);或BOOLPlaySound(LPCSTRIpszSound,HMODULEhmod,DWORDfuSound);其中参数IpszSound是需要播放声音的.WAV文件的路径和文件名,hmod在这里为NULL,fuSound是播放声音的标志,详细说明请参考VC+中的帮助。例如播放Csoundmusic.wav可以用sndPlaySound("c:soundmusic.wav'',SND_ASYNC);或PlaySound("c:soundmusic.wav'',NULL,

22、SND_ASYNC|SND_NODEFAULT);如果没有找到music.wav文件,第一种格式将播放系统默认的声音,第二种格式不会播放系统默认的声音。二.将声音文件加入到程序中在VC+的程序设计中,可以利用各种标准的资源,如位图,菜单,对话框等。同时VC+也允许用户自定义资源,因此我们可以将声音文件作为用户自定义资源加入程序资源文件中,经过编译连接生成EXE文件,实现无.WAV文件的声音播放。要实现作为资源的声音文件的播放,首先要在资源管理器中加入待播放的声音文件(实现过程并不复杂,这里不在叙述)。假设生成的声音文件资源标识符为IDR_WAVE1o在播放时只需要调用下面的语句:PlaySou

23、nd(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_ASYNC|SND_RESOURCE|SND_NODEFAULT|SND_LOOP);其中MAKEINTRESOURCE()宏将整数资源标识符转变为字符串,AfxGetResourceHandle()函数返回包含资源的模块句柄,SND_RESOURCE是必须的标志。作为资源的声音文件的第二种播放方法是把资源读入内存后作为内存数据播放。具体步骤入下:1 .获得包含资源的模块句柄:HMODULEhmod=AfxGetResourceHandle();2 .检索资源块信息:HRSRChS

24、ndResource=FindResource(hmod,MAKEINTRESOURCE(IDR_WAVE1),_T("WAVE");3 .装载资源数据并加锁:HGLOBALhGlobalMem=LoadResource(hmod,hSndResource);LPCTSTRlpMemSound=(LPCSTR)LockResource(hGlobalMem);4 .播放声音文件:sndPlaySound(lpMemSound,SND_MEMORY);5 .释放资源句柄:FreeResource(hGlobalMem);三.播放声音文件的高级方法在VC+中提供了一组对音频设备

25、及多媒体文件直接进行操作的函数。利用这些函数可以灵活地对声音文件进行各种处理。首先介绍几个要用到的数据结构。WAVEFORMATEX结构定义了WAVE音频数据文彳的格式。WAVEHDR结构定义了波形音频缓冲区。读出的数据首先要填充此缓冲区才能送音频设备播放。WAVEOUTCAPS结构描述了音频设备的性能。MMCKINFO结构包含了RIFF文件中一个块的信息。详细的说明请参考VC+中的帮助。下面给出程序流程简图及程序源代码清单,在VC+环境下可直接使用:源程序清单如下:LPSTRszFileName;/声音文件名MMCKINFOmmckinfoParent;MMCKINFOmmckinfoSub

26、Chunk;DWORDdwFmtSize;HMMIOm_hmmio;/音频文件句柄DWORDm_WaveLong;HPSTRlpData;/音频数据HANDLEm_hData;HANDLEm_hFormat;WAVEFORMATEX*lpFormat;DWORDm_dwDataOffset;DWORDm_dwDataSize;WAVEHDRpWaveOutHdr;WAVEOUTCAPSpwoc;HWAVEOUThWaveOut;/打开波形文件if(!(m_hmmio=mmioOpen(szFileName,NULL,MMIO_READ|MMIO_ALLOCBUF)/FileopenErrorE

27、rror("Failedtoopenthefile.");/错误处理函数returnfalse;/检查打开文件是否是声音文件mmckinfoParent.fccType=mmioFOURCC(W,A,V,E);if(mmioDescend(m_hmmio,(LPMMCKINFO)&mmckinfoParent,NULL,MMIO_FINDRIFF)/NOTWAVEFILEANDQUIT/寻找fmt块mmckinfoSubChunk.ckid=mmioFOURCC(f,m,t,);if(mmioDescend(m_hmmio,&mmckinfoSubChunk

28、,&mmckinfoParent,MMIO_FINDCHUNK)/Cantfindfmtchunk/获得fmt块'的大小,申请内存dwFmtSize=mmckinfoSubChunk.cksize;m_hFormat=LocalAlloc(LMEM_MOVEABLE,LOWORD(dwFmtSize);if(!m_hFormat)/failedallocmemorylpFormat=(WAVEFORMATEX*)LocalLock(m_hFormat);if(!lpFormat)/failedtolockthememoryif(unsignedlong)mmioRead(m_h

29、mmio,(HPSTR)lpFormat,dwFmtSize)!=dwFmtSize)/failedtoreadformatchunk/离开fmt块mmioAscend(m_hmmio,&mmckinfoSubChunk,0);/寻找'data块mmckinfoSubChunk.ckid=mmioFOURCC(d,a,t,a);if(mmioDescend(m_hmmio,&mmckinfoSubChunk,&mmckinfoParent,MMIO_FINDCHUNK)/Cantfinddatachunk/获得'dat我的大小m_dwDataSize=m

30、mckinfoSubChunk.cksize;m_dwDataOffset=mmckinfoSubChunk.dwDataOffset;if(m_dwDataSize=0L)/nodatainthedatachunk/为音频数据分配内存lpData=newcharm_dwDataSize;if(!lpData)/faileif(mmioSeek(m_hmmio,SoundOffset,SEEK_SET)<0)/Failedtoreadthedatachunkm_WaveLong=mmioRead(m_hmmio,lpData,SoundLong);if(m_WaveLong<0)/

31、Failedtoreadthedatachunk/检查音频设备,返回音频输出设备的性能if(waveOutGetDeVCaps(WAVE_MAPPER,&pwoc,sizeof(WAVEOUTCAPS)!=0)/Unabletoallocateorlockmemory/检查音频输出设备是否能播放指定的音频文件if(waveOutOpen(&hWaveOut,DevsNum,lpFormat,NULL,NULL,CALLBACK_NULL)!=0)/FailedtoOPENthewaveoutdevices准备待播放的数据pWaveOutHdr.lpData=(HPSTR)lpD

32、ata;pWaveOutHdr.dwBufferLength=m_WaveLong;pWaveOutHdr.dwFlags=0;if(waveOutPrepareHeader(hWaveOut,&pWaveOutHdr,sizeof(WAVEHDR)!=0)/Failedtopreparethewavedatabuffer播放音频数据文件if(waveOutWrite(hWaveOut,&pWaveOutHdr,sizeof(WAVEHDR)!=0)/Failedtowritethewavedatabuffer关闭音频输出设备,释放内存waveOutReset(hWaveOut

33、);waveOutClose(hWaveOut);LocalUnlock(m_hFormat);LocalFree(m_hFormat);deletelpData;说明:1)以上使用的音频设备和声音文件操作函数的声明包含在mmsystem.h头文件中,因此在程序中必须用#include"mmsystem.h''语句力口入头文件。同时在编译时要加入动态连接导入库winmm.lib,具体实现方法是从DeveloperStudio的Project菜单中选择Settings,然后在Link选项卡上的Object/LibraryModules控制中加入winmm.lib。2)在

34、pWaveOutHdr.lpData中指定不同的数据,可以播放音频数据文件中任意指定位置的声音。3)以上程序均在VC+6.0中调试通过,在文中省略了对错误及异常情况的处理,在实际应用中必须加入。四.结论在VC+中可以根据应用需要采用不同的方法播放声音文件。简单应用可以直接调用声音播放函数。第二种方法可以把声音作为资源加入可执行文件中。如果在播放之前要对声音数据进行处理,MFC控件之ListCtrl的使用方法相关类及处理函数MFC:CListCtrl类SDK:以“ListView_开头的一些宏。如ListView_InsertColumn1 .CListCtrl风格LVS_ICON:为每个ite

35、m显示大图标LVS_SMALLICON:为每个item显示小图标LVS_LIST:显示一列带有小图标的itemLVS_REPORT:显示item详2田资料直观的理解:windows资源管理器,查看”标签下的大图标,小图标,列表,详细资料2 .设置listctrl风格及扩展风格LONGIStyle;IStyle=GetWindowLong(m_list.m_hWnd,GWL_STYLE);/获取当前窗口styleIStyle&=LVS_TYPEMASK;/清除显示方式位lStyle|=LVS_REPORT;/设置styleSetWindowLong(m_list.m_hWnd,GWL_S

36、TYLE,lStyle);/设置styleDWORDdwStyle=m_list.GetExtendedStyle();dwStyle|=LVS_EX_FULLROWSELECT;/选中某行使整行高亮(只适用与report风格的listctrl)dwStyle|=LVS_EX_GRIDLINES;/网格线(只适用与report风格的listctrl)dwStyle|=LVS_EX_CHECKBOXES;/item前生成checkbox控件m_list.SetExtendedStyle(dwStyle);/设置扩展风格注:listview的style请查阅msdn3 .插入数据m_list.In

37、sertColumn(0,"ID",LVCFMT_LEFT,40);/插入列m_list.InsertColumn(1,"NAME",LVCFMT_LEFT,50);intnRow=m_list.InsertItem(0,“插入行/m_list.SetItemText(nRow,1,"jacky蜀数据4 .一直选中item选中style中的Showselectionalways,或者在上面第2点中设置LVS_SHOWSELALWAYS5 .选中和取消选中一行intnIndex=0;/选中m_list.SetItemState(nIndex,LV

38、IS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);取消选中m_list.SetItemState(nIndex,0,LVIS_SELECTED|LVIS_FOCUSED);6 .得到listctrl中所有行的checkbox的状态m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);CStringstr;for(inti=0;i<m_list.GetItemCount();i+)if(m_list.GetItemState(i,LVIS_SELECTED)=LVIS_SELECTED|m_list.G

39、etCheck(i)str.Format(_T("第d行的checkbox为选中状态"),i);AfxMessageBox(str);7 .得到listctrl中所有选中行的序号方法一:CStringstr;for(inti=0;i<m_list.GetItemCount();i+)if(m_list.GetItemState(i,LVIS_SELECTED)=LVIS_SELECTED)str.Format(_T("选中了第%d行”),i);AfxMessageBox(str);方法二:POSITIONpos=m_list.GetFirstSelected

40、ItemPosition();if(pos=NULL)TRACE0("Noitemswereselected!/n");elsewhile(pos)intnItem=m_list.GetNextSelectedItem(pos);TRACE1("Item%dwasselected!/n”,nItem);/youcoulddoyourownprocessingonnItemhere8 .得到item的信息TCHARszBuf1024;LVITEMlvi;lvi.iItem=nItemIndex;lvi.iSubItem=0;lvi.mask=LVIF_TEXT;lv

41、i.pszText=szBuf;lvi.cchTextMax=1024;m_list.GetItem(&lvi);关于得到设置item的状态,还可以参考msdn文章Q173242:UseMaskstoSet/GetItemStatesinCListCtrl8.1 得到选中的行的每一项的信息得到具体的某一项:CStringstr;intnId;首先得到点击的位置POSITIONpos=m_listcontrol.GetFirstSelectedItemPosition();if(pos=NULL)MessageBox("请至少选择一项",''娃子理财&

42、quot;,MB_ICONEXCLAMATION);return;得到行号,通过POSITION转化nId=(int)m_listcontrol.GetNextSelectedItem(pos);得到列中的内容(0表示第一列,同理1,2,3表示第二,三,四列)str=m_listcontrol.GetItemText(nId,0);str=m_listcontrol.GetItemText(nId,1);9 .得到listctrl的所有列的header字符串内容LVCOLUMNlvcol;charstr256;intnColNum;CStringstrColumnName4;/假如有4列nCo

43、lNum=0;lvcol.mask=LVCF_TEXT;lvcol.pszText=str;lvcol.cchTextMax=256;while(m_list.GetColumn(nColNum,&lvcol)strColumnNamenColNum=lvcol.pszText;nColNum+;10 .使listctrl中一项可见,即滚动滚动条m_list.EnsureVisible(i,FALSE);11 .得到listctrl列数intnHeadNum=m_list.GetHeaderCtrl()->GetItemCount();12 .删除所有列方法一:while(m_l

44、ist.DeleteColumn(0)因为你删除了第一列后,后面的列会依次向上移动。方法二:intnColumns=4;for(inti=nColumns-1;i>=0;i-)m_list.DeleteColumn(i);13 .得到单击的listctrl的行列号添加listctrl控件的NM_CLICK消息相应函数voidCTest6Dlg:OnClickList1(NMHDR*pNMHDR,LRESULT*pResult)/方法一:/*DWORDdwPos=GetMessagePos();CPointpoint(LOWORD(dwPos),HIWORD(dwPos);m_list.S

45、creenToClient(&point);LVHITTESTINFOlvinfo;lvinfo.pt=point;lvinfo.flags=LVHT_ABOVE;intnItem=m_list.SubItemHitTest(&lvinfo);if(nItem!=-1)CStringstrtemp;strtemp.Format("单击的是第%d行第d列",lvinfo.iItem,lvinfo.iSubItem);AfxMessageBox(strtemp);*/方法二:/*NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMH

46、DR;if(pNMListView->iItem!=-1)CStringstrtemp;strtemp.Format("单击的是第%d行第d列",pNMListView->iItem,pNMListView->iSubItem);AfxMessageBox(strtemp);*/14 .判断是否点击在listctrl的checkbox上添加listctrl控件的NM_CLICK消息相应函数voidCTest6Dlg:OnClickList1(NMHDR*pNMHDR,LRESULT*pResult)DWORDdwPos=GetMessagePos();CP

47、ointpoint(LOWORD(dwPos),HIWORD(dwPos);m_list.ScreenToClient(&point);LVHITTESTINFOlvinfo;lvinfo.pt=point;lvinfo.flags=LVHT_ABOVE;UINTnFlag;intnItem=m_list.HitTest(point,&nFlag);判断是否点在checkbox上if(nFlag=LVHT_ONITEMSTATEICON)AfxMessageBox("点在listctrl的checkbox上");*pResult=0;15 .右键点击list

48、ctrl的item弹出菜单添加listctrl控件的NM_RCLICK消息相应函数voidCTest6Dlg:OnRclickList1(NMHDR*pNMHDR,LRESULT*pResult)NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMHDR;if(pNMListView->iItem!=-1)DWORDdwPos=GetMessagePos();CPointpoint(LOWORD(dwPos),HIWORD(dwPos);CMenumenu;VERIFY(menu.LoadMenu(IDR_MENU1);CMenu*popup=menu.Ge

49、tSubMenu(0);ASSERT(popup!=NULL);popup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);*pResult=0;16 .item切换焦点时(包括用键盘和鼠标切换item时),状态的一些变化顺序添加listctrl控件的LVN_ITEMCHANGED消息相应函数voidCTest6Dlg:OnItemchangedList1(NMHDR*pNMHDR,LRESULT*pResult)NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMHDR

50、;/TODO:AddyourcontrolnotificationhandlercodehereCStringsTemp;if(pNMListView->uOldState&LVIS_FOCUSED)=LVIS_FOCUSED&&(pNMListView->uNewState&LVIS_FOCUSED)=0)sTemp.Format("%dlostedfocus",pNMListView->iItem);elseif(pNMListView->uOldState&LVIS_FOCUSED)=0&&

51、;(pNMListView->uNewState&LVIS_FOCUSED)=LVIS_FOCUSED)sTemp.Format("%dgotfocus",pNMListView->iItem);if(pNMListView->uOldState&LVIS_SELECTED)=LVIS_SELECTED&&(pNMListView->uNewState&LVIS_SELECTED)=0)sTemp.Format("%dlostedselected",pNMListView->iItem

52、);elseif(pNMListView->uOldState&LVIS_SELECTED)=0&&(pNMListView->uNewState&LVIS_SELECTED)=LVIS_SELECTED)sTemp.Format("%dgotselected",pNMListView->iItem);17 .得到另一个进程里的listctrl控件的item内容18 .选中listview中的itemQ131284:HowToSelectaListviewItemProgrammatically19 .如何在CListVie

53、w中使用CListCtrl的派生类20 .listctrl的subitem添加图标m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES);m_list.SetItem(.);/具体参数请参考msdn21 .在CListCtrl显示文件,并根据文件类型来显示图标网上找到的代码,shareBOOLCTest6Dlg:OnInitDialog()CDialog:OnInitDialog();HIMAGELISThimlSmall;HIMAGELISThimlLarge;SHFILEINFOsfi;charcSysDirMAX_PATH;CStringstrBuf;

54、memset(cSysDir,0,MAX_PATH);GetWindowsDirectory(cSysDir,MAX_PATH);strBuf=cSysDir;sprintf(cSysDir,"%s",strBuf.Left(strBuf.Find("/")+1);himlSmall=(HIMAGELIST)SHGetFilelnfo(LPCSTR)cSysDir,0,&sfi,sizeof(SHFILEINFO),SHGFI_SYSICONINDEX|SHGFI_SMALLICON);himlLarge=(HIMAGELIST)SHGetFileInfo(LPCSTR)cSysDir,0,&sfi,sizeof(SHFILEINFO),SHGFI_SYSICONINDEX|SHGFI_LARGEICON);if(himlSmall&&himlLarge)SendMessage(m_list.m_hWnd,LVM_SETIMAGELIST,(WPARAM)LVSIL_SMALL,(LPARAM)himlSmal

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论