用戶登錄  |  用戶注冊
首 頁源碼下載網絡學院最新源碼源碼排行屏蔽廣告
當前位置:新興網絡 > 網絡學院 > 編程開發 > C/C++

第一個DirectDraw入門程序(Hello World!)

減小字體 增大字體 作者:佚名  來源:本站整理  發布時間:2011-03-10 02:23:20


C/C++ code復制代碼
//*******************************************************************
// 工程:hello
// 文件:hello.cpp
// 內容:創建第一個DirectDraw應用程序,
//*******************************************************************
#include <windows.h>
#include <windowsx.h>
#include <ddraw.h>
#pragma comment(lib, "ddraw.lib")
#pragma comment(lib, "dxguid.lib")

LPDIRECTDRAW lpDD; // DirectDraw對象
LPDIRECTDRAWSURFACE lpDDSPrimary; // DirectDraw主頁面
char szMsg1[] = "Hello World, I am DirectDraw boy !";
char szMsg2[] = "按 ESC 退出";

//函數聲明

LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );
BOOL InitWindow( HINSTANCE hInstance, int nCmdShow );
BOOL InitDDraw(void);
void FreeDDraw(void);

//*******************************************************************
//函數:WinMain()
//功能:Win32應用程序入口函數?進行初始化工作,處理消息循環
//*******************************************************************

int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                      LPSTR lpCmdLine, int nCmdShow)
{
    MSG msg;
    //初始化主窗口
    if ( !InitWindow( hInstance, nCmdShow ) )
        return FALSE;

    //初始化DirectDraw環境,并實現DirectDraw功能
    if ( !InitDDraw())
    {
        MessageBox(GetActiveWindow(), "初始化DirectDraw過程中出錯!", "Error", MB_OK );
        FreeDDraw();
        DestroyWindow(GetActiveWindow());
        return FALSE;
    }

    //進入消息循環
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;

}

//******************************************************************
//函數:InitWindow()
//功能:創建主窗口?
//******************************************************************

static BOOL InitWindow( HINSTANCE hInstance, int nCmdShow )
{
    HWND hwnd; //窗口句柄
    WNDCLASS wc; //窗口類結構

    //填充窗口類結構
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WinProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground =(HBRUSH)GetStockObject(RGB(255,255,255));
    wc.lpszMenuName = TEXT("");
    wc.lpszClassName = "dxHello";

    //注冊窗口類

    RegisterClass (&wc);
    //創建主窗口
    hwnd = CreateWindowEx(0,"dxHello","",WS_POPUP,0, 0,
    GetSystemMetrics( SM_CXSCREEN ),
    GetSystemMetrics( SM_CYSCREEN ),
    NULL,
    NULL,
    hInstance,
    NULL );

    if( !hwnd ) return FALSE;
    //顯示并更新窗口
    ShowWindow( hwnd, nCmdShow );
    UpdateWindow( hwnd );
    return TRUE;

}

 
//******************************************************************
//函數:WinProc()
//功能:處理主窗口消息
//******************************************************************

LRESULT CALLBACK WinProc( HWND hWnd, UINT message,
                             WPARAM wParam, LPARAM lParam )
{
    switch( message )

    {
        case WM_KEYDOWN://擊鍵消息
            switch( wParam )
            {
                case VK_ESCAPE:
                    PostMessage(hWnd, WM_CLOSE, 0, 0);
                    break;
            }
            break;
        case WM_DESTROY://退出消息
            FreeDDraw();
            PostQuitMessage( 0 );
            break;
    }

    //調用缺省消息處理過程
    return DefWindowProc(hWnd, message, wParam, lParam);

}

//******************************************************************

//函數:InitDDraw()

//功能:初始化DirectDraw環境并實現其功能?包括:創建DirectDraw對象,
// 設置顯示模式,創建主頁面,輸出文字?

//******************************************************************

BOOL InitDDraw(void)
{
    DDSURFACEDESC ddsd; //頁面描述
    HDC hdc; //設備環境句柄

    //創建DirectCraw對象
    if ( DirectDrawCreate( NULL, &lpDD, NULL ) != DD_OK ) return FALSE;

    // 取得獨占和全屏模式
    if ( lpDD->SetCooperativeLevel( GetActiveWindow(),DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN ) != DD_OK)
        return FALSE;

    //設置顯示模式
    if ( lpDD->SetDisplayMode( 640, 480, 8 ) != DD_OK) return FALSE;

    //填充主頁面信息
    ddsd.dwSize = sizeof( ddsd );
    ddsd.dwFlags = DDSD_CAPS;
    ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;

    //創建主頁面對象

    if ( lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL ) != DD_OK)
        return FALSE;

    //輸出文字
    if ( lpDDSPrimary->GetDC(&hdc) != DD_OK) return FALSE;

    SetBkColor( hdc, RGB( 0, 0, 255 ) );
    SetTextColor( hdc, RGB( 255, 255, 0 ) );
    TextOut( hdc, 220, 200, szMsg1, lstrlen(szMsg1));
    TextOut( hdc, 280, 240, szMsg2, lstrlen(szMsg2));
    lpDDSPrimary->ReleaseDC(hdc);

    return TRUE;

}

//******************************************************************
//函數:FreeDDraw()
//功能:釋放所有的DirectDraw對象?
//******************************************************************

void FreeDDraw( void )
{
    if( lpDD != NULL )
    {
        if( lpDDSPrimary != NULL )
        {
            lpDDSPrimary->Release();
            lpDDSPrimary = NULL;
        }
        lpDD->Release();
        lpDD = NULL;
    }
}
附件下載.rar

Tags:DirectX DirectDraw VC

作者:佚名
  • 好的評價 如果您覺得此文章好,就請您
      100%(7)
  • 差的評價 如果您覺得此文章差,就請您
      0%(0)

網絡學院評論評論內容只代表網友觀點,與本站立場無關!

   評論摘要(共 0 條,得分 0 分,平均 0 分) 查看完整評論
秒速时时彩