下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 vc6.0编程

vc6.0编程.doc

vc6.0编程

xudong_xd
2012-05-05 0人阅读 举报 0 0 暂无简介

简介:本文档为《vc6.0编程doc》,可适用于IT/计算机领域

对话框全屏一、简单对话框全屏显示方法       在OnInitDialog()中任意加入:       、ModifyStyle(WSCAPTION,,) 如果不想去掉标题栏去掉该句。              SendMessage(WMSYSCOMMAND,SCMAXIMIZE,)        、ShowWindow(SWSHOWMAXIMIZED)  二、复杂一点的对话框全屏显示方法随屏幕的分辩率而调节       voidCMainFrame::OnFullScreen()           {              GetWindowPlacement(mOldWndPlacement)                  CRectWindowRect                  GetWindowRect(WindowRect)                  CRectClientRect                  RepositionBars(,xffff,AFXIDWPANEFIRST,reposQuery,ClientRect)                  ClientToScreen(ClientRect)                 获取屏幕的分辨率                  intnFullWidth=GetSystemMetrics(SMCXSCREEN)                  intnFullHeight=GetSystemMetrics(SMCYSCREEN)                将除控制条外的客户区全屏显示到从(,)到(nFullWidth,nFullHeight)区域,            将(,)和(nFullWidth,nFullHeight)两个点外扩充原窗口和除控制条之外的              客户区位置间的差值,就得到全屏显示的窗口位置                  mFullScreenRectleft=WindowRectleftClientRectleft                  mFullScreenRecttop=WindowRecttopClientRecttop                  mFullScreenRectright=WindowRectrightClientRectrightnFullWidth              mFullScreenRectbottom=WindowRectbottomClientRectbottomnFullHeight                  mbFullScreen=TRUE  设置全屏显示标志为TRUE                  进入全屏显示状态                  WINDOWPLACEMENTwndpl                  wndpllength=sizeof(WINDOWPLACEMENT)                  wndplflags=                  wndplshowCmd=SWSHOWNORMAL                  wndplrcNormalPosition=mFullScreenRect                  SetWindowPlacement(wndpl)       }       三、对话框全屏及按钮控件移到相应位置       voidCXXXDlg::OnLButtonDown(UINTnFlags,CPointpoint)           {                                  intcx=::GetSystemMetrics(SMCXSCREEN)                intcy=::GetSystemMetrics(SMCYSCREEN)     CRectrtClient,rtBtn                CWnd *pWnd=GetDlgItem(IDCBUTTON)                GetClientRect(rtClient)            获得对话框客户区屏幕坐标                ClientToScreen(rtClient)           映射为屏幕坐标                pWnd>GetWindowRect(rtBtn)         获得button屏幕坐标                 intlx=rtBtnWidth()                button长度                intly=rtBtnHeight()               button高度                intdx=rtClientrightrtBtnright   离右边框的距离                intdy=rtClientbottomrtBtnbottom 离底边框的距离               MoveWindow(CRect(,,cx,cy))                     移动窗口                pWnd>MoveWindow(CRect(cxdxlx,cylydy,cxdx,cydy)) 移动button                  CDialog::OnLButtonDown(nFlags,point)         }       、五、用MoveWindow或SetWindowPos全屏对话框       首先计算出客户区的大小GetClientRect()       再计算出整个窗口的大小GetWindowRect()       然后再得到当前屏幕的大小GetSystemMetrics()       最后根据这三个数据进行换算当客户区为屏幕大小时窗口的位置的大小       计算完成后调用MoveWindow就可以了。基础篇:VC对话框小知识时间:::来源:网络作者:未知点击:次总结几点VC中关于对话框小知识供大家参考。一、对话框属性总结几点VC中关于对话框小知识供大家参考。一、对话框属性Styles>Clipsiblings:排除子窗口之间的相对区域也就是说当一个特定的窗口接收到绘图消息时将所有重叠窗口排除在外只重绘指定的子窗口。Styles>Clipchildren:当在父窗口内绘图时排除子窗口区域。MoreStylesSystemmodal:系统模式对话框Absolutealign:坐标相对于屏幕原点Setforeground:设置为前台窗口Nofailcreate:应用于WindowsNoidlemessage:不发送空闲消息Control:不使用标题栏的对话框Center:在屏幕中心显示对话框Centermouse:以鼠标坐标为对话框中心显示对话框Localedit:指定编辑控件的正文将存储于应用程序的局部数据段中ExtendedStylesToolWindow:工具栏窗体Clientedge:对话框边框下凹Staticedge:对话框边框为实边框Acceptfiles:是否接受文件拖放Controlparent:用<Tab>键在窗口的子窗口间搜索Contexthelp:在窗口标题栏添加一个问号按钮Noparentnotify:以这个风格创建的窗口在创建和销毁时不向父窗口发送WMPARENTNOTFY消息二、对话框的创建与显示模态对话框:CDlgdlgdlgDoModal()CDialog::OnOK()或CDialog::OnCancel()关闭模态对话框非模态对话框CDlg*dlg=newCDlgdlg>Create(IDDDIALOG,this)dlg>ShowWindow(SWSHOW)dlg>DestroyWindow()销毁非模态对话框若在一个非模态对话框中实现OnCancel方法需在内部调用DestroyWindow方法不要调用基类的OnCancel方法因为它调用EndDialog方法将使对话框不可见但不销毁对话框。deletedlgDestroyWindow只销毁窗口但不释放对象。delete释放对象。三、遍历对话框中的控件控件也是窗口所有可以用CWnd类的方法操作控件GetTopWindow方法可以获得第一个属于CWnd的子窗口GetNextWindow方法返回窗口管理器中的下一个窗口。首先在对话框中添加几个控件然后在主窗口的OnInitDialog中添加:CWnd*pWnd=GetTopWindow()while(pWnd!=){inti=pWnd>GetDlgCtrlID()CStringstrstrFormat("ID是:d",i)pWnd>SetWindowText(str)pWnd=pWnd>GetNextWindow()}四、消息处理函数共享指多个连续ID的控件都发出相同的消息使用ONCONTROLRANGE宏来实现类向导不支持ONCONTROLRANGE宏需手动添加:afxmsgOnButtonClicked()ONCONTROLRANGE(BNCLICKED,IDCBUTTON,IDCBUTTON,OnButtonClicked)然后在OnButtonClicked()中添加消息响应。设置VC对话框背景图:: 标签:vc   推送到技术圈设置VC对话框背景图  VC对话框默认的灰度背景实在是不美观填充背景图成了改善用户界面的一个很好的选择。  首先在资源视图中添加一个位图资源如命名为IDBBMPBK。  在对话框中添加OnEraseBkgnd()事件处理函数用于擦除背景进行重绘。其中添加的代码如下:BOOLDialogClass::OnEraseBkgnd(CDC*pDC){创建内存DCCDCMemDCCBitmap对象CBitmapBitmap,*pOldBitmapBITMAP句柄BITMAPbm加载位图BitmapLoadBitmap(IDBBMPBK)将位图资源与句柄绑定BitmapGetObject(sizeof(BITMAP),bm)创建与内存兼容的DCMemDCCreateCompatibleDC(pDC)替换原位图pOldBitmap=(CBitmap*)(MemDCSelectObject(Bitmap))获取绘制的区域CRectrcClientGetClientRect(rcClient)绘制到客户区pDC>BitBlt(,,rcClientWidth(),rcClientHeight(),MemDC,,,SRCCOPY)MemDCSelectObject(pOldBitmap)MemDCDeleteDC()returnTRUE}默认生成的OnEraseBkgnd()处理函数会有调用基类的处理函数然后再返回结果要注意把这一句直接删除然后直接返TRUE。本文出自CTOCOM技术博客动态创建TextBox控件TextBoxtb=newTextBox()for(i=i<=i){    tbid=ConvertTostring(id)    ThisPageFormControlsAdd(tb)        ResponseWrite("<br>")}VC获取系统时间、程序运行时间使用CTime类CStringstr获取系统时间CTimetmtm=CTime::GetCurrentTime()str=tmFormat("现在时间是Y年m月d日 X")MessageBox(str,,MBOK)  :得到系统时间日期(使用GetLocalTime)SYSTEMTIMEstCStringstrDate,strTimeGetLocalTime(st)strDateFormat("ddd",stwYear,stwMonth,stwDay)strTimeFormat("d:d:d",stwHour,stwMinute,stwSecond)  使用GetTickCount获取程序运行时间longt=GetTickCount()程序段开始前取得系统运行时间(ms)Sleep()longt=GetTickCount()()程序段结束后取得系统运行时间(ms)strFormat("time:dms",tt)前后之差即程序运行时间AfxMessageBox(str)获取系统运行时间longt=GetTickCount()CStringstr,strstrFormat("系统已运行d时",t)str=strt=strFormat("d分",t)str=strt=strFormat("d秒",t)str=strAfxMessageBox(str)全屏截取(改)      潘小龙,顾时明二人著的"用VC进行屏幕截取编程"一文中的代码有多处错误我在yuhl大虾的大力协助下对其进行修正以下代码只需复制粘帖就能使用:    文件保存在C盘根目录    CStringdt    CTimemCurDT    mCurDT=CTime::GetCurrentTime()    dtFormat("ddd",mCurDTGetYear(),mCurDTGetMonth(),mCurDTGetDay())    dt=mCurDTFormat("H时M分S秒")    dt="bmp"    CStringbmpname    bmpname="c:"        bmpname=dt          HDC      hScrDC,hMemDC          屏幕和内存设备描述表    int      nX,nY,nX,nY              位图宽度和高度    int      xScrn,yScrn            屏幕分辨率    HBITMAP    hBitmap,hOldBitmap      为屏幕创建设备描述表    hScrDC=CreateDC("DISPLAY",,,)    为屏幕设备描述表创建兼容的内存设备描述表    hMemDC=CreateCompatibleDC(hScrDC)    获得屏幕分辨率    xScrn=GetDeviceCaps(hScrDC,HORZRES)    yScrn=GetDeviceCaps(hScrDC,VERTRES)    获得全屏坐标    nX=    nY=    nX=xScrn    nY=yScrn      创建一个与屏幕设备描述表兼容的位图    hBitmap=CreateCompatibleBitmap(hScrDC,nX,nY)    把新位图选到内存设备描述表中    hOldBitmap=(HBITMAP)SelectObject(hMemDC,hBitmap)    把屏幕设备描述表拷贝到内存设备描述表中    BitBlt(hMemDC,,,nX,nY,hScrDC,nX,nY,SRCCOPY)    得到屏幕位图的句柄    hBitmap=(HBITMAP)SelectObject(hMemDC,hOldBitmap)    清除    DeleteDC(hScrDC)    DeleteDC(hMemDC)    HDC            hDC            int            iBits          当前显示分辨率下每个像素所占字节数    WORD          wBitCount        位图中每个像素所占字节数    定义调色板大小位图中像素字节大小    DWORD          dwPaletteSize=,                  dwBmBitsSize,                  dwDIBSize,dwWritten    BITMAP        Bitmap            位图属性结构    BITMAPFILEHEADER  bmfHdr            位图文件头结构    BITMAPINFOHEADER  bi                位图信息头结构    LPBITMAPINFOHEADERlpbi              指向位图信息头结构    HANDLE          fh,hDib,hPal,hOldPal=    定义文件分配内存句柄调色板句柄      计算位图文件每个像素所占字节数    hDC=CreateDC("DISPLAY",,,)    iBits=GetDeviceCaps(hDC,BITSPIXEL)*    GetDeviceCaps(hDC,PLANES)    DeleteDC(hDC)    if(iBits<=)      wBitCount=    elseif(iBits<=)      wBitCount=    elseif(iBits<=)      wBitCount=    elseif(iBits<=)      wBitCount=    else    wBitCount=iBits    计算调色板大小    if(wBitCount<=)      dwPaletteSize=(<<  wBitCount)*      sizeof(RGBQUAD)      设置位图信息头结构    GetObject(hBitmap,sizeof(BITMAP),(LPSTR)Bitmap)    bibiSize            =sizeof(BITMAPINFOHEADER)    bibiWidth          =BitmapbmWidth    bibiHeight          =BitmapbmHeight    bibiPlanes          =    bibiBitCount        =wBitCount    bibiCompression    =BIRGB    bibiSizeImage      =    bibiXPelsPerMeter  =    bibiYPelsPerMeter  =    bibiClrUsed        =    bibiClrImportant    =    dwBmBitsSize=((BitmapbmWidth*wBitCount))**BitmapbmHeight    为位图内容分配内存    hDib  =GlobalAlloc(GHND,dwBmBitsSizedwPaletteSizesizeof(BITMAPINFOHEADER))    lpbi=(LPBITMAPINFOHEADER)GlobalLock(hDib)    *lpbi=bi    处理调色板      hPal=GetStockObject(DEFAULTPALETTE)    if(hPal)    {      hDC=::GetDC()      hOldPal=SelectPalette(hDC,(HPALETTE)hPal,FALSE)      RealizePalette(hDC)    }    获取该调色板下新的像素值    GetDIBits(hDC,hBitmap,,(UINT)BitmapbmHeight,(LPSTR)lpbisizeof(BITMAPINFOHEADER)dwPaletteSize,(BITMAPINFO*)lpbi,DIBRGBCOLORS)    恢复调色板      if(hOldPal)    {      SelectPalette(hDC,(HPALETTE)hOldPal,TRUE)      RealizePalette(hDC)      ::ReleaseDC(,hDC)    }    创建位图文件        fh=CreateFile(bmpname,GENERICWRITE,,,CREATEALWAYS,FILEATTRIBUTENORMAL|FILEFLAGSEQUENTIALSCAN,)    设置位图文件头    bmfHdrbfType=xD  "BM"    dwDIBSize=sizeof(BITMAPFILEHEADER)sizeof(BITMAPINFOHEADER)dwPaletteSizedwBmBitsSize      bmfHdrbfSize=dwDIBSize    bmfHdrbfReserved=    bmfHdrbfReserved=    bmfHdrbfOffBits=(DWORD)sizeof    (BITMAPFILEHEADER)(DWORD)sizeof(BITMAPINFOHEADER)dwPaletteSize    写入位图文件头    WriteFile(fh,(LPSTR)bmfHdr,sizeof(BITMAPFILEHEADER),dwWritten,)    写入位图文件其余内容    WriteFile(fh,(LPSTR)lpbi,dwDIBSize,    dwWritten,)    清除      GlobalUnlock(hDib)    GlobalFree(hDib)    CloseHandle(fh)完截屏得到了一个bmp转换其为jpeg么这个问题第个回答:保存的时候不是有保存类型么里面有JPEG啊这个问题第个回答:如果是使用程序可以自己压缩一下。建议使用jpegsr库。或 VC 的CImage类这个问题第个回答:#include <atlimageh>CImage imgimgLoad("e:abmp")imgSave("e:ajpg")这个问题第个回答:直接把bmp改为jpg这个问题第个回答:我自己昨天已经搞定了加上一个jpeg的库调用就是了谢谢大家的回复。定时截取当前屏幕图像的小程一)功能实现了一个定时截取当前屏幕图像的小程序。(二)准备工作)建立VCCONSOLEAPPLICATION选择MFCSUPPORT)在STDAFXH文件中加入头文件:conioh(三)主程序主程序代码如下:        charFilename        intcount=        while(!kbhit())用户按键则退出        {            Sleep()挂起秒            count                        sprintf(Filename,"dbmp",count)            Screen(Filename)调用Screen函数        }以上代码每隔秒钟调用一次函数Screen将当前屏幕保存到文件中。(四)工作函数ScreenScreen实现了当前屏幕内容到bmp文件的拷贝。源代码如下:voidScreen(charfilename){    CDC*pDC屏幕DC    pDC=CDC::FromHandle(GetDC())获取当前整个屏幕DC    intBitPerPixel=pDC>GetDeviceCaps(BITSPIXEL)获得颜色模式    intWidth=pDC>GetDeviceCaps(HORZRES)    intHeight=pDC>GetDeviceCaps(VERTRES)    cout<<"当前屏幕色彩模式为"<<BitPerPixel<<"位色彩"<<endl         <<"屏幕宽度:"<<Width<<endl         <<"屏幕高度:"<<Height<<endl<<endl        CDCmemDC内存DC    memDCCreateCompatibleDC(pDC)        CBitmapmemBitmap,*oldmemBitmap建立和屏幕兼容的bitmap    memBitmapCreateCompatibleBitmap(pDC,Width,Height)    oldmemBitmap=memDCSelectObject(memBitmap)将memBitmap选入内存DC    memDCBitBlt(,,Width,Height,pDC,,,SRCCOPY)复制屏幕图像到内存DC    以下代码保存memDC中的位图到文件    BITMAPbmp    memBitmapGetBitmap(bmp)获得位图信息        FILE*fp=fopen(filename,"wb")    BITMAPINFOHEADERbih={}位图信息头    bihbiBitCount=bmpbmBitsPixel每个像素字节大小    bihbiCompression=BIRGB    bihbiHeight=bmpbmHeight高度    bihbiPlanes=    bihbiSize=sizeof(BITMAPINFOHEADER)    bihbiSizeImage=bmpbmWidthBytes*bmpbmHeight图像数据大小    bihbiWidth=bmpbmWidth宽度        BITMAPFILEHEADERbfh={}位图文件头    bfhbfOffBits=sizeof(BITMAPFILEHEADER)sizeof(BITMAPINFOHEADER)到位图数据的偏移量    bfhbfSize=bfhbfOffBitsbmpbmWidthBytes*bmpbmHeight文件总的大小    bfhbfType=(WORD)xd        fwrite(bfh,,sizeof(BITMAPFILEHEADER),fp)写入位图文件头        fwrite(bih,,sizeof(BITMAPINFOHEADER),fp)写入位图信息头        byte*p=newbytebmpbmWidthBytes*bmpbmHeight申请内存保存位图数据    GetDIBits(memDCmhDC,(HBITMAP)memBitmapmhObject,,Height,p,        (LPBITMAPINFO)bih,DIBRGBCOLORS)获取位图数据    fwrite(p,,bmpbmWidthBytes*bmpbmHeight,fp)写入位图数据    deletep    fclose(fp)    memDCSelectObject(oldmemBitmap)}图形闪烁处理在实现绘图的过程中显示的图形总是会闪烁笔者曾经被这个问题折磨了好久通过向高手请教搜索资料问题基本解决现将文档整理出来以供大家参考显示的图形为什么会闪烁  我们的绘图过程大多放在OnDraw或者OnPaint函数中OnDraw在进行屏幕显示时是由OnPaint进行调用的。当窗口由于任何原因需要重绘时总是先用背景色将显示区清除然后才调用OnPaint而背景色往往与绘图内容反差很大这样在短时间内背景色与显示图形的交替出现使得显示窗口看起来在闪。如果将背景刷设置成这样无论怎样重绘图形都不会闪了。当然这样做会使得窗口的显示乱成一团因为重绘时没有背景色对原来绘制的图形进行清除而又叠加上了新的图形。有的人会说闪烁是因为绘图的速度太慢或者显示的图形太复杂造成的其实这样说并不对绘图的显示速度对闪烁的影响不是根本性的。例如在OnDraw(CDC*pDC)中这样写:pDC>MoveTo(,)pDC>LineTo(,)  这个绘图过程应该是非常简单、非常快了吧但是拉动窗口变化时还是会看见闪烁。其实从道理上讲画图的过程越复杂越慢闪烁应该越少因为绘图用的时间与用背景清除屏幕所花的时间的比例越大人对闪烁的感觉会越不明显。比如:清楚屏幕时间为s绘图时间也是为s这样在s内的连续重画中就要闪烁次如果清楚屏幕时间为s不变而绘图时间为s这样s内的连续重画只会闪烁一次。这个也可以试验在OnDraw(CDC*pDC)中这样写:for(inti=i<i){pDC>MoveTo(,i)pDC>LineTo(,i)}  程序有点极端但是能说明问题。  说到这里可能又有人要说了为什么一个简单图形看起来没有复杂图形那么闪呢?这是因为复杂图形占的面积大重画时造成的反差比较大所以感觉上要闪得厉害一些但是闪烁频率要低。那为什么动画的重画频率高而看起来却不闪?这里我就要再次强调了闪烁是什么?闪烁就是反差反差越大闪烁越厉害。因为动画的连续两个帧之间的差异很小所以看起来不闪。如果不信可以在动画的每一帧中间加一张纯白的帧不闪才怪呢。、如何避免闪烁  在知道图形显示闪烁的原因之后对症下药就好办了。首先当然是去掉MFC提供的背景绘制过程了。实现的方法很多:  *可以在窗口形成时给窗口的注册类的背景刷付  *也可以在形成以后修改背景staticCBrushbrush(RGB(,,))SetClassLong(this>mhWnd,GCLHBRBACKGROUND,(LONG)(HBRUSH)brush)  *要简单也可以重载OnEraseBkgnd(CDC*pDC)直接返回TRUE  这样背景没有了结果图形显示的确不闪了但是显示也象前面所说的一样变得一团乱。怎么办?这就要用到双缓存的方法了。双缓冲就是除了在屏幕上有图形进行显示以外在内存中也有图形在绘制。我们可以把要显示的图形先在内存中绘制好然后再一次性的将内存中的图形按照一个点一个点地覆盖到屏幕上去(这个过程非常快因为是非常规整的内存拷贝)。这样在内存中绘图时随便用什么反差大的背景色进行清除都不会闪因为看不见。当贴到屏幕上时因为内存中最终的图形与屏幕显示图形差别很小(如果没有运动当然就没有差别)这样看起来就不会闪。、如何实现双缓冲  首先给出实现的程序然后再解释同样是在OnDraw(CDC*pDC)中:CDCMemDC首先定义一个显示设备对象CBitmapMemBitmap定义一个位图对象随后建立与屏幕显示兼容的内存显示设备MemDCCreateCompatibleDC()这时还不能绘图因为没有地方画下面建立一个与屏幕显示兼容的位图至于位图的大小嘛可以用窗口的大小MemBitmapCreateCompatibleBitmap(pDC,nWidth,nHeight)将位图选入到内存显示设备中只有选入了位图的内存显示设备才有地方绘图画到指定的位图上CBitmap*pOldBit=MemDCSelectObject(MemBitmap)先用背景色将位图清除干净这里我用的是白色作为背景你也可以用自己应该用的颜色MemDCFillSolidRect(,,nWidth,nHeight,RGB(,,))绘图MemDCMoveTo(……)MemDCLineTo(……)将内存中的图拷贝到屏幕上进行显示pDC>BitBlt(,,nWidth,nHeight,MemDC,,,SRCCOPY)绘图完成后的清理MemBitmapDeleteObject()MemDCDeleteDC()  请参阅注释。、如何提高绘图的效率  实际上在OnDraw(CDC*pDC)中绘制的图并不是所有都显示了的例如:你在OnDraw中画了两个矩形在一次重绘中虽然两个矩形的绘制函数都有执行但是很有可能只有一个显示了这是因为MFC本身为了提高重绘的效率设置了裁剪区。裁剪区的作用就是:只有在这个区内的绘图过程才会真正有效在区外的是无效的即使在区外执行了绘图函数也是不会显示的。因为多数情况下窗口重绘的产生大多是因为窗口部分被遮挡或者窗口有滚动发生改变的区域并不是整个图形而只有一小部分这一部分需要改变的就是pDC中的裁剪区了。因为显示(往内存或者显存都叫显示)比绘图过程的计算要费时得多有了裁剪区后显示的就只是应该显示的部分大大提高了显示效率。但是这个裁剪区是MFC设置的它已经为我们提高了显示效率在进行复杂图形的绘制时如何进一步提高效率呢?那就只有去掉在裁剪区外的绘图过程了。可以先用pDC>GetClipBox()得到裁剪区然后在绘图时判断你的图形是否在这个区内如果在就画不在就不画。  如果你的绘图过程不复杂这样做可能对你的绘图效率不会有提高。  具体程序大家可看以下源代码:、无闪烁背景图的绘制代码实现无闪烁背景图绘制程序设计:icemen(温冰)树爱兵BOOLCStrucView::OnEraseBkgnd(CDC*pDC){intnWidthintnHeightCView::OnEraseBkgnd(pDC)CStrucDoc*pDoc=GetDocument()ASSERTVALID(pDoc)CRectrectGetWindowRect(rect)nWidth=rectWidth()nHeight=rectHeight()CDCMemDCCBitmapMemBitmapMemDCCreateCompatibleDC()MemBitmapCreateCompatibleBitmap(pDC,nWidth,nHeight)CBitmap*pOldBit=MemDCSelectObject(MemBitmap)MemDCFillSolidRect(,,nWidth,nHeight,RGB(,,))以上为画背景色以下为画背景图GetClientRect(rect)BITMAPbmCDCdcMemVERIFY(mbmpGetObject(sizeof(bm),(LPVOID)bm))dcMemCreateCompatibleDC(pDC)CBitmap*pOldBMP=(CBitmap*)dcMemSelectObject(mbmp)MemDCBitBlt((rectrightbmbmWidth),(rectbottombmbmHeight),bmbmWidth,bmbmHeight,dcMem,,,SRCCOPY)dcMemSelectObject(pOldBMP)以上为画背景图pDC>BitBlt(,,nWidth,nHeight,MemDC,,,SRCCOPY)MemBitmapDeleteObject()MemDCDeleteDC()returnTRUE}无闪烁背景图绘制  注:程序中mbmp为相应的StrucViewh中定义,为位图资源类protected:CBitmapmbmp  并应加上下面段,当然,你可在任何时候加入loadBitmap子例程,也可加入文件资源,那由得你了!CStrucView::CStrucView(){VERIFY(mbmpLoadBitmap(IDBBITMAP))}VC 对话框设置背景颜色和图片改变背景颜色有两种方法:、在app的初始化函数中调用:void SetDialogBkColor( COLORREF clrCtlBk = RGB(, , ), COLORREF clrCtlText = RGB(, , ) )、在对话框类的OnCtlColor函数中:if(nCtlColor == CTLCOLORDLG) {  CBrush *brush  brush = new CBrush(RGB(,,))  return (HBRUSH)(brush>mhObject) }设置背景位图:void CTestDlg::OnPaint() { CRect r GetClientRect(r) CPaintDC dc(this) CRect rect=CRect(,,rWidth(),rHeight()) GetClientRect(rect) CDC dcMem  dcMemCreateCompatibleDC(dc)  CBitmap bmpBackground bmpBackgroundLoadBitmap(IDBBITMAP) BITMAP bitMap bmpBackgroundGetBitmap(bitMap) CBitmap *pbmpOld=dcMemSelectObject(bmpBackground) dcStretchBlt(,,rectWidth(),rectHeight(),dcMem,,,bitMapbmWidth,bitMapbmHeight,SRCCOPY) }(一)非动态显示图片(即图片先通过资源管理器载入,有一个固定ID)(二)动态载入图片(即只需要在程序中指定图片的路径即可载入)为方便说明,我们已经建好一个基于对话框的工程,名为Ttest对话框类为CTestDlg(一)vcpicture控件非动态载入图片方法先从最简单的开始,用picture控件来实现步骤:先在资源里Import一张图片,ID为IDBBITMAP然后在对话框上添加一个picture控件,右键点击打开属性,将type下拉框选择BITMAP,紧跟着下面就出现一个Image下拉框,拉开就会看到所有已经载入好的图片,选择你要的图片运行程序即可看到方法vcpicture控件通过背景图同样如上,先载入一张图片,ID为IDBBITMAPTestDlgh中CBrushmbrBk在public中定义TestDlgcpp中在初始化函数OnInitDialog()中加入:BOOLCTestDlg::OnInitDialog(){  CDialog::OnInitDialog()  CBitmapbmp  bmpLoadBitmap(IDBBITMAP)  mbrBkCreatePatternBrush(bmp)  bmpDeleteObject()  returnTRUE  returnTRUE  unlessyousetthefocustoacontrol}在打开类向导,找到WMCTLCOLOR消息,重载得对应函数OnCtlColor(),添加如下:HBRUSHCTestDlg::OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor){  HBRUSHhbr=CDialog::OnCtlColor(pDC,pWnd,nCtlColor)  if(pWnd==this){  returnmbrBk}  returnhbr}(二)vcpicture控件动态载入图片方法图像控件(本例用KoDak图像编辑控件)首先应该保证系统中有这个控件。注意它不能单独使用必须和

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/101

vc6.0编程

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利