Click here to Skip to main content
15,909,193 members
Home / Discussions / C / C++ / MFC
   

C / C++ / MFC

 
AnswerRe: How to clear buffer of a COM port ? Pin
JudyL_MD11-Dec-08 8:07
JudyL_MD11-Dec-08 8:07 
QuestionRe: How to clear buffer of a COM port ? Pin
kapardhi11-Dec-08 19:41
kapardhi11-Dec-08 19:41 
AnswerRe: How to clear buffer of a COM port ? Pin
JudyL_MD12-Dec-08 3:14
JudyL_MD12-Dec-08 3:14 
QuestionHow to create .DBX file (MS-OUTLOOK EXPRESS files) using vc++ 6.0 Pin
ravi malik10-Dec-08 19:44
ravi malik10-Dec-08 19:44 
QuestionCreate DIB from a HBITMAP Pin
VC++Maniac10-Dec-08 19:35
VC++Maniac10-Dec-08 19:35 
AnswerRe: Create DIB from a HBITMAP Pin
Hamid_RT10-Dec-08 20:17
Hamid_RT10-Dec-08 20:17 
QuestionRe: Create DIB from a HBITMAP Pin
VC++Maniac10-Dec-08 20:25
VC++Maniac10-Dec-08 20:25 
AnswerRe: Create DIB from a HBITMAP Pin
enhzflep10-Dec-08 23:34
enhzflep10-Dec-08 23:34 
1. Get dimensions of existing HBITMAP
2. Use CreateDIBSection to create an image of the correct size
3. Create a couple of memory DCs
4. Select the images into their own DCs
5. BitBlt from the DC holding the HBITMAP to the one containing the DIBSection
6. Save the DIBSection to disk (you can use the supplied function)
7. Deselect the images from their DCs
8. DeleteObject both images (HBITMAP & DIBSection)


BOOL SaveBitmapFile(HDC p_hDC, LPCTSTR p_pchFileName)
{
    HBITMAP hBmp = (HBITMAP)GetCurrentObject( p_hDC, OBJ_BITMAP );

    BITMAPINFO stBmpInfo;
    stBmpInfo.bmiHeader.biSize = sizeof( stBmpInfo.bmiHeader );
    stBmpInfo.bmiHeader.biBitCount = 0;
    GetDIBits( p_hDC, hBmp, 0, 0, NULL, &stBmpInfo, DIB_RGB_COLORS );

    ULONG iBmpInfoSize;

    switch( stBmpInfo.bmiHeader.biBitCount )
    {
        case 24:
            iBmpInfoSize = sizeof(BITMAPINFOHEADER);
        break;

        case 16:
        case 32:
            iBmpInfoSize = sizeof(BITMAPINFOHEADER)+sizeof(DWORD)*3;
        break;

        default:
            iBmpInfoSize = sizeof(BITMAPINFOHEADER) +
                           sizeof(RGBQUAD) * ( 1 << stBmpInfo.bmiHeader.biBitCount );
        break;
    }

    PBITMAPINFO pstBmpInfo;
    if( iBmpInfoSize != sizeof(BITMAPINFOHEADER) )
    {
        pstBmpInfo = (PBITMAPINFO)GlobalAlloc( GMEM_FIXED | GMEM_ZEROINIT, iBmpInfoSize );
        PBYTE pbtBmpInfoDest = (PBYTE)pstBmpInfo;
        PBYTE pbtBmpInfoSrc = (PBYTE)&stBmpInfo;
        ULONG iSizeTmp = sizeof( BITMAPINFOHEADER );

        while( iSizeTmp-- )
        {
            *( ( pbtBmpInfoDest )++ ) = *( ( pbtBmpInfoSrc )++ );
        }
    }

    HANDLE hFile = CreateFile( p_pchFileName, GENERIC_WRITE, 0,
                               NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE,
                               NULL );

    BITMAPFILEHEADER stBmpFileHder;
    stBmpFileHder.bfType = 0x4D42; // 'BM'
    stBmpFileHder.bfSize = sizeof(BITMAPFILEHEADER)
                         + sizeof(BITMAPINFOHEADER)
                         + iBmpInfoSize
                         + pstBmpInfo->bmiHeader.biSizeImage;

    stBmpFileHder.bfReserved1 = 0;
    stBmpFileHder.bfReserved2 = 0;
    stBmpFileHder.bfOffBits = sizeof(BITMAPFILEHEADER) + iBmpInfoSize;

    DWORD dRet;

    //// WRITING ////
    WriteFile( hFile, (LPCVOID)&stBmpFileHder , sizeof(BITMAPFILEHEADER), &dRet, NULL );

    PBYTE pBits = (PBYTE)GlobalAlloc( GMEM_FIXED | GMEM_ZEROINIT, stBmpInfo.bmiHeader.biSizeImage );

    HBITMAP hBmpOld;
    HBITMAP hTmpBmp = CreateCompatibleBitmap( p_hDC,
                                              pstBmpInfo->bmiHeader.biWidth,
                                              pstBmpInfo->bmiHeader.biHeight );

    hBmpOld = (HBITMAP)SelectObject( p_hDC, hTmpBmp );

    GetDIBits( p_hDC, hBmp, 0, pstBmpInfo->bmiHeader.biHeight,
               (LPSTR)pBits, pstBmpInfo, DIB_RGB_COLORS );

    //// WRITING ////
    WriteFile( hFile, (LPCVOID)pstBmpInfo, iBmpInfoSize, &dRet, NULL );

    WriteFile( hFile, (LPCVOID)pBits, pstBmpInfo->bmiHeader.biSizeImage, &dRet, NULL );

    SelectObject( p_hDC, hBmpOld );
    DeleteObject( hTmpBmp );
    CloseHandle( hFile );
    GlobalFree( pstBmpInfo );
    GlobalFree( pBits );
    return TRUE;
}

