如何使用Visual Studio 2013创建Win32 API程序

如何使用Visual Studio 2013创建Win32 API程序,第1张

1.打开Vs2013,我这里用的是英文版,也建议大家使用,编程都用英文了,还在乎这些英文吗,做开发的英文不要求功底很强,但起码IDE的英文应该熟悉。选择 File ->New ->Project。

2.依次选择Visual C++ ->Win32 ->Win32 Project,输入工程名为“FirstWin32Project”(可以自定义),点击“OK”按钮。

3.点击“OK”按钮后,第一个显示的是向导说明信息,我们不用管,点击“next”下一步。

4.然后显示的是程序设置。按照如图所示,这里选择“Windows application”,其它的默认就好了。点击“Finish”

5.至此,一个工程源文件就生成好了。

6.为了使教程更有意思,在这里改点东西,使其不是默认的向导程序。在语句“hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_FIRSTWIN32PROJECT))”后面一行我们加上一名:“MessageBox( NULL, _T("你是猪吗!"), _T("萌萌哒"), MB_OK )”

7.OK了。点击“Local Windows Debugger”

8.这里会d出来一个对话框,问我们是否需要编译,我们这里勾上“Do not show this dialog again”,然后点击“Yes”

9.至此,一个简单的Win32程序开发完毕!

Win32转制成Win10 UWP应用优势是什么? 微软已经发布几款Win32转制UWP应用到Win10商店中,这就是之前的Project Centennial计划成果,将传统的.exe程序转换成UWP应用,更好发布、管理和提供升级等。 Project Centennial是此前微软提出Win10应用移植计划三大计划之一,其他两个分别是IslandwoodiOS移植、Web应用封装等,Win10 Mobile兼容安卓应用项目已取消。通过这些计划,微软希望开发者可以将UWP应用同步带到Win10 PC、Win10 Mobile手机、Xbox和HoloLens的统一商店中。 不过这里的Project Centennial转换UWP计划说法并不十分准确,因为传统的Win32程序转制后不能改变其本质,只是新增UWP特性,仍会限于 Windows10 x86/x64等桌面平台运行,不会扩展到ARM平台,除非是重新开发适配。 Win32转制UWP应用好处或新增特性: • 动态磁贴 • 消息通知 • 干净和安全的应用安装及卸载 • 应用商店监测、审核和监督 • 应用手动或自动升级 • 应用货币化,购买方

所谓的Win32开发,就是在C语言的层面上,直接使用Win32API开发Windows应用程序或者系统程序。虽说现在直接用Win32API开发应用程序的人已经不多了,但是深入理解Windows系统程序设计原理,仍然是成为Windows开发高手的良好途径。所谓的Win32,其实是一个API规范,与UNIX系统编程接口标准POSIX是相对应的。下面是进行直接的WIN32SDK方式编程的基本思路或者说是一个框架:

一个Windows程序分为程序代码和UI(UserInterface用户接口)资源两大部份,两部份最后以RC编译程序整合为一个完整的EXE文件。所谓UI资源是指功能菜单、对话框、程序图标、光标形状等等东西。这些UI资源的实际内容(二进制代码)系借助各种工具产生,并以各种扩展名存在,如.ico.bmp.cur等等。程序员必须在一个所谓的资源描述档(.rc)中描述它们。RC编译器(RC.EXE)读取RC文件的描述后将所有UI资源文件集中制作出一个.RES文件,再与程序代码结合在一起,这才是一个完整的Windows可执行文件。

与控制台程序相同的是,一个Win32程序也必须有一个程序入口点,但是在这儿它不再叫main(),而叫做WinMain(),当WINDOWS的SHELL检测到用户欲执行一个EXE程序,就会调用加载器把程序进行加载,然后调用Cstartupcode,后者再调用WinMain(),程序的执行就开始了,WinMain()函数的原型为:

intCALLBACKWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow);

下面程序必须进行必要的初始化工作-产生窗口,第一步是注册一个窗口类:用API函数:RegisterClass(),而这个函数需要一个已经定义好的系统结构:WNDCLASS,这个结构里面定义了窗口的种种属性,需要自己定义,但是许多属性都有默认值。然后调用CreateWindow()函数来产生具有上述定义属性的已注册窗口,但是需要注意的是它只是生成窗口,但并不显示之,所以还需要调用一个函数ShowWindow()将它显示在屏幕上,做完这些初始化工作以后,系统将进入消息循环:

while(GetMessage(&msg,NULL,0,0)){

TranslateMessage(&msg)

DispatchMessage(&msg)}

当消息循环捕捉到消息以后将交由窗口函数WndProc()窗口函数进行相应的处理。这样,一个基于消息事件驱动的WIN32程序的雏形就建立了起来。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11080851.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存