RT

解决方案 »

  1.   

    http://www.codeguru.com/Cpp/G-M/bitmap/article.php/c4903/
      

  2.   

    CxImage
    http://www.codeproject.com/bitmap/cximage.asp
      

  3.   

    #include "stdafx.h"
    #include "resource.h"
    #include "stdio.h"
    #include "ddraw.h"
    #define MAX_LOADSTRING 100
    #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)#define _RGB16BIT565(r,g,b) ((b%32) + ((g%64) << 6) + ((r%32) << 11))#define DDRAW_INIT_STRUCT(ddstruct) { memset(&ddstruct,0,sizeof(ddstruct)); ddstruct.dwSize=sizeof(ddstruct); }
    HINSTANCE hInst;
    HWND      g_hWnd;
    HDC hdc;
    TCHAR szTitle[MAX_LOADSTRING];
    TCHAR szWindowClass[MAX_LOADSTRING]; ATOM MyRegisterClass(HINSTANCE hInstance);
    BOOL InitInstance(HINSTANCE, int);
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int       window_closed      = 0; LPDIRECTDRAW       lpdd        = NULL;  
    LPDIRECTDRAWSURFACE  lpddsprimary = NULL;
    LPDIRECTDRAWSURFACE  lpddsback    = NULL; 
    DDSURFACEDESC        ddsd;  
    HBITMAP hBmp = NULL;
    RECT rectBmp;
    BITMAP bm;
    HDC                 hdcImage;
    BOOL InitGame();
    BOOL UpdateGame();
    BOOL DestroyGame();
    void DisplayFps();
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    MSG msg;

    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_GAMETEMP, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

    if (!InitInstance (hInstance, nCmdShow)) 
    {
    return FALSE;
    }

    InitGame();

    while(1)
    {
            if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
            {
                if(!GetMessage(&msg, NULL, 0, 0))
                {
                    break;;
                }

                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
            else
            {
    UpdateGame();
            }
    }
    DestroyGame();
    return msg.wParam;
    }ATOM MyRegisterClass(HINSTANCE hInstance)
    {
    WNDCLASSEX wcex;

    wcex.cbSize = sizeof(WNDCLASSEX); 

    wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = (WNDPROC)WndProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;
    wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground = CreateSolidBrush(RGB(0,0,0));
    wcex.lpszMenuName = NULL;
    wcex.lpszClassName = szWindowClass;
    wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION);

    return RegisterClassEx(&wcex);
    }BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
    HWND hWnd;

    hInst = hInstance; 

    hWnd = CreateWindowEx(/*WS_EX_TOPMOST*/NULL,szWindowClass, szTitle, WS_POPUP|WS_VISIBLE,
    0, 0, 800, 600, NULL, NULL, hInstance, NULL);

    if (!hWnd)
    {
    return FALSE;
    }
    g_hWnd = hWnd;
    hdc = GetDC(g_hWnd);
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    return TRUE;
    }LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    switch (message) 
    {
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
    }BOOL InitGame()
    {
    hBmp = (HBITMAP)LoadImage(NULL,"1.bmp",IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_DEFAULTCOLOR|LR_LOADFROMFILE);

    if(hBmp!=NULL)
    {
    GetObject(hBmp,sizeof(BITMAP),&bm);
    SetRect(&rectBmp,0,0,bm.bmWidth,bm.bmHeight);
    }

    if (FAILED(DirectDrawCreate(NULL, &lpdd, NULL)))
    return(0);

    if (FAILED(lpdd->SetCooperativeLevel(g_hWnd, 
    DDSCL_FULLSCREEN | DDSCL_ALLOWMODEX | 
    DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT)))
    return(0);

    if (FAILED(lpdd->SetDisplayMode(800, 600, 16)))
    return(0);

    DDRAW_INIT_STRUCT(ddsd); 

    ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;

    ddsd.dwBackBufferCount = 1;

    ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP;

    if (FAILED(lpdd->CreateSurface(&ddsd, &lpddsprimary, NULL)))
    return(0);

    ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;

    if (FAILED(lpddsprimary->GetAttachedSurface(&ddsd.ddsCaps, &lpddsback)))
    return(0);
    return TRUE;
    }BOOL DestroyGame()
    {
    ::DeleteObject(hBmp);
    if (lpddsback)
    {
    lpddsback->Release();
    lpddsback = NULL;

    if (lpddsprimary)
    {
    lpddsprimary->Release();
    lpddsprimary = NULL;
    }

    if (lpdd)
    {
    lpdd->Release();
    lpdd = NULL;

    return TRUE;
    }BOOL UpdateGame()
    {
    if(KEYDOWN(VK_ESCAPE))
    SendMessage(g_hWnd,WM_CLOSE,0,0);
        HDC                 hdc;
        DDSURFACEDESC       ddsd;
        HRESULT             hr;

        if(hBmp == NULL || lpddsback == NULL)
            return E_FAIL;
        lpddsback->Restore();

        hdcImage = CreateCompatibleDC(NULL);
        SelectObject(hdcImage, hBmp);
    memset(&ddsd,0x0,sizeof(ddsd));
        ddsd.dwSize = sizeof(ddsd);
        ddsd.dwFlags = DDSD_HEIGHT | DDSD_WIDTH;
        lpddsback->GetSurfaceDesc(&ddsd);

        if((hr = lpddsback->GetDC(&hdc)) == DD_OK)
        {
    StretchBlt(hdc, 0, 0, ddsd.dwWidth, ddsd.dwHeight, hdcImage, 0,0, bm.bmWidth,bm.bmHeight, SRCCOPY);
            lpddsback->ReleaseDC(hdc);
        }

    DisplayFps();
    DeleteDC(hdcImage);
    if(FAILED(lpddsprimary->Flip(NULL, DDFLIP_WAIT)))
    {
    HRESULT ddrval; if(lpddsprimary) 
    ddrval = lpddsprimary->Restore(); ddrval = lpddsback->Restore();
    if(FAILED(ddrval)&&(ddrval != DDERR_IMPLICITLYCREATED))
    return FALSE;
    }
    return TRUE;
    }void DisplayFps()
    {
    static DWORD count = 0;
    static char s_FPS[80]="";
    static DWORD  FrameCount = GetTickCount();
    DWORD FrameTime = GetTickCount();
    DWORD FPSTime =FrameTime - FrameCount;
    if(FPSTime > 1000)
    {
    sprintf(s_FPS,"FPS:  %d",count);
    FrameCount =FrameTime ;
    SetBkColor(hdcImage,RGB(0,0,0));
    SetTextColor(hdcImage,RGB(100,100,100));
    TextOut(hdcImage,10,10,s_FPS,strlen(s_FPS));
    count = 0;
    }
    count++;
    }
      

  4.   

    在文档视图结构里面的view里面有OnDraw()函数吧
    CBitmap bitmap;
    HBITMAP hbitmap;
    hbitmap = ::LoadImage("*.bmp",IMAGE_BITMAP,NULL,LR_LOADFROMFILE);//可能有几个参数不对,查一下就好了OnDraw(CDC* pDC)
    {
        bitmap.attach(hbitmap);
        CDC memdc;
        CRect rect;
        GetClientRect(&rect);
        memdc.CreateCompatibleDC(pDC);
        memdc.SelectObject(&bitmap);
        pDC->BitBlt(0,0,rect.right,rect.bottom,&memdc,0,0,SRCCOPY);
    }
      

  5.   

    回复人: stoneywang(喜欢飞) :显示不出来啊!
    //CBitmap bitmap;
    //HANDLE  hbitmap;
    //hbitmap = ::LoadImage(NULL, 
    //   "f:\\a1.bmp",
    //   IMAGE_BITMAP,
    //   NULL,
    //   NULL,
    //   LR_LOADFROMFILE);
        bitmap.LoadBitmap("f:\\a1.bmp");    CDC memdc;
        CRect rect;
        GetClientRect(&rect);
        memdc.CreateCompatibleDC(pDC);
        memdc.SelectObject(&bitmap);
        pDC->BitBlt(0,0,rect.right,rect.bottom,&memdc,0,0,SRCCOPY);
      

  6.   

    bitmap.LoadBitmap("f:\\a1.bmp");如果要选择图片,应该使用LoadImage
      

  7.   

    就用LoadImage不行么?里面参数设置也很简单的,我是有点不记得了
      

  8.   

    VCKBASE上代码到是很多,不过还是看看相关知识的比较好
      

  9.   

    你可以用SetDIBToDevice()啊,这个函数很好用的。偶用的挺好的。
      

  10.   

    LoadImage與LoadBitmap都可以資源名稱的圖片,但僅僅LoadImage可以直接使用圖片的地址信息來讀取
      

  11.   

    具體代碼如下:
         // HDRAWDIB m_hDrawDIB;
    //#include <Vfw.h>
             m_hDrawDIB = DrawDibOpen();  //
    if(m_hDrawDIB)
    {
    DrawDibStart(m_hDrawDIB,25);
    }         CBitmap bmp;
    BITMAP bitmap;
    HBITMAP hbitmap = NULL;
    CRect rect; GetClientRect(&rect);

    HDC dc = ::GetDC(m_hWnd);
    hbitmap = (HBITMAP)::LoadImage( AfxGetResourceHandle(), 
    MAKEINTRESOURCE(IDB_PIC), IMAGE_BITMAP, 0, 0,////IDB_PIC未需要加載的資源
    LR_CREATEDIBSECTION | LR_DEFAULTSIZE /*| LR_LOADFROMFILE*/ );
    bmp.Attach(hbitmap);

    bmp.GetBitmap(&bitmap);

    BITMAPINFOHEADER hdr;
    ZeroMemory(&hdr,sizeof(BITMAPINFOHEADER));
    hdr.biSize = sizeof(BITMAPINFOHEADER);
    hdr.biHeight = bitmap.bmHeight;
    hdr.biWidth = bitmap.bmWidth;
    hdr.biPlanes = 1;
    hdr.biBitCount = bitmap.bmBitsPixel;
    hdr.biCompression = BI_RGB;
    hdr.biSizeImage = 0;//bitmap.bmWidth*bitmap.bmHeight*(hdr.biBitCount >> 3);
    hdr.biXPelsPerMeter = 0;
    hdr.biYPelsPerMeter = 0;
    hdr.biClrUsed = 0;
    hdr.biClrImportant = 0;


    DrawDibDraw(m_hDrawDIB,dc,
    0,0,
    rect.Width(),
    rect.Height(),
    &hdr,
    bitmap.bmBits,
    0,0,-1,
    -1,
    DDF_SAME_HDC);

    bmp.Detach();
    ::ReleaseDC(m_hWnd,dc);
    ::DeleteObject(hbitmap);
      

  12.   

    OnDraw(CDC* pDC)
    {
        CBitmap bitmap;
        HBITMAP hbitmap;
        hbitmap = (HBITMAP)LoadImage(NULL,"*.bmp",IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
        bitmap.attach(hbitmap);
        CDC memdc;
        CRect rect;
        GetClientRect(&rect);
        memdc.CreateCompatibleDC(pDC);
        memdc.SelectObject(&bitmap);
        pDC->BitBlt(0,0,rect.right,rect.bottom,&memdc,0,0,SRCCOPY);
    }这样绝对可以显示位图,要求不高的话,这个就将就着用把