GeneralRe: Create DIB from a HBITMAP Pin
VC++Maniac10-Dec-08 23:43
VC++Maniac10-Dec-08 23:43 
GeneralRe: Create DIB from a HBITMAP Pin
akirilov11-Dec-08 0:08
akirilov11-Dec-08 0:08 
GeneralRe: Create DIB from a HBITMAP Pin
enhzflep11-Dec-08 0:11
enhzflep11-Dec-08 0:11 
GeneralRe: Create DIB from a HBITMAP Pin
VC++Maniac11-Dec-08 0:25
VC++Maniac11-Dec-08 0:25 
AnswerRe: Create DIB from a HBITMAP Pin
Mark Salsbery11-Dec-08 7:08
Mark Salsbery11-Dec-08 7:08 
QuestionRe: Create DIB from a HBITMAP Pin
VC++Maniac14-Dec-08 17:42
VC++Maniac14-Dec-08 17:42 
AnswerRe: Create DIB from a HBITMAP Pin
Mark Salsbery15-Dec-08 7:51
Mark Salsbery15-Dec-08 7:51 
AnswerRe: Create DIB from a HBITMAP Pin
PJ Arends11-Dec-08 15:11
professionalPJ Arends11-Dec-08 15:11 
QuestionMost complete Implementation of C++ specification Pin
ComplexLifeForm10-Dec-08 19:15
ComplexLifeForm10-Dec-08 19:15 
QuestionRenaming of Ok and cancel in a message Box Pin
tasumisra10-Dec-08 18:43
tasumisra10-Dec-08 18:43 
AnswerRe: Renaming of Ok and cancel in a message Box Pin
SandipG 10-Dec-08 18:49
SandipG 10-Dec-08 18:49 
AnswerRe: Renaming of Ok and cancel in a message Box Pin
_AnsHUMAN_ 10-Dec-08 19:16
_AnsHUMAN_ 10-Dec-08 19:16 
AnswerRe: Renaming of Ok and cancel in a message Box Pin
Michael Dunn10-Dec-08 20:35
sitebuilderMichael Dunn10-Dec-08 20:35 
QuestionResource file opening problem Pin
Kiran Pinjala10-Dec-08 18:39
Kiran Pinjala10-Dec-08 18:39 
AnswerRe: Resource file opening problem Pin
Anem Mahesh22-Dec-08 0:01
Anem Mahesh22-Dec-08 0:01 
QuestionTextOut in A Multiline EditControl Pin
ForNow10-Dec-08 18:10
ForNow10-Dec-08 18:10 
AnswerRe: TextOut in A Multiline EditControl Pin
SandipG 10-Dec-08 19:13
SandipG 10-Dec-08 19:13 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.