游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5832|回复: 8

如何用WIN32实现全屏

[复制链接]

13

主题

27

帖子

33

积分

注册会员

Rank: 2

积分
33
发表于 2007-2-12 12:08:00 | 显示全部楼层 |阅读模式
我想把我的游戏窗口设为全屏方式(不是最大化那种),如果用WIN32项目如何实现?请指教,最好能附带代码,谢谢。

4

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2007-2-12 13:01:00 | 显示全部楼层

Re: 如何用WIN32实现全屏

SetWindowPos()函数可以设置窗口的大小.

23

主题

111

帖子

111

积分

注册会员

Rank: 2

积分
111
发表于 2007-2-12 21:27:00 | 显示全部楼层

Re:如何用WIN32实现全屏

那样做的话,还是会有最上面的条条吧,不属于全屏,是不?

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2007-2-12 21:57:00 | 显示全部楼层

Re:如何用WIN32实现全屏

        DEVMODE dmScreenSettings;//设备模式
        memset(&dmScreenSettings,0,sizeof(dmScreenSettings));//清除内存
        dmScreenSettings.dmSize=sizeof(dmScreenSettings);//大小
        dmScreenSettings.dmPelsWidth        = 800;//屏幕宽度
        dmScreenSettings.dmPelsHeight        = 600;//屏幕高度
        dmScreenSettings.dmBitsPerPel        = 24;//色彩位数
        dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
        ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN);//改变屏幕,让隐藏开始菜单

        WNDCLASS wndclass;
        if(!hPrevInstance)
        {
                wndclass.style                        =CS_HREDRAW|CS_VREDRAW;
                wndclass.lpfnWndProc        =WndProc;
                wndclass.cbClsExtra                =0;
                wndclass.cbWndExtra                =0;
                wndclass.hInstance                =hInstance;
                wndclass.hIcon                        =NULL;
                wndclass.hCursor                =NULL;
                wndclass.hbrBackground        =NULL;
                wndclass.lpszMenuName        =NULL;
                wndclass.lpszClassName        ="tank";
                RegisterClass(&wndclass);
        }
        hwnd=CreateWindow("tank","tank",WS_POPUP,0,0,800,600,NULL,NULL,hInstance,NULL);
        ShowWindow(hwnd,nCmdShow);

2

主题

5

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2007-2-13 22:50:00 | 显示全部楼层

Re: 如何用WIN32实现全屏

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

// 工程:hello

// 文件:hello.cpp

// 内容:创建第一个DirectDraw应用程序,

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

 

#include <windows.h>

#include <windowsx.h>

#include <ddraw.h>

 

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 = 0;

    wc.lpfnWndProc = WinProc;

    wc.cbClsExtra = 0;

    wc.cbWndExtra = 0;

    wc.hInstance = hInstance;

    wc.hIcon = LoadIcon( hInstance, IDI_APPLICATION );

    wc.hCursor = LoadCursor( NULL, IDC_ARROW );

    wc.hbrBackground = GetStockObject(BLACK_BRUSH);

    wc.lpszMenuName = NULL;

    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;

    }

}

选择Project菜单的Settings…,出现工程设置对话框。选择Link栏,在Object/Library modules中添入“Ddraw.lib”。
这个应该就是楼主想要的效果

23

主题

111

帖子

111

积分

注册会员

Rank: 2

积分
111
发表于 2007-2-28 15:42:00 | 显示全部楼层

Re:如何用WIN32实现全屏

还是用DX实现了

13

主题

27

帖子

33

积分

注册会员

Rank: 2

积分
33
 楼主| 发表于 2007-3-1 20:26:00 | 显示全部楼层

Re:如何用WIN32实现全屏

谢谢四楼、五楼的朋友,尤其是五楼的朋友。您写的这是我想要的,我还有一点想要请教您下,您有关于这方面的书籍吗?能否介绍几本,感激不尽。谢谢。

0

主题

27

帖子

27

积分

注册会员

Rank: 2

积分
27
QQ
发表于 2007-3-5 17:43:00 | 显示全部楼层

Re:如何用WIN32实现全屏

directx sdk......

2

主题

5

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2007-3-12 22:44:00 | 显示全部楼层

Re:如何用WIN32实现全屏

关于这方面的资料都是网上找的,我也没有什么好的书记进行推荐,边学边摸索  -.-!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 16:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表