正在阅读:VC中的常用的20个方法VC中的常用的20个方法

2005-02-22 10:17 出处: 作者:oury 责任编辑:xietaoming

十八、剪切板上文本数据的传送把文本放置到剪接板上:

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);
}

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品