Directx11学习笔记【一】 最简单的windows程序HelloWin
声明:本系列教程代码有部分来自dx11龙书及dx11游戏编程入门两本书,后面不再说明
首先,在vs2013中创建一个空的解决方案Dx11Demo,以后的工程都会放在这个解决方案下面。然后创建一个win32项目,勾选空项目,确定

在源文件中添加一个c++ Source File main.cpp
创建一个windows应用程序需要以下几步:
WinMain函数的定义;
创建一个窗口;
进行消息循环;
编写窗口过程函数.
要创建一个窗口,必须有一个WinMain函数,可以在MSDN中查看原型
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // pointer to command line
int nCmdShow // show state of window
);
第二个参数hPrevInstance表示当前实例的前一个实例的句柄。在Win32环境下,这个参数总是NULL,在Win32环境下,这个参数不再起作用。
第三个参数lpCmdLine是一个以空终止的字符串,指定传递给应用程序的命令行参数。例如:在C盘下有一个text.txt文件,当我们用鼠标双击这个文件时将启动记事本程序,此时系统会将C:/text.txt作为命令行参数传递给记事本程序的WinMain函数,记事本程序在得到这个文件的全路径名后,就在窗口中显示该文件的内容。
第四个参数nCmdShow指定程序的窗口应该如何显示,例如最大化、最小化、隐藏等。
/*********************
Directx11学习笔记【1】 最简单的windows程序HelloWin
2016.01 by zhangbaochong
**********************/ #include <windows.h> LPCWSTR g_name;//窗口类的名字
HINSTANCE g_instance;//应用程序实例句柄
HWND g_hwnd;//窗口句柄
bool Initialize();//初始化函数
void Run();//处理消息循环
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd)
{
if(Initialize())
Run();
return ;
} bool Initialize()
{
g_instance = GetModuleHandle(NULL);//得到程序实例句柄
g_name = L"Hello Win"; WNDCLASSEX wnd;
wnd.cbClsExtra = ;
wnd.cbSize = sizeof(WNDCLASSEX);
wnd.cbWndExtra = ;
wnd.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wnd.hCursor = LoadCursor(NULL,IDC_ARROW);
wnd.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wnd.hIconSm = wnd.hIcon;
wnd.hInstance = g_instance;
wnd.lpfnWndProc = WndProc;
wnd.lpszClassName = g_name;
wnd.lpszMenuName = g_name;
wnd.style = CS_HREDRAW | CS_VREDRAW;
//注册窗口类
if (!RegisterClassEx(&wnd))
{
MessageBox(NULL, L"注册窗口失败!", L"Hello Win", );
return false;
} //创建窗口
g_hwnd = CreateWindowEx(WS_EX_APPWINDOW, g_name, g_name, WS_OVERLAPPEDWINDOW,, ,
, , NULL, NULL, g_instance, NULL); //显示窗口设置其为焦点
ShowWindow(g_hwnd, SW_SHOW);
SetForegroundWindow(g_hwnd);
SetFocus(g_hwnd); //隐藏鼠标
SetCursor(false);
return true;
} //相应调度windows消息及调用渲染函数
void Run()
{
MSG msg; //初始化消息结构
ZeroMemory(&msg, sizeof(MSG)); while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, NULL, , , PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
//DoSomething
}
}
} LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wPararm, LPARAM lParam)
{
switch (msg)
{
case WM_DESTROY:
PostQuitMessage();
return ;
break;
} return DefWindowProc(hwnd, msg, wPararm, lParam);
}
程序运行结果,窗口背景为黑色

