`

DirectX 之 Hello

    博客分类:
  • VC
阅读更多

#include <windows.h>
#include <windowsx.h>
#include <ddraw.h>
#include <atlstr.h>

LPDIRECTDRAW lpDD = NULL;//direct draw object
LPDIRECTDRAWSURFACE lpDDSPrimary = NULL;//direct draw main page

char* lpszMsg1 = "Hello, andylin! I love my baby so much!";
char* lpszMsg2 = "press esc exit";

LRESULT CALLBACK WinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
BOOL InitWindow(HINSTANCE hInst, int nCmdShow);
BOOL InitDDraw();
void FreeDDraw();

void PrintMsg(HWND hWnd = NULL, LPCTSTR lpszInfo = NULL, LPCTSTR lpszTitle = NULL, int nStyle = MB_OK)
{
	CString strInfo = lpszInfo;
	CString strTitle = lpszTitle;

	if (NULL == lpszInfo)
	{
		strInfo = "test info";
	}

	if (NULL == lpszTitle)
	{
		strTitle = "my direct test";
	}

	MessageBox(hWnd, strInfo, strTitle, nStyle);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	MSG	msg = {0};

	if (!InitWindow(hInstance, nCmdShow))
	{
		PrintMsg(NULL, "InitWindow Failed!");
		return -1;
	}

	HWND hWnd = GetActiveWindow();

	//init direct draw
	if (!InitDDraw())
	{
		PrintMsg(hWnd, "init DirectDraw failed!");
		DestroyWindow(hWnd);

		return -1;
	}


	while (::GetMessage(&msg, NULL, 0, 0))
	{
		::TranslateMessage(&msg);
		::DispatchMessage(&msg);
	}

	return (int)msg.wParam;
}

BOOL InitWindow( HINSTANCE hInstance, int nCmdShow )
{
	HWND		hWnd	= NULL;
	WNDCLASS	ws		= {0};
	char		szClassName[] = _T("test dx");

	//int window class
	ws.cbClsExtra		= 0;
	ws.cbWndExtra		= 0;
	ws.hbrBackground	= (HBRUSH)::GetStockObject(BLACK_BRUSH);
	ws.hCursor			= ::LoadCursor(NULL, IDC_ARROW);
	ws.hIcon			= ::LoadIcon(NULL, IDI_APPLICATION);
	ws.hInstance		= hInstance;
	ws.lpfnWndProc		= WinProc;
	ws.lpszClassName	= szClassName;
	ws.lpszMenuName		= NULL;
	ws.style			= CS_HREDRAW | CS_VREDRAW;

	//register window class
	::RegisterClass(&ws);

	hWnd = ::CreateWindowEx(0, szClassName, _T("test for diectx"), WS_OVERLAPPED, CW_USEDEFAULT, CW_USEDEFAULT, 
		CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, 0);

	if (!hWnd)
	{
		return FALSE;
	}

	//show and update
	ShowWindow(hWnd, nCmdShow);
	UpdateWindow(hWnd);

	return TRUE;
}

LRESULT CALLBACK WinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_KEYDOWN:
		{
			switch (wParam)
			{
			case VK_ESCAPE:
				::PostMessage(hwnd, WM_CLOSE, 0, 0);
				break;
			}
		}
		break;

	case WM_DESTROY:
		{
			FreeDDraw();
			PostQuitMessage(0);
		}
		break;

	default:
		break;
	}

	return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

BOOL InitDDraw()
{
	DDSURFACEDESC	ddsd = {0}; //page descripe
	HDC hdc = NULL;

	if (DD_OK != ::DirectDrawCreate(NULL, &lpDD, NULL))
	{
		return FALSE;
	}

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

	//set show mode
	if (DD_OK != lpDD->SetDisplayMode(640, 480, 8))
	{
		return FALSE;
	}

	//set main page
	ddsd.dwSize = sizeof(ddsd);
	ddsd.dwFlags = DDSD_CAPS;
	ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;

	//create main page object
	if (DD_OK != lpDD->CreateSurface(&ddsd, &lpDDSPrimary, NULL))
	{
		return FALSE;
	}

	//print text
	if (DD_OK != lpDDSPrimary->GetDC(&hdc))
	{
		return FALSE;
	}

	SetBkColor(hdc, RGB(0, 0, 255));
	SetTextColor(hdc, RGB(255, 255, 0));

	TextOut(hdc, 0, 20, lpszMsg1, lstrlen(lpszMsg1));
	TextOut(hdc, 0, 40, lpszMsg2, lstrlen(lpszMsg2));

	lpDDSPrimary->ReleaseDC(hdc);

	return TRUE;
}

void FreeDDraw()
{
	if (NULL != lpDDSPrimary)
	{
		lpDDSPrimary->Release();
		lpDDSPrimary = NULL;
	}

	if (NULL != lpDD)
	{
		lpDD->Release();
		lpDD = NULL;
	}
}
 
分享到:
评论

相关推荐

    Hello DirectX12

    2. DirectX-Headers-main是DirectX12帮助类文件源码 3. HelloTriangle.pdf 是HelloTriangle工程 流程结构图 HelloTriangle工程: CD3D12Triangle类对DirectX12创建三角形做了封装。 HelloTexture工程: CD3D12...

    D3DXFont.rar

    DirectX 9.0 C++ 教程 字体 迟到的helloworld。

    DirectX12教程源代码

    D3D12HelloWorld D3D12Bundles D3D12DepthBoundsTest D3D12DynamicIndexing D3D12ExecuteIndirect D3D12Fullscreen D3D12HDR D3D12HeterogeneousMultiadapter D3D12LinkedGpus D3D12Multithreading D3D12...

    雨松MOMO程序研究院

    Direct3D研究院之创建第一个DirectX3D项目(一) NGUI研究院之开始学习制作第一个例子(一) Objective-C研究院之基础语法(一) Ruby On Rails研究院之初识Rails(一) Three20研究院之构建开发环境与Hello...

    Marvel:尊敬的PyGui 3D引擎(早期开发)

    你好三角Directx11_ht-D3D11你好三角形OpenGL_ht-OpenGL Hello三角形Vulkan_ht-Vulkan你好三角形WebGL_ht-WebGL Hello三角形3D引擎Marvel_d3d11-Directx 11 3D引擎Marvel_opengl-OpenGL 3D引擎Marvel_webgl-WebGL 3D...

    cpp11-and-DX11-Tutorials:C++11 & DirectX11 教程

    教程 1 - Hello World! 教程 2 - 类型 教程 3 - 字符串操作 教程 4 - 函数 教程 5 - if 和循环 教程 6 - 容器 教程 7 - 类 教程 8 - 指针 教程 9 - 内存管理 第 2 章 - 在 DX11 中绘制三角形 教程 1 - 创建桌面...

    Marvel3D:亲爱的PyGui 3D引擎(早期开发)

    OpenGL_ht-OpenGL Hello三角形 Vulkan_ht-Vulkan你好三角形 3D引擎 Marvel_d3d11-Directx 11 3D引擎 Marvel_opengl-OpenGL 3D引擎 建筑 视窗 要求 具有以下工作流程的 : Python开发 使用C ++进行桌面开发 使用C ++...

    zig-window:窗口客户端库

    这是Vulkan“ Hello World”三角形的概念证明,该三角形的二进制代码可在不同Linux发行版之间移植,甚至具有非标准动态链接器的二进制版本也可移植。 “它是如何工作的”文章是待办事项。 建造 经过Zig 0.7.0 + 479...

    WPF培训教程.pptx

    Hello WPF WPF培训教程全文共30页,当前为第1页。 Windows Form A new event model Can create control Still based on GDI+ Wrapper of Win32 WPF培训教程全文共30页,当前为第2页。 WPF WPF use DirectX to draw ...

    C# 模拟键盘操作

    使用DirectX的游戏,通常不接受使用SendInput()的击键 Windows的受保护区域,如Windows登录屏幕或UAC调暗屏幕 任何应用程序 因为驱动程序模拟击键和鼠标单击,所以目标窗口必须处于活动状态(即,在发送击键和鼠标...

    Visual C++ 6 .0 多媒体开发指南.pdf

    1 .4 .3 Hello, World !...................... 34 1 .5 本章小结........................... 35 第2章 多媒体编程基础......................... 36 2 .1 多媒体文件.......................... 36 2 .1 .1 多媒体...

    LLGL:低级图形库(LLGL)是现代图形API OpenGL,Direct3D,Vulkan和Metal的薄抽象层

    (PDF)入门,简介,Hello Triangle教程和可扩展性示例 (PDF) (PDF) 平台支援 平台 CI D3D12 D3D11 武尔坎 的OpenGL OpenGLES 3 金属 视窗 :check_mark: :check_mark: :check_mark: :check_mark: ...

    WinApi:一个简单,直接,超薄的CLR库,用于高性能Win32 Native Interop

    Create ( text : " Hello " )) { win . Show (); return new EventLoop (). Run ( win ); }} 努吉特: 安装包WinApi 完全支持CoreCLR。 使用ref returns类的C#7功能来实现性能而又不会丢失语义值。文章

    cmd操作命令和linux命令大全收集

    26. dxdiag---------检查DirectX信息 27. regedt32-------注册表编辑器 28. Msconfig.exe---系统配置实用程序 29. rsop.msc-------组策略结果集 30. mem.exe--------显示内存使用情况 31. regedit.exe----...

    vc++ 应用源码包_1

    vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...

    vc++ 应用源码包_2

    vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...

    vc++ 应用源码包_6

    vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...

    vc++ 应用源码包_5

    vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...

    vc++ 应用源码包_3

    vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...

    vc++ 开发实例源码包

    DirectX 实例 DES加密算法源代码 如题。 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属代码 如题。 DirectShow开发指南源码 如题。 directUI_...

Global site tag (gtag.js) - Google Analytics