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学习(一)相关推荐

  1. DirectX9 ShadowMap例子学习笔记

    本文版权归博客园  mavaL所有,如有转载请按如下方式详细标明原创作者及出处,以示尊重!! 原创作者:mavaL 原文链接:DirectX9 ShadowMap例子学习笔记 学习SDK例子真是快速加 ...

  2. VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(1)

    前言 打开CSDN或者度娘(谷哥被墙了,搜索不了),关键词"VB6 dx9 DirectX9 游戏源码",你会发现,讲解DX9技术的文章很多,但是跟VB6都没什么关系.偶有几片文章 ...

  3. VB6如何引用VBDX9.tlb-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(2)

    VB6 如何引用VBDX9.tlb 我们想要在VB6中使用DirectX9,就要引用VBDX9.tlb,那么我们怎么在程序中运用呢?废话不多说,直接上正题. 1,怎么在VB6中引用DX9的VBDX9. ...

  4. DX9绘图基础-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(7)

    ** 绘图基础 ** 一:清除后备缓冲区 在度娘搜索 "DX9绘图"或者"DirectX9绘图",出来的东西不少,几乎找不到VB6的!还有会出来一个机器人,也叫 ...

  5. Direct3D体系结构-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(3)

    Direct3D体系结构 以下为本人自学DX9的记录,整理出来是方便大家学习DX9底层基础知识的, 如果你不想学习Direct3D 的原理的话,想直接使用冷风引擎(CoolWind2D游戏引擎), 请 ...

  6. 创建Direct3D9设备-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(5)

    创建Direct3D9设备 若要创建 Direct3D 设备,请先创建 Direct3D 对象 (请参阅 Direct3DCreate9) . Direct3D 对象创建的所有呈现设备共享相同的物理资 ...

  7. DX9的一些方法介绍-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(9)

    DX9的一些方法介绍(IDirect3D9) 在前边的源码中,引用了一些DX9的方法,我这里做了一个笔记,大家可以看看. 1,IDirect3DDevice9::SetTexture 方法:将纹理分配 ...

  8. DX9贴图-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(11)

    DX9贴图 先准备2张图片,蜘蛛为m1.png,单眼怪物为m2.png 创建一个Form1.frm,输入如下源码: Private Sub Form_Load()'新手注意:游戏编程中, '通常将窗体 ...

  9. DX9显示文字-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(14)

    DX9显示文字 创建Form1,输入以下源码: Private Sub Form_Load()'新手注意:游戏编程中, '通常将窗体的 BorderStyle 设置为"Fixed singl ...

最新文章

  1. usaco ★Bessie Come Home 回家
  2. Datawhale组队学习周报(第019周)
  3. java 方法 参数 引用_Java 基础
  4. AspNet Core 下利用普罗米修斯+Grafana构建Metrics和服务器性能的监控
  5. 【Kubernetes】Error: Cask minikube is unavailable No Cask with this name exists
  6. html背景只向x轴扩散,有趣的css—简单的下雨效果2.0版
  7. (转)还谈张珊珊P掉琪琪格?尔敢轻吾智乎
  8. pandas.DataFrame.set_index
  9. Linux 给普通用户分配root权限或给用户分配多个用户组
  10. Layui 中引入Echarts模块
  11. picasa android 缓存,从android应用上传到picasa
  12. python操作QQ
  13. 【Python抢票神器】火车票枪票软件到底靠谱吗?实测—终极攻略。
  14. 风之大陆ios android账号互通,《风之大陆》安卓和ios互通吗
  15. #import 指令 (C++)
  16. ODL中版本变化引起包位置的变化
  17. caj转word免费转换怎么操作?
  18. WINVNC源码阅读(一)
  19. 逻辑思维题 微信18954274246 答案
  20. CeSi 安装与配置

热门文章

  1. 轻松进行SOLIDWORKS基础绘图
  2. #python 坐标转换 以CGCS2000转WGS84为例
  3. 2.1 特征工程 - 数据清理
  4. 基于视觉显著性的图像分割
  5. Node.js 调用 dll动态库 以华旭身份证阅读器为例
  6. VC++ 通过wmic获取主板和BIOS序列号
  7. excel查找出不来了_excel打不开-Excel中有结果却查询不到?查找的用法与误区快来学习一下...
  8. Python股票盯盘助手
  9. 电脑端微信双开的办法
  10. JAVA建行银企直连密钥传输交换接口