文档章节

C++ win32 应用程序

文刀人韦
 文刀人韦
发布于 2017/08/08 10:25
字数 596
阅读 37
收藏 0

#include <windows.h>                               //一个windows应用程序应该包含的头文件
#include <stdio.h>                                 //标准输入输出流文件

                                                   //声明一个回调函数  
LRESULT CALLBACK WinSunProc(HWND hwnd,UINT uMsg, WPARAM wParam, LPARAM lparam);
//窗口句柄,窗口消息

//创建一个完整的窗口需要经过四个步骤:设计一个窗口类;注册窗口类;创建窗口;显示及更新窗口
//WinMain:Windows 程序的入口函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{   //hInstance 实例句柄、hPrevInstance默认这个参数为NULL、lpCmdLine存储一个命令行参数

    WNDCLASS wndcls;            //定义一个窗口对象
    wndcls.cbClsExtra = 0;      //指定额外内存空间
    wndcls.cbWndExtra = 0;      //指定额外内存空间
    wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);   //指定窗口背景颜色
    wndcls.hCursor = LoadCursor(NULL, IDC_CROSS);                 //设置光标样式
    wndcls.hIcon = LoadIcon(NULL, IDI_ERROR);                     //设置图标样式
    wndcls.hInstance = hInstance;                                 //指定窗口实例句柄
    wndcls.lpfnWndProc = WinSunProc;                              //指定窗口函数、窗口主处理函数
    wndcls.lpszClassName = "Visual C++ Game";                     //窗口类名称
    wndcls.lpszMenuName = NULL;                                   //菜单
    wndcls.style = CS_HREDRAW | CS_VREDRAW;
    RegisterClass(&wndcls);                    //注册窗口类
    HWND hwnd;                                 //声名窗口句柄

    //创建窗口,但是这里的窗口是不会显示的
    hwnd = CreateWindow
        ("Visual C++ Game",                      // 已注册窗口类的名称   
        "Visual C++ 游戏开发",                  //窗口标题
        WS_OVERLAPPEDWINDOW,                    //窗口风格
        200,                                    //窗口位置的横坐标
        200,                                    //窗口位置的纵坐标
        600,                                    //窗口宽度
        400,                                    //窗口高度
        NULL,
        NULL,
        hInstance,                              //实例句柄
        NULL
        );
    ShowWindow(hwnd, SW_SHOWNORMAL);
    UpdateWindow(hwnd);               //更新显示
    //初始化完成后,WinMain进入消息循环
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);          //转换键盘消息
        DispatchMessage(&msg);           //分派消息
    }
    return 0;
}
    //窗口函数,窗口函数通常利用switch/case 方式判断消息的种类,以决定处置方式,由于其被Windows 系统所调用的,所以这是一种call back 函数
    LRESULT CALLBACK WinSunProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        switch (uMsg)                  //判断消息类型
        {
        case WM_PAINT:                 //更新窗口消息
            HDC hDC;                   //定义 hDC 设备
            PAINTSTRUCT ps;
            hDC = BeginPaint(hwnd, &ps);       //得到设备hDC
            TextOut(hDC, 200, 0, "游戏的世界", strlen("游戏的世界"));
            EndPaint(hwnd, &ps);
            break;
        case WM_CLOSE:                        //当单击关闭按钮时,产生关闭消息
            if (IDYES == MessageBox(hwnd, "是否真的结束?","游戏开发", MB_YESNO))
            {
                DestroyWindow(hwnd);              //单击“确认”按钮,销毁窗口
            }
            break;
        case WM_DESTROY:                         //销毁窗口消息
            PostQuitMessage(0);                  //退出程序
            break;
        default:
            return DefWindowProc(hwnd, uMsg, wParam,lParam);
            //在default 处必须调用DefWindowProc,这是Windows内部默认的消息处理函数
        }
        return 0;
    }

© 著作权归作者所有

上一篇: 工业网络
下一篇: 8月8号
文刀人韦
粉丝 0
博文 35
码字总数 79740
作品 0
渭南
私信 提问
vc++windows编程技术(3)

从一开始就有两种编写windows应用程序的方法。第一种是使用win32定义的API函数,体现细节好。另一种是使用特殊的c++类库,它囊括了API,目前最流行的是MFC。两种方法的区别:所有windows应用...

mli
2014/10/23
146
2
vc++windows编程技术(2)

2.1结构概貌 visual c++中集成了Microsoft公司为c++编写的类库,取名为MFC。visual studio。net IDE 以。net framework为基础。 支持跨语言集成是。net的一大特色。在.NET中,代码分为manag...

mli
2014/10/23
64
0
MFC、SDK和API有什么区别

MFC、SDK和API有什么区别 MFC Microsoft Foundation Class 微软函数类库 SDK (Software Development Kit,软件开发包) 软件开发包通常是一系列API函数,而MFC 是由微软公司提供的对API封装...

huanongkou
2013/03/20
2.3K
0
让控制台应用程序支持MFC类库

1、 问题阐述:在基于控制台的应用程序中并不支持MFC库,如果使基于控制台的应用程序能够使用MFC类库呢? 2、 实现技巧:在控制台应用程序中通过include来引入MFC库,因为控制台应用程序默认...

Amamatthew
2014/06/16
3.3K
0
内存泄露:a CDynLinkLibrary object at...的解决

这两天在设计一个项目,独立了几个DLL模块。昨天勉强把前段工作做完了,需要的DLL也都挂进了EXE文件之中,暗自高兴了一把。不过晚上在看的时候,发现VS2005输出窗口提示有内存泄露: a CDyn...

郭廷钧
2011/01/29
472
0

没有更多内容

加载失败,请刷新页面

加载更多

新架构、新角色:TiDB Community Upgrade!

作者:Jian Zhang 经过几年的发展,TiDB 社区已经逐渐成熟,但是随着社区的发展壮大,我们逐渐感受到了现在社区架构上的一些不足。经过一系列的思考和总结,我们决定升级和调整目前社区组织架...

TiDB
18分钟前
5
0
jquery qrcode库提示not function

jquery qrcode 这个库能用,但是必须在初始化的时候,官方给的使用方法是 引入qrcode的库文件后,在js中写以下 html <div id="qrcode"></div> js jQuery('#qrcode').qrcode({ render: ......

shikamaru
22分钟前
8
0
MySQL数据库去重的简单方案

利用 distinct 对需要处理的字段进行去重 select distinct 字段名 from 表名 利用group by select * from 表名 group by 字段名 利用having select * from 表名 group by 字段名 having 字段...

FeanLau
24分钟前
9
0
字符串转换成整数

实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该...

蔚蓝_晴天
36分钟前
8
0
Eureka客户端续约及服务端过期租约清理源码解析

在之前的文章:EurekaClient自动装配及启动流程解析中,我们提到了在构造DiscoveryClient时除了包含注册流程之外,还调度了一个心跳线程: scheduler.schedule( new Ti...

Java学习录
47分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部