在设定了主页面与缓冲区后台并定义了DESC后``
在装载位图时出没有任何图象出现
请问各位达人是怎么回事``

解决方案 »

  1.   

    //注意,这个向导产生的头文件不能去掉 //给你一个例子
    #include <windows.h>#include <ddraw.h>
    HBITMAP hBitmap;
    HDC hmdc;
    HDC hdcsurf=NULL;
    HINSTANCE hInstance;
    DDSURFACEDESC  ddsd;
    LPDIRECTDRAW            lpDD;    //DirectDraw对象
    LPDIRECTDRAWSURFACE lpDDSPrimary; // 主页面
    LPDIRECTDRAWSURFACE lpDDSBack;
    LPDIRECTDRAWSURFACE pdds; // 缓冲页面
    LPDIRECTDRAWSURFACE lpDDSBackGround;// 背景页面
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,                    PSTR szCmdLine, int iCmdShow){hBitmap=(HBITMAP)LoadImage(0,".\\ss.bmp",IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);     static TCHAR szAppName[] = TEXT ("HelloWin") ;
         HWND         hwnd ;     MSG          msg ;     WNDCLASS     wc ;      wc.style         = CS_HREDRAW | CS_VREDRAW ;     wc.lpfnWndProc   = WndProc ;     wc.cbClsExtra    = 0 ;     wc.cbWndExtra    = 0 ;     wc.hInstance     = hInstance ;     wc.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;     wc.hCursor       = LoadCursor (NULL, IDC_ARROW) ;     wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;     wc.lpszMenuName  = NULL ;     wc.lpszClassName = szAppName ; 
         if (!RegisterClass (&wc))     {          MessageBox (NULL, TEXT ("This program requires Windows NT!"),                       szAppName, MB_ICONERROR) ;          return 0 ;     }     hwnd = CreateWindow (szAppName,                  // window class name                          TEXT ("欢迎你的到来!"), // window caption                          WS_OVERLAPPEDWINDOW,        // window style                          CW_USEDEFAULT,              // initial x position                          CW_USEDEFAULT,              // initial y position                          CW_USEDEFAULT,              // initial x size                          CW_USEDEFAULT,              // initial y size                          NULL,                       // parent window handle                          NULL,                       // window menu handle                          hInstance,                  // program instance handle                          NULL) ;                     // creation parameters          ShowWindow (hwnd, iCmdShow) ;     UpdateWindow (hwnd) ;          while (GetMessage (&msg, NULL, 0, 0))     {          TranslateMessage (&msg) ;          DispatchMessage (&msg) ;     }     return msg.wParam ;}  LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){    
                  switch (message)     {         case WM_PAINT:
              DWORD  dwFlags;
              DDSCAPS  ddscaps;
      DirectDrawCreate(NULL, &lpDD, NULL);
    dwFlags = DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN;
    lpDD->SetCooperativeLevel(hwnd, dwFlags);        lpDD->SetDisplayMode( 1024, 768, 16); ddsd.dwSize = sizeof( ddsd );
           ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
           ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE |
      DDSCAPS_FLIP |
      DDSCAPS_COMPLEX;
          ddsd.dwBackBufferCount = 1;
        lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL );
        //创建缓冲页面
        ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
        lpDDSPrimary->GetAttachedSurface(&ddscaps, &lpDDSBack);    lpDDSPrimary->GetSurfaceDesc (&ddsd);
    lpDDSPrimary->GetDC(&hdcsurf);
             
         hmdc=CreateCompatibleDC(NULL);
    SelectObject(hmdc,hBitmap);
    BitBlt(hdcsurf,0,0,1024,768,hmdc,0,0,SRCCOPY);
     DeleteDC(hmdc);

         lpDDSPrimary->ReleaseDC(hdcsurf);
             return 0;
         case WM_KEYDOWN:
         case WM_LBUTTONDOWN:
         case WM_DESTROY:
            PostQuitMessage (0) ;
         return 0 ;     }     return DefWindowProc (hwnd, message, wParam, lParam) ;}