示例#1
0
文件: QnDC.cpp 项目: Omgan/code4me
// 获取当前窗体对应区域的图片
HBITMAP QnDC::GetBitmap(CWnd* pWnd)
{
	CRect rect;
	pWnd->GetWindowRect(rect);
	m_pWnd->ScreenToClient(rect);
	return GetBitmapFromDC(rect);
}
    bool platform_support::load_img_from_dc(unsigned idx, HDC hdc)
    {
        if(idx < max_images) 
        {
#ifndef _MG_MINIMALGRAF
            if(m_specific->m_surf_img[idx]) 
                UnloadBitmap(m_specific->m_surf_img[idx]);
            else
                m_specific->m_surf_img[idx] = (PBITMAP)calloc(1, sizeof(BITMAP)); 
#endif

#if 0
            if (LoadBitmapFromMem(m_specific->m_surf_window, 
                                m_specific->m_surf_img[idx], 
                                (const void *)LockDC(hdc, NULL, NULL, NULL, NULL), 
                                0,
                                "bmp") != 0)
#else
            HDC tmpdc = CreateCompatibleDC(m_specific->m_surf_window);
            if(tmpdc == HDC_INVALID)
                return false;

            BitBlt(hdc, 0, 0, 0, 0, tmpdc, 0, 0, 0);
            if ( !GetBitmapFromDC(tmpdc, 
                            0, 0, 240, 320, 
                            m_specific->m_surf_img[idx]) )
#endif
            {
                DeleteCompatibleDC(tmpdc);
                return false;
            }

            DeleteCompatibleDC(tmpdc);
#if 0
            FillBoxWithBitmap(HDC_SCREEN, 350, 0, 0, 0, 
                    m_specific->m_surf_img[idx]);
            //BitBlt(hdc, 0, 0, 0, 0, HDC_SCREEN, 500, 0, true);
#endif

#if 0
            printf("load img: w=%d, h=%d, pitch=%d, pixels=%x\n", 
                    m_specific->m_surf_img[idx]->bmWidth, 
                    m_specific->m_surf_img[idx]->bmHeight, 
                    m_specific->m_surf_img[idx]->bmPitch, 
                    m_specific->m_surf_img[idx]->bmBits);
#endif
            m_rbuf_img[idx].attach(m_specific->m_surf_img[idx]->bmBits, 
                    m_specific->m_surf_img[idx]->bmWidth, 
                    m_specific->m_surf_img[idx]->bmHeight, 
                    m_flip_y?(-m_specific->m_surf_img[idx]->bmPitch):
                            m_specific->m_surf_img[idx]->bmPitch);
            return true;
        }
        return false;
    }
示例#3
0
void GetCaretBitmaps (PCARETINFO pCaretInfo)
{
    int i;
    int sx, sy;
        
    // convert to screen coordinates
    sx = pCaretInfo->x;
    sy = pCaretInfo->y;
    ClientToScreen (pCaretInfo->hOwner, &sx, &sy);
        
    // save normal bitmap first.
#ifdef _USE_NEWGAL
    pCaretInfo->caret_bmp.bmBits = pCaretInfo->pNormal;
    GetBitmapFromDC (HDC_SCREEN, sx, sy, 
                    pCaretInfo->caret_bmp.bmWidth,
                    pCaretInfo->caret_bmp.bmHeight,
                    &pCaretInfo->caret_bmp);
#else
    SaveScreenBox (sx, sy, 
                       pCaretInfo->nEffWidth, pCaretInfo->nEffHeight,
                       pCaretInfo->pNormal);
#endif

    // generate XOR bitmap.
    if (pCaretInfo->pBitmap) {
        BYTE* normal;
        BYTE* bitmap;
        BYTE* xored;
                
        normal = pCaretInfo->pNormal;
        bitmap = pCaretInfo->pBitmap->bmBits;
        xored  = pCaretInfo->pXored;
            
        for (i = 0; i < pCaretInfo->nBytesNr; i++)
            xored[i] = normal[i] ^ bitmap[i];
    }
    else {
        BYTE* normal;
        BYTE* xored;
        BYTE xor_byte;

        if (BITSPERPHYPIXEL < 8)
            xor_byte = 0x0F;
        else
            xor_byte = 0xFF;
                
        normal = pCaretInfo->pNormal;
        xored  = pCaretInfo->pXored;
            
        for (i = 0; i < pCaretInfo->nBytesNr; i++)
            xored[i] = normal[i] ^ xor_byte;
    }
}
    bool platform_support::load_img_from_bitmap(unsigned idx, PBITMAP pbmp)
    {
        if(idx < max_images) 
        {
            int ret = FALSE;

#ifndef _MG_MINIMALGRAF
            if(m_specific->m_surf_img[idx]) 
                UnloadBitmap(m_specific->m_surf_img[idx]);
            else
                m_specific->m_surf_img[idx] = (PBITMAP)calloc(1, sizeof(BITMAP)); 
#endif

            HDC tmpdc = CreateCompatibleDC(m_specific->m_surf_window);
            HDC tmpdc2 = CreateCompatibleDC(HDC_SCREEN);

            if(tmpdc == HDC_INVALID)
                return false;

            FillBoxWithBitmap(tmpdc2, 0, 0, pbmp->bmWidth, pbmp->bmHeight, 
                    pbmp);

            BitBlt(tmpdc2, 0, 0, 0, 0, tmpdc, 0, 0, 0);
            do {
                if (!GetBitmapFromDC(tmpdc, 
                            0, 0, 240, 320, 
                            m_specific->m_surf_img[idx]))
                {
                    ret = FALSE;
                    break;
                }
                m_rbuf_img[idx].attach(m_specific->m_surf_img[idx]->bmBits, 
                        m_specific->m_surf_img[idx]->bmWidth, 
                        m_specific->m_surf_img[idx]->bmHeight, 
                        m_flip_y?(-m_specific->m_surf_img[idx]->bmPitch):
                        m_specific->m_surf_img[idx]->bmPitch);

                ret = TRUE;

            } while(FALSE);

            DeleteCompatibleDC(tmpdc);
            DeleteCompatibleDC(tmpdc2);

            return ret;
        }
        return false;
    }