用vs12做个黑框框
来源:互联网 发布:手机焓湿图计算软件 编辑:程序博客网 时间:2024/05/21 06:21
打开vs12,新建win32项目->添加项目名称->下一步->空项目->finish.
右键源文件->添加->新建项->选择cpp->添加cpp的名字.
开始写代码:
#include <windows.h>
//窗口类的名字
LPCWSTR m_applicationName;
//应用程序实例句柄
HINSTANCE m_hinstance;
//定义一个全局的windows窗口句柄,这个句柄用来表示应用程序的主窗口句柄。
//窗口句柄
HWND m_hwnd;
//用来判断是否按ESC键,按下ESC键,则退出程序
bool bexit = false;
//初始化窗口类,创建应用程序窗口
void InitializeWindows(int& screenWidth, int& screenHeight);
//调用初始化窗口函数,以及其它的接口类的初始化函数
bool Initialize();
//处理消息循环
void Run();
//关闭窗口
void ShutdownWindows();
//这两个函数是窗口的回调函数
static LRESULT CALLBACK MessageHandler(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
//判断是否全屏,全屏和窗口模式窗口使用不同的创建窗口参数
const bool FULL_SCREEN = false;
//下面的函数WinMain,是windows应用程序的入口函数。
//应用程序入口main函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pScmdline, int iCmdshow)
{
Initialize();
Run();
ShutdownWindows();
return 0;
}
//该函数首先调用初始化函数,初始化函数中将会设置窗口的高度、宽度然后调用初始化窗口函数。
//调用窗口初始化函数和其它一些类的初始化函数
//本例子中,只调用初始化窗口函数
bool Initialize()
{
int screenWidth = 0, screenHeight = 0;
// 初始化窗口
InitializeWindows(screenWidth, screenHeight);
return true;
}
void InitializeWindows(int& screenWidth, int& screenHeight)
{
WNDCLASSEX wc;
DEVMODE dmScreenSettings;
int posX, posY;
// 得到应用程序实例句柄
m_hinstance = GetModuleHandle(NULL);
// 应用程序名字
m_applicationName = L"Engine";
// 设置窗口类参数.
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
wc.lpfnWndProc = WndProc; //指定回调函数
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = m_hinstance;
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wc.hIconSm = wc.hIcon;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); //默认黑色窗口黑色背景
wc.lpszMenuName = NULL;
wc.lpszClassName = m_applicationName;
wc.cbSize = sizeof(WNDCLASSEX);
// 注册窗口类
RegisterClassEx(&wc);
// 得到windows桌面分辨率
screenWidth = GetSystemMetrics(SM_CXSCREEN);
screenHeight = GetSystemMetrics(SM_CYSCREEN);
// 根据是否全屏设置不同的分辨率.
if(FULL_SCREEN)
{
//全屏模式下,设置窗口大小为windows桌面分辨率.
memset(&dmScreenSettings, 0, sizeof(dmScreenSettings));
dmScreenSettings.dmSize = sizeof(dmScreenSettings);
dmScreenSettings.dmPelsWidth = (unsigned long)screenWidth;
dmScreenSettings.dmPelsHeight = (unsigned long)screenHeight;
dmScreenSettings.dmBitsPerPel = 32;
dmScreenSettings.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
// 临时设置显示设备为全屏模式,注意:应用程序退出时候,将恢复系统默认设置。
ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN);
// 设置窗口的左上角坐标位置为(0,0).
posX = posY = 0;
}
else
{
// 窗口模式:800*600.
screenWidth = 800;
screenHeight = 600;
// 窗口左上角坐标位置,posX, posY
posX = (GetSystemMetrics(SM_CXSCREEN) - screenWidth) / 2;
posY = (GetSystemMetrics(SM_CYSCREEN) - screenHeight) / 2;
}
// 全屏和窗口使用不同的参数.
if( FULL_SCREEN)
{
m_hwnd = CreateWindowEx(WS_EX_APPWINDOW, m_applicationName, m_applicationName,
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_POPUP,
posX, posY, screenWidth, screenHeight, NULL, NULL, m_hinstance, NULL);
}
else
{
m_hwnd = CreateWindowEx(WS_EX_APPWINDOW, m_applicationName, m_applicationName,
WS_OVERLAPPEDWINDOW,
posX, posY, screenWidth, screenHeight, NULL, NULL, m_hinstance, NULL);
}
// 显示窗口并设置其为焦点.
ShowWindow(m_hwnd, SW_SHOW);
SetForegroundWindow(m_hwnd);
SetFocus(m_hwnd);
// 隐藏鼠标.
//ShowCursor(false);
return;
}
//在Run函数中,我们翻译、调度windows消息以及调用我们的render函数。
//处理消息
void Run()
{
MSG msg;
bool done, result = 1;
// 初始化消息结构.
ZeroMemory(&msg, sizeof(MSG));
// 循环进行消息处理
done = false;
while(!done)
{
// 处理windows消息.
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// 接收到WM_QUIT消息,退出程序.
if(msg.message == WM_QUIT)
{
done = true;
}
else
{
result = bexit; //如果按了ESC,也推出程序
//我们的渲染或者其它处理,可以放在这儿
//....
//.....
if(result)
{
done = true;
}
}
}
return;
}
//WndProc函数为窗口回调函数,程序中的消息处理都在这个函数中。
LRESULT CALLBACK WndProc(HWND hwnd, UINT umessage, WPARAM wparam, LPARAM lparam)
{
switch(umessage)
{
// 窗口销毁消息.
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
// 窗口关闭消息.
case WM_CLOSE:
{
PostQuitMessage(0);
return 0;
}
//MessageHandle过程处理其它所有消息.
default:
{
return MessageHandler(hwnd, umessage, wparam, lparam);
}
}
}
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam)
{
switch(umsg)
{
// 检测按键消息.
case WM_KEYDOWN:
if(wparam==VK_ESCAPE)
bexit = true;
return 0;
//任何其它消息发送到windows缺省处理.
default:
{
return DefWindowProc(hwnd, umsg, wparam, lparam);
}
}
}
//ShutdownWindows函数主要用来在程序结束后,释放一些资源。
void ShutdownWindows()
{
//显示光标.
//ShowCursor(true);
// 恢复默认显示设置.
if(FULL_SCREEN)
{
ChangeDisplaySettings(NULL, 0);
}
// Remove the window.
DestroyWindow(m_hwnd);
m_hwnd = NULL;
// 销毁应用程序实例.
UnregisterClass(m_applicationName, m_hinstance);
m_hinstance = NULL;
return;
}
添加相应的消息处理回调函数和初始化函数,这部分按照自己具体的设计来写。本人就是显示一个黑的窗口,可以关闭,ctrl+f5 运行后的效果:
第一次写文章,不足之处,多多谅解。
- 用vs12做个黑框框
- vs12-boost库编译
- 在word中为突出重点用红框框起来
- 框框架架
- 跳出框框
- VS10打开VS12版本创建的工程
- cocos2d-x使用ttf字体时,字体库中不存在的文字用框框代替
- 用黑框框dos 即cmd命令发wifi热点 比软件什么的稳定多了
- PCL_将物体分割后的物体用方形框框选出来
- 脱离黑框框了
- C语言注释框框
- libevent的大框框
- 按钮的框框
- HTML原生小框框
- cocos2dx JNI (win32 + VS12 + cocos2dx-2.2.1)
- vs12 vs2013下open3.0配置扩展模块
- 添加内容的框框,要用textarea 不要用span来固定大小,span总的内容不能换行
- 用phantomjs在linux中截图,发现图片中的中文不显示,为一堆框框,解决如下:
- 两个int值的交换
- hercules配置TCPIP(os390 2.10 DEMOPKG)
- Hibernate主键生成策略和持久化对象的三种状态和MySql常用的数据库语句
- Android-Service
- 母函数 整数拆分 (hdu 1028 , poj 1221)
- 用vs12做个黑框框
- LPCTSTR、LPSTR与LPTSTR
- iOS开发UI篇—自定义瀑布流控件(蘑菇街数据刷新操作)
- Hibernate-Validation的使用
- Android WebView详解之JS调用Java方法
- Eclipse开发环境搭建
- 网站优化之长尾关键词的弯道超越
- Condor and Pegasus on ubuntu12.04
- C#中使用ACCESS插入语法出错