DirectX9学习(一)
2017.8.22
写给自己,开始接触DirectX,这是对自己学习的一个备份吧。
开始接触WinMain和WinProc,大部分都是照着书上敲的,也是为了以后能方便的找个参考
第一个代码:
#include<Windows.h>
#include"iostream"
#include <time.h>
using namespace std;
const string ProgramTitle = "Hello World!";HWND window;
HDC device;
bool gameOver = false;//从文件加载一个bmp,然后释放内存
//"E:\\Win32\\test1.bmp"
void DrawBitmap(char *fileName,int x,int y)
{//LOAD BMPHBITMAP image = (HBITMAP)LoadImage(0, fileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);//read the bitmap's propertiesBITMAP bm;GetObject(image, sizeof(BITMAP), &bm);//create a device context from the bmpHDC hdcImage = CreateCompatibleDC(device);SelectObject(hdcImage, image);//Draw the bitMap to WindowBitBlt(device, x, y, bm.bmWidth, bm.bmHeight, hdcImage, 0, 0, SRCCOPY);DeleteDC(hdcImage);DeleteObject((HBITMAP)image);
}bool Game_Init()
{//开始产生随机数srand(time(NULL));return true;
}//UPDATE
void Game_Run()
{if (gameOver)return;RECT rect;GetClientRect(window, &rect);//draw bitmap at random locationint x = rand() % (rect.right - rect.left);int y = rand() % (rect.bottom - rect.top);DrawBitmap("E:\\Win32\\test1.bmp", x, y);}void Game_End()
{ReleaseDC(window, device);
}//窗口回调过程,通过他将消息事件传递给程序
//接受并处理消息
//消息是在GetMessage中获取的
LRESULT CALLBACK WinProc(HWND hWnd, UINT message, WPARAM wParam,LPARAM lParam)
{//HWND:窗口句柄,使用窗口句柄创建一个新的设备环境句柄HDC,只要引用一个窗口或空间就必须得用到窗口句柄RECT drawRect;PAINTSTRUCT ps; //用于启动以及停止屏幕更新HDC hdc;switch (message){/*case WM_PAINT:hdc = BeginPaint(hWnd, &ps); //StartDrawing 锁住设备环境for (int n = 0; n < 20; n++){int x = n * 20;int y = n * 20;drawRect = { x, y, x + 100, y + 100 };//写字符到屏幕 DrawText(hdc, ProgramTitle.c_str(), ProgramTitle.length(), &drawRect, DT_CENTER);}EndPaint(hWnd, &ps);break;*/case WM_DESTROY:gameOver = true;PostQuitMessage(0);break;}return DefWindowProc(hWnd, message, wParam, lParam);}//设置窗口类的值
//Helper Function to set up the window properties
ATOM MyRegisterClass(HINSTANCE hIntance)
{//set the new window's propertiesWNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX);wc.style = CS_HREDRAW | CS_VREDRAW; //在移动或尺寸更新完|高度调整后重新绘制wc.lpfnWndProc = (WNDPROC)WinProc; //返回一个指向回调函数的指针,如果不设定这个值,消息就无法传递给HWNDwc.cbClsExtra = 0;wc.cbWndExtra = 0;wc.hInstance = hIntance;wc.hIcon = NULL;wc.hCursor = LoadCursor(NULL, IDC_ARROW);wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);wc.lpszMenuName = NULL;wc.lpszClassName = ProgramTitle.c_str();wc.hIconSm = NULL;return RegisterClassEx(&wc); //如果成功则将窗口注册给了Windows,这个值将传会给InitInstance}//创建程序所需要的新窗口并显示,只运行一次
bool InitInstance(HINSTANCE hInstance, int nCmdShow)
{//从全局实例检查这个参数看看新实例是否需要终止//Createwindow = CreateWindow(ProgramTitle.c_str(), //窗口类型ProgramTitle.c_str(), //标题WS_OVERLAPPEDWINDOW, //窗口格式 styleCW_USEDEFAULT,CW_USEDEFAULT,//位置640,480, //长宽NULL, //父窗口NULL, //菜单hInstance, //应用实例NULL //窗口参数);if (window == 0) //如果创建ggreturn false;//显示ShowWindow(window, nCmdShow);UpdateWindow(window);device = GetDC(window);return true;}//Entry point for a Windows program
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevinstance, LPSTR lpCmdLine, int nCmdShow)
{//参数:被调用的程序实例,前一个实例(与1有关),传递给程序的命令行参数的字符串,显示方式//创建窗口MyRegisterClass(hInstance);if (!InitInstance(hInstance, nCmdShow)){return 0;}if (!Game_Init())return 0;//主消息循环MSG msg;//处理消息的主循环//GetMessage参数:/* LPMSG : 只想用于处理的msg的指针HWND : 特定窗口的消息句柄,NULL则为所有消息UINT MIN和MAX :范围*/while (!gameOver){if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){TranslateMessage(&msg);//虚拟键盘消息翻译成字符信息DispatchMessage(&msg);//发送回Windows消息系统}Game_Run();}Game_End();return msg.wParam;
}
DirectX9学习(一)相关推荐
- DirectX9 ShadowMap例子学习笔记
本文版权归博客园 mavaL所有,如有转载请按如下方式详细标明原创作者及出处,以示尊重!! 原创作者:mavaL 原文链接:DirectX9 ShadowMap例子学习笔记 学习SDK例子真是快速加 ...
- VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(1)
前言 打开CSDN或者度娘(谷哥被墙了,搜索不了),关键词"VB6 dx9 DirectX9 游戏源码",你会发现,讲解DX9技术的文章很多,但是跟VB6都没什么关系.偶有几片文章 ...
- VB6如何引用VBDX9.tlb-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(2)
VB6 如何引用VBDX9.tlb 我们想要在VB6中使用DirectX9,就要引用VBDX9.tlb,那么我们怎么在程序中运用呢?废话不多说,直接上正题. 1,怎么在VB6中引用DX9的VBDX9. ...
- DX9绘图基础-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(7)
** 绘图基础 ** 一:清除后备缓冲区 在度娘搜索 "DX9绘图"或者"DirectX9绘图",出来的东西不少,几乎找不到VB6的!还有会出来一个机器人,也叫 ...
- Direct3D体系结构-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(3)
Direct3D体系结构 以下为本人自学DX9的记录,整理出来是方便大家学习DX9底层基础知识的, 如果你不想学习Direct3D 的原理的话,想直接使用冷风引擎(CoolWind2D游戏引擎), 请 ...
- 创建Direct3D9设备-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(5)
创建Direct3D9设备 若要创建 Direct3D 设备,请先创建 Direct3D 对象 (请参阅 Direct3DCreate9) . Direct3D 对象创建的所有呈现设备共享相同的物理资 ...
- DX9的一些方法介绍-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(9)
DX9的一些方法介绍(IDirect3D9) 在前边的源码中,引用了一些DX9的方法,我这里做了一个笔记,大家可以看看. 1,IDirect3DDevice9::SetTexture 方法:将纹理分配 ...
- DX9贴图-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(11)
DX9贴图 先准备2张图片,蜘蛛为m1.png,单眼怪物为m2.png 创建一个Form1.frm,输入如下源码: Private Sub Form_Load()'新手注意:游戏编程中, '通常将窗体 ...
- DX9显示文字-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(14)
DX9显示文字 创建Form1,输入以下源码: Private Sub Form_Load()'新手注意:游戏编程中, '通常将窗体的 BorderStyle 设置为"Fixed singl ...
最新文章
- usaco ★Bessie Come Home 回家
- Datawhale组队学习周报(第019周)
- java 方法 参数 引用_Java 基础
- AspNet Core 下利用普罗米修斯+Grafana构建Metrics和服务器性能的监控
- 【Kubernetes】Error: Cask minikube is unavailable No Cask with this name exists
- html背景只向x轴扩散,有趣的css—简单的下雨效果2.0版
- (转)还谈张珊珊P掉琪琪格?尔敢轻吾智乎
- pandas.DataFrame.set_index
- Linux 给普通用户分配root权限或给用户分配多个用户组
- Layui 中引入Echarts模块
- picasa android 缓存,从android应用上传到picasa
- python操作QQ
- 【Python抢票神器】火车票枪票软件到底靠谱吗?实测—终极攻略。
- 风之大陆ios android账号互通,《风之大陆》安卓和ios互通吗
- #import 指令 (C++)
- ODL中版本变化引起包位置的变化
- caj转word免费转换怎么操作?
- WINVNC源码阅读(一)
- 逻辑思维题 微信18954274246 答案
- CeSi 安装与配置