Win32编程

#include <windows.h>

HINSTANCE hinst;

LRESULT CALLBACK MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
        break;
    case WM_LBUTTONDOWN:
        MessageBox(hWnd, L"ONDragon", L"ONDragon", MB_OK);
        break;
    default:
        return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int lpCmdShow)
{
    //定义窗口类
    WNDCLASSEX wcx;

    hinst = hInstance;
    MSG msg;
    BOOL getMessage;

    wcx.lpszClassName = L"MainClass";
    wcx.cbSize = sizeof(wcx);
    wcx.style = CS_HREDRAW | CS_VREDRAW;
    wcx.hInstance = hinst;
    wcx.lpfnWndProc = MainWndProc;
    wcx.cbClsExtra = 0;
    wcx.cbWndExtra = 0;
    wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wcx.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wcx.lpszMenuName = NULL;
    wcx.hIconSm = (HICON)LoadImage( hInstance,
                                    MAKEINTRESOURCE(5),
                                    IMAGE_ICON,
                                    GetSystemMetrics(SM_CXSMICON),
                                    GetSystemMetrics(SM_CYSMICON),
                                    LR_DEFAULTCOLOR);
    //注册窗口类
    if (!RegisterClassEx(&wcx))
    {
        return 0;
    }
    //使用窗口类创建窗口
    HWND hWnd = CreateWindow(   L"MainClass",
                                L"ONDragon",
                                WS_OVERLAPPEDWINDOW,
                                CW_USEDEFAULT,
                                CW_USEDEFAULT,
                                CW_USEDEFAULT,
                                CW_USEDEFAULT,
                                NULL,
                                NULL,
                                hinst,
                                NULL);
    if (!hWnd)
    {
        return 0;
    }
    //显示窗口
    ShowWindow(hWnd,lpCmdShow);
    //立即显示窗口
    UpdateWindow(hWnd);
    while ( 0 != (getMessage = GetMessage(&msg,NULL,0,0)))
    {
        //传递个回调函数MainProc
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}
时间: 2024-10-29 19:10:22

Win32编程的相关文章

Win32编程中如何处理控制台消息

这篇文章讨论如何处理所有的控制台消息. 第一步,首先要安装一个事件钩子,也就是说要建立一个回调函数.调用Win32 API,原型如下: BOOL SetConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine, // 回调函数BOOL Add // 表示添加还是删除): 参数HandlerRoutine是一个指向函数的指针,原型如下: BOOL WINAPI HandlerRoutine(DWORD dwCtrlType // 控制事件类型): 所有的

win32编程之俄罗斯方块

因为把目标定在了游戏上,最近在学习win32编程 经过一段时间的学习,开始进行编程实现俄罗斯方块,记录一下其中遇到的一些问题 一开始是看网上的教程学习的,但是做完一部分之后发现   会有闪屏的情况   所以又去网上搜索了一下发现要用到双缓冲. 注意:这段开始正确性有待考证! 我一开始的时候是把 drawTeris(); drawBackGround(); drawBlocked(); 都放在了WM_PAINT事件里 而且里面都用了双缓冲来绘制,结果导致后面闪屏更加频繁,后来把所有的绘制动作都交由

【WIN32编程】利用汇编写cs1.6辅助

这篇文章本来在2018.5.1号就写完发圈子去了,这两天跟朋友在网吧打单击才想起来,就顺便把内容发上去把 作者:admin-神风 用CE找到功能的地址 CS1.6下载地址:https://pan.baidu.com/s/1zaW6FmbZg50WV3EKX_IqHw 密码: srcs CE下载地址:https://pan.baidu.com/s/1_tVrikxFx2PAHhmlhWVfFQ 密码: dsn9 打开游戏,并利用CE打开游戏进程 这里我们以人物金钱和子弹为例,找到人物基址 ①查找金

Win32编程知识积累

Win32编程预知识 Windows sdk中有命令行工具,也有编译器和连接器.可以直接使用命令行编译链接C or C++编写的windows程序.而不必使用专业开发工具. Sdk(Software Development Kit)不支持硬件驱动开发. 绝大多数Windows APIs是由函数和com接口构成的,极少数是c++类(最典型的是GDI+, one of the 2-D graphics APIs) Windows api数据类型因为历史问题而有重复和冗余. ? 常用typedefs:

Win32编程API 基础篇 -- 1.入门指南 根据英文教程翻译

入门指南 本教程是关于什么的 本教程的目的是向你介绍使用win32 API编写程序的基础知识(和通用的写法).使用的语言是C,但大多数C++编译器也能成功编译,事实上,教程中的绝大多数内容都适用于任何可以连接API的语言,包括Java.Assembly和Visual Basic:我不会向你呈现任何跟这些语言相关的代码,这需要你在本教程的指导下自己去完成,有一些人在本API的基础上使用其他语言进行编程取得了相当的成功. 本教程不会教你C语言,也不会告诉你怎样去运行你特定的编译器(Borland C

Win32编程API 基础篇 -- 3.消息处理 根据英文教程翻译

消息处理 例子:窗口点击 好的,现在我们已经得到一个窗口了,但我们什么也做不了除了DefWindowProc()允许窗口大小被调整,最大最小化等...这不是很激动人心啊 在接下来的一小节中我将向你展示如何修改现有的程序,让它做一些新的事情,这样我就可以告诉你,“处理消息然后这样做...”,我会明白我的意思是什么并且在不需要看完完整的栗子的基础上完成它.所以不管怎样,集中注意力 OK,对初学者来说拿最近的一个窗口程序的代码,保证编译通过并且正常运行,然后你就可以在这份代码的基础上进行一些小修改,或

Win32编程API 基础篇 -- 4.消息循环 根据英文教程翻译

理解消息循环 为了编写任何即使是最简单的程序,了解windows程序的消息循环和整个消息发送结构是非常有必要的.既然我们已经尝试了一点消息处理的东西,我们应该对整个程序有更深入的理解,如果你没有理解消息是怎么发生的和它们运行的机制,那接下来的内容你会感到很蛋疼. 什么是消息? 一条消息是一个整数值,如果你查阅你的头文件(这是个好的查阅API的工作惯例)你会发现像下面的东西: 1 #define WM_INITDIALOG 0x0110 2 #define WM_COMMAND 0x0111 3

Win32编程笔记

我都决定了目前不再接触这些个浪费精力的API了,结果为了DirectX编程我特么又回来了.....微软你的东西真是坑人 以前用这玩意的时候需要什么就查,查完就忘了,这次记一记,以后再用也不至于忘的太离谱. Windows Notifications WM_CLOSE      告知程序你该被terminate了,但其余的什么都不会做,仅仅是一种提示.常用于关闭程序前提示保存.          出现时间:最早 WM_DESTROY  当程序的窗口被销毁后出现,表示程序正在被terminate,此

3D游戏引擎一 win32编程

Windows程序一般都等待用户进行一些操作,然后响应并采取行动. 一般来说,对win32的程序的操作都会转换为系统事件队列中的消息,如按键消息WM_KEYDOWN,WM_MOUSECLICK等传递键盘以及鼠标的操作消息.系统消息传递给程序的本地事件队列,然后在传递给WinProc()函数进行主窗口的消息处理,处理完消息后,程序转到WinMain()主函数中,而此时一般主函数依然在进行消息循环,于是又等待新的消息并执行. win32的程序都是有winmain开始,最简单的一个win32程序,从空

Win32编程API 基础篇 -- 5.使用资源

使用资源 你可能想参考教程结尾的附近,为了获得跟VC++和BC++资源相关的信息. 在我们讲得更加深入之前,我将大致讲解一下资源的主题,这样在每个小节中我就不必再去重讲一遍了.在这一小节中,你不需要编译任何东西,这里的代码只是个例子. 资源是以二进制的格式存储在你的可执行文件内部的预定义的数据,在资源脚本中我们创建资源,所谓的资源脚本就是有”.rc”扩展名的群文件,商业编译器通常有一个视觉资源编辑器老让你在不需要手动编辑的情况下创建资源,但很多时候手动这是唯一的创建资源的方法,如果你的编译器没有