十八、剪切板上文本数据的传送把文本放置到剪接板上:CString source; //put your text in source if(OpenClipboard()) { HGLOBAL clipbuffer; char * buffer; EmptyClipboard(); clipbuffer = GlobalAlloc(GMEM_DDESHARE, source.GetLength()+1); buffer = (char*)GlobalLock(clipbuffer); strcpy(buffer, LPCSTR(source)); GlobalUnlock(clipbuffer); SetClipboardData(CF_TEXT,clipbuffer); CloseClipboard(); }
//从剪接板上获取文本:
char * buffer; if(OpenClipboard()) { buffer = (char*)GetClipboardData(CF_TEXT); //do something with buffer here //before it goes out of scope } CloseClipboard(); 十九、将捕捉屏幕图像到剪切版中void CShowBmpInDlgDlg::OnCutScreen() { ShowWindow(SW_HIDE); RECT r_bmp={0,0,::GetSystemMetrics(SM_CXSCREEN), ::GetSystemMetrics(SM_CYSCREEN)}; HBITMAP hBitmap; hBitmap=CopyScreenToBitmap(&r_bmp); //hWnd为程序窗口句柄 if (OpenClipboard()) { EmptyClipboard(); SetClipboardData(CF_BITMAP, hBitmap); CloseClipboard(); } ShowWindow(SW_SHOW); } HBITMAP CShowBmpInDlgDlg::CopyScreenToBitmap(LPRECT lpRect) { //lpRect 代表选定区域 { HDC hScrDC, hMemDC; // 屏幕和内存设备描述表 HBITMAP hBitmap, hOldBitmap; // 位图句柄 int nX, nY, nX2, nY2; // 选定区域坐标 int nWidth, nHeight; // 位图宽度和高度 int xScrn, yScrn; // 屏幕分辨率 // 确保选定区域不为空矩形 if (IsRectEmpty(lpRect)) return NULL; //为屏幕创建设备描述表 hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL); //为屏幕设备描述表创建兼容的内存设备描述表 hMemDC = CreateCompatibleDC(hScrDC); // 获得选定区域坐标 nX = lpRect->left; nY = lpRect->top; nX2 = lpRect->right; nY2 = lpRect->bottom; // 获得屏幕分辨率 xScrn = GetDeviceCaps(hScrDC, HORZRES); yScrn = GetDeviceCaps(hScrDC, VERTRES); //确保选定区域是可见的 if (nX<0) nX = 0; if (nY<0) nY = 0; if (nX2>xScrn) nX2 = xScrn; if (nY2>yScrn) nY2 = yScrn; nWidth = nX2 - nX; nHeight = nY2 - nY; // 创建一个与屏幕设备描述表兼容的位图 hBitmap = CreateCompatibleBitmap (hScrDC, nWidth, nHeight); // 把新位图选到内存设备描述表中 hOldBitmap =(HBITMAP)SelectObject(hMemDC, hBitmap); // 把屏幕设备描述表拷贝到内存设备描述表中 BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, nX, nY, SRCCOPY); //得到屏幕位图的句柄 hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap); //清除 DeleteDC(hScrDC); DeleteDC(hMemDC); // 返回位图句柄 return hBitmap; } } 二十、如何将位图缩放显示在Static控件中//在Staic控件内显示位图 void CShowBmpInDlgDlg::ShowBmpInStaic() { CBitmap hbmp; HBITMAP hbitmap; //将pStatic指向要显示的地方 CStatic *pStaic; pStaic=(CStatic*)GetDlgItem(IDC_IMAGE); //装载资源 MM.bmp是我的一个文件名,用你的替换 hbitmap=(HBITMAP)::LoadImage (::AfxGetInstanceHandle(),"MM.bmp", IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); hbmp.Attach(hbitmap); //获取图片格式 BITMAP bm; hbmp.GetBitmap(&bm); CDC dcMem; dcMem.CreateCompatibleDC(GetDC()); CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(hbmp); CRect lRect; pStaic->GetClientRect(&lRect); //显示位图 pStaic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Height(), &dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY); dcMem.SelectObject(&poldBitmap); }
|