| 发表于:2007-04-23 12:48:381楼 得分:10 |
hwnd hdeskwnd = ::getdesktopwindow();//获得屏幕的hwnd. hdc hscreendc = ::getdc(hdeskwnd); //获得屏幕的hdc. hdc memdc = ::createcompatibledc(hscreendc); rect rect; ::getwindowrect(hdeskwnd,&rect); hbitmap hbitmap = ::createcompatiblebitmap(hscreendc,rect.right,rect.bottom); hgdiobj holdbmp = ::selectobject(memdc,hbitmap); ::bitblt(memdc,0,0,rect.right,rect.bottom,hscreendc,rect.left,rect.top,srccopy); hbitmap=(hbitmap)::selectobject(memdc,holdbmp); m_deskimage.attach(hbitmap); istream* pstmimage = null; hglobal hmembmp = globalalloc(gmem_moveable,0);//可移动的缓冲区 if (hmembmp == null) return null; createstreamonhglobal(hmembmp, false, &pstmimage);//将内存区b作为流的起始 if (pstmimage == null) { globalfree(hmembmp); messagebox( "为空 "); return null; } m_deskimage.save(pstmimage,gdiplus::imageformatjpeg); byte* pbybmp = (byte *)globallock(hmembmp);//得到缓冲区的起始地址 //cfile mfile( "234.jpg ",cfile::modecreate ¦cfile::modewrite ¦cfile::typebinary); globalunlock(hmembmp); //mfile.write(pbybmp,globalsize(hmembmp)); //mfile.close(); int msize=globalsize(hmembmp); int seek=0; int sndcount=0; m_gpackage.ncount=msize; while (1) { memcpy(m_gpackage.m_buf,pbybmp+seek,3072); sndcount=m_clientsock.send(&m_gpackage,sizeof(package)); seek+=3072; //trace( "%d,seek:%d,size:%d\n ",sndcount,seek,msize); if(msize-seek <=3072) { memcpy(m_gpackage.m_buf,pbybmp+seek,msize-seek); sndcount=m_clientsock.send(&m_gpackage,sizeof(package)); break; } } pstmimage-> release(); globalfree(hmembmp); if(m_deskimage) { m_deskimage.detach(); ::deleteobject(hbitmapc); m_deskimage.destroy(); } ::deleteobject(hbitmap); //::releasedc(hdeskwnd,memdc) ::deleteobject(memdc); ::deletedc(memdc); ::releasedc(hdeskwnd,hscreendc); ::deletedc(hscreendc); | | |
|