Directx11学习笔记【一】 最简单的windows程序HelloWin的更多相关文章
- Windows程序设计学习笔记(1):一个简单的windows程序
<Windows程序设计>(第五版)(美Charles Petzold著) #include<windows.h> LRESULT CALLBACK WndProc(HWND, ...
- DirectX11 学习笔记8 - 最简单的光照
在上一个列子的基础上加了一个地面.这个地面是光照效果生成的. 看图: 先说明: 光照 须要重写一个 lightshader 就是光照的渲染器 // Define the input layout D ...
- pythonweb框架Flask学习笔记02-一个简单的小程序
#-*- coding:utf-8 -*- #导入了Flask类 这个类的实例将会是我们的WSGI应用程序 from flask import Flask #创建一个Flask类的实例 第一个参数是应 ...
- cpp学习笔记 1一个简单的小程序以及一些的知识点
今天买的cpp到了从今天開始又一次学习cpp如今发现学校发的书真的不怎莫样. <em>#include<stdio.h>//预处理命令 int main()/*第一个被调用的函 ...
- Directx11学习笔记【二十一】 封装键盘鼠标响应类
原文:Directx11学习笔记[二十一] 封装键盘鼠标响应类 摘要: 本文由zhangbaochong原创,转载请注明出处:http://www.cnblogs.com/zhangbaochong/ ...
- Directx11学习笔记【二十二】 用高度图实现地形
本文由zhangbaochong原创,转载请注明出处http://www.cnblogs.com/zhangbaochong/p/5827714.html 在前面我们曾经实现过简单的地形(Direct ...
- Directx11学习笔记【二】 将HelloWin封装成类
我们把上一个教程的代码封装到一个类中来方便以后的使用. 首先新建一个空工程叫做MyHelloWin,添加一个main.cpp文件,然后新建一个类叫做MyWindow,将于窗体有关的操作封装到里面 My ...
- cocos2d-x学习笔记(18)--游戏打包(windows平台)
cocos2d-x学习笔记(18)--游戏打包(windows平台) 之前做好的游戏,都是在vs2008下编译执行的.假设说想把游戏公布到网上或者和其它人一起分享游戏,那就得对游戏 ...
- Directx11学习笔记【八】 龙书D3DApp的实现
原文:Directx11学习笔记[八] 龙书D3DApp的实现 directx11龙书中的初始化程序D3DApp跟我们上次写的初始化程序大体一致,只是包含了计时器的内容,而且使用了深度模板缓冲. D3 ...
随机推荐
- iOS8:把这些七招APP哭
6月3日.苹果发布了新一代的高配置手机操作系统iOS 8,我们看到了很多新的功能和引人注目的新变化.它为开发人员提供了许多其他更酷能力发展.第三方输入法也开放,这使得国内的百度.搜狗输入法是不过高兴的 ...
- Andorid Clip 实现自定义的进度条效果实例
Android该系统提供了一个水平进度条为我们展现了运行使用进展情况,水平进度条显示用于运行进度Clip Drawable技术 下面我们通过一个具体的例子来说明Clip Drawable使用. 还有我 ...
- 微信支付.net官方坑太多,我们来精简
原文:微信支付.net官方坑太多,我们来精简 微信支付官方坑太多,我们来精简 我把官方的代码,打包成了 an.wxapi.dll. 里面主要替换了下注释.呵呵.然后修改了几个地方. 修改一.Confi ...
- 一张图总结Google C++编程规范(Google C++ Style Guide)
Google C++ Style Guide是一份不错的C++编码指南,我制作了一张比較全面的说明图,能够在短时间内高速掌握规范的重点内容.只是规范毕竟是人定的,记得活学活用.看图前别忘了阅读以下三条 ...
- 对付"反盗链"
对付"反盗链" 某些站点有所谓的反盗链设置,其实说穿了很简单, 就是检查你发送请求的header里面,referer站点是不是他自己, 所以我们只需要像把headers的refer ...
- oracle ebs 12.20 安装成功其过程失败日记及总结(1)
由于公司业务须要,须要安装oracle ebs进行 form 开发,所以就開始了痛苦oracle ebs安装之过程.刚開始是在vm中win2003 server 中安装ebs,,不知是我自已的水平太差 ...
- JVM必备指南(转)
本文由 ImportNew - xiafei 翻译自 anturis.欢迎加入翻译小组.转载请见文末要求. 简介 Java虚拟机(JVM)是Java应用的运行环境,从一般意义上来讲,JVM是通过规范来 ...
- U11认识与学习bash
1.使用命令clear来清除界面. 2.命令别名设置alias和unalias: 例如: alias lm='ls -l | more' 查看当前的别名设置有哪些: alias unalias lm ...
- 使用异步HTTP提升客户端性能(HttpAsyncClient)
使用异步HTTP提升客户端性能(HttpAsyncClient) 大家都知道,应用层的网络模型有同步.异步之分. 同步,意为着线程阻塞,只有等本次请求全部都完成了,才能进行下一次请求. 异步,好处是不 ...
- discuz 插件开发 新手入门
作为一个新手,目前也是刚刚玩转discuz的插件功能,好东西不敢独享,就拿出来大家一起分享入门的过程.现在网上很多关于discuz的插件教程都是很简单的教程,原因可能是这个东西是商业化的东西,本着分享 ...