我当前的DC中选入了一幅图,我想剪切它中间的一块,然后用另外的图片来代替这一块,该如何做呢?谢谢
解决方案 »
- 想用MFC做个宾馆预订系统 大家给个思路?
- 能否谈谈客户端SOCKET编程模型以及设计?
- 下面这段话什么意思,就是他觉得那个例子的意思
- 有关 PostMessage的问题
- 请教高手,,我需要在项目中使用PORT模式来下载FPT服务器上的文件,,,,,,,不太理解PORT模式的转输过程?????
- 消息函数有没有执行
- 如何反编译dll?
- 如何使UI线程窗口一启动就是隐藏的?
- ATL的Draw的ATL_DRAWINFO结构中有个ASPECT的,这个是干什么用的?
- 有何好书?
- 如何更改Edit控件的前景和背景色,在线结贴。
- CEdit::ReplaceSel给CEditView输入数据遇到(“\r\n”)不换行怎么回事
CBitmap *pOld;
int Width,Height;
CDC tdc;
BITMAP btm;
DWORD size;
CDC dc;
RECT Rect;
dc.CreateDC("DISPLAY",NULL,NULL,NULL);
Width=Rect.right-Rect.left;
Height=Rect.bottom-Rect.top;
bm.CreateCompatibleBitmap(&dc,Width,Height);
tdc.CreateCompatibleDC(&dc);
pOld=tdc.SelectObject(&bm);
tdc.BitBlt( 0 , 0 , Width, Height, &dc, Rect.left , Rect.top , SRCCOPY);
//BOOL BitBlt(int x,int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );
tdc.SelectObject(pOld);
bm.GetBitmap(&btm);
size=btm.bmWidthBytes*btm.bmHeight;
LPSTR lpData=(LPSTR)GlobalAllocPtr(GPTR,size);
/////////////////////////////////////////////
BITMAPINFOHEADER bih;
bih.biBitCount=btm.bmBitsPixel;
bih.biClrImportant=0;
bih.biClrUsed=0;
bih.biCompression=0;
bih.biHeight=btm.bmHeight;
bih.biPlanes=1;
bih.biSize=sizeof(BITMAPINFOHEADER);
bih.biSizeImage=size;
bih.biWidth=btm.bmWidth;
bih.biXPelsPerMeter=0;
bih.biYPelsPerMeter=0;
///////////////////////////////////
GetDIBits(dc,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);
if (OpenClipboard()) //hWnd为程序窗口句柄
{
//清空剪贴板
EmptyClipboard();
//把屏幕内容粘贴到剪贴板上,bm为刚才的屏幕位图句柄
SetClipboardData(CF_BITMAP, bm);
//关闭剪贴板
CloseClipboard();
}这可以剪掉想要的一块。并贴制剪贴板
CPoint pt_Start;
if ((point.x-10)>=0)
{
pt_Start.x = point.x-10;
}
else
{
pt_Start.x = 0;
}
if ((point.y-10)>=0)
{
pt_Start.y = point.y-10;
}
else
{
pt_Start = 0;
} m_pCurDC->BitBlt(pt_Start.x,pt_Start.y,20,20,&Memdc,pt_Start.x,pt_Start.y,SRCCOPY);
m_nMemDC.BitBlt(pt_Start.x,pt_Start.y,20,20,&Memdc,pt_Start.x,pt_Start.y,SRCCOPY);