#include <windows.h> //包括了所有基本的WINDOWS API函数,写WIN32应用程序必须包含
LRESULT CALLBACK WndProc(HWND hMainWnd,UINT message,WPARAM wParam,LPARAM lParam)
//LRESULT 是函数的类型,CALLBACK声明了函数参数的调用顺序。详情请看这里。 {
switch(message) //建立消息循环。关于消息请看这里。 { case WM_DESTROY: //如果是WM_DESTROY消息,进入这个处理过程 { PostQuitMessage(0); //退出 return 0; } default: break; } //以下这个函数是调用默认的消息处理函数 return DefWindowProc(hMainWnd,message,wParam,lParam); }
//这里要注意了,这里是程序的入口点,相当于DOS里的 main()函数,只不过参数都了些。 int CALLBACK WinMain(HINSTANCE hInstance, //这个参数是实例句柄 HINSTANCE hPrevInstance, //上一个实例句柄 LPSTR lpszCmdParam, //命令行字符串 int nCmdShow) { MSG message; //定义消息数据结构 WNDCLASS myWC; //定义窗口风格 HAND hMainWnd; //窗体句柄 char szAppTitle[]="API建立的程序"; //应用程序标题字符串 char szAppName[]="WinAPIDemo"; //应用程序名 if(! hPrevInstance) { //以下的定义是关于窗口参数的 myWC.style = CS_HREDRAW | CS_VREDRAW; myWC.lpfnWndProc=WndProc; myWC.cbClsExtra= 0; myWC.cbWndExtra =0; myWC.hInstance=hInstance; myWC.hIcon=LoadIcon(NULL,IDI_INFORMATION); myWC.hCursor=LoadCursor(NULL,IDC_HELP); myWC.hbrBackground=GetStockObject(WHITE_BRUSH); myWC.lpszClassName=szAppName; myWC.lpszMenuName = NULL; RegisterClass(&myWC); //注册窗体 } hMainWnd=CreateWindow(szAppName, //创建窗体 szAppTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hMainWnd,SW_SHOWMAXIMIZED); //显示窗体
UpdateWindow(hMainWnd); //更新窗体 while(GetMessage(&message,NULL,0,0)) //建立消息循环 { TranslateMessage(&message); DispatchMessage(&message);
} return (TRUE); }
这里面最让人不明白的就是数据类型了。当你学完标准的C后,你看这个程序,就跟看天书一样,很多的东西你明白语法,但是就是看不懂。所以,首先我来说一下WINDOWS编程里的数据类型。
以下数据取自于VC6 Include目录下的“windef.h”文件。
#define CALLBACK PASCAL #define WINAPI CDECL #define WINAPIV CDECL #define APIENTRY WINAPI #define APIPRIVATE CDECL
#define PASCAL __pascal
#define CALLBACK __stdcall #define WINAPI __stdcall #define WINAPIV __cdecl #define APIENTRY WINAPI #define APIPRIVATE __stdcall #define PASCAL __stdcall
typedef unsigned long DWORD; typedef int BOOL; typedef unsigned char BYTE; typedef unsigned short WORD; typedef float FLOAT;
typedef int INT; typedef unsigned int UINT;
typedef UINT WPARAM; typedef LONG LPARAM; typedef LONG LRESULT;
你可以看到,这里面有很多的定义的本质是一样的,为的只是便于阅读而已。其实,WIN32环境下只有一种数据类型,就是32BIT整形,其他的都是来自于这里。而且,绝大部分数据类型直接就是32BIT的。这样,你所要做的事情,就是熟悉这些名字,详情见《WIN32数据类型入门》。
int CALLBACK WinMain()。这个函数是WIN32程序的入口,就象DOS下的main(),不同的是main函数的参数是可选的,WinMain函数的参数是必须的。相同的是,main和WinMain都不是给程序员调用的,而是有系统调用的。在C里面,main是没有返回值的,我们看到WinMain是有返回值的,它是用 int CALLBACK 来修饰的。CALLBACK 说明了WinMain函数参数调用的顺序。int是说明了函数的返回值。关于CALLBACK的意义,请参考《WIN32函数压栈顺序》。根据“windef.h”文件的定义,WinMain函数的修饰符的写法也不是唯一的。你可以有很多中写法。例如:INT PASCAL WinMain(),int __stdcall WinMain()。这些写法其实本质是一样的,只是为了不同的风格。
下面,的语句很多书里都有介绍,我就不详细说了,如果你还不熟悉,请看《WIN32数据类型入门》。
当你把程序全部书写完毕后,你会保存为一个C文件,在这里我保存为了miniwin.c。当你双击这个文件就会用VC6打开。这时候你首先要看看,你的程序有没有语法错误了,VC++可以帮你自动完成这个工作。选择Build-->>Compile winiwin.c。根据,我的经验,很多第一次手工输入这个程序的人,都会出现各种各样的错误,这个问题比较简单,一般都是拼写错误。对照上面的程序就可以了。当你点下菜单按纽后,出现一个消息框,提示你没有建立相关的工程,你直接选yes,VC会自动帮你建立的(看看你保存miniwin.c的目录下,是不是多了很多文件呀)。如果,你的程序拼写没问题的话,你将看到:miniwin.obj - 0 error(s), 0 warning(s)。这就是说明了,编译已经通过了。然后就是LINK了。你在Build菜单先选择“建立EXE”的选项。本来是可以建立的,但是VC却提示:Linking... LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main Debug/miniwin.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe.
miniwin.exe - 2 error(s), 0 warning(s) 这个问题几乎存在于所有的VC入门教材里,程序有问题吗?显然不是的,上面的这个程序是正确的。问题出在这里了。请你选择Project-->>Setting,选择Link选项卡,最底下有个Project Options删除里面的/subsystem:console,按OK保存。然后再建立EXE试试。看到这个提示了吗?miniwin.exe - 0 error(s), 0 warning(s)。如果有,恭喜你,成功了。这时候在DEBUG目录下会有一个EXE文件,双击它,一个简单的窗体就出现在你面前了。
至此,你已经可以建立WIN32程序了,这个程序是一个框架,里面是最基本的东西 .
|
相关推荐
初级3D编程入门书籍———Windows游戏编程大师技巧(第二版).chm
这本书籍首先会介绍SolidEdge的基础知识,包括用户界面、基本操作和设计流程,以便读者对软件有一个全面的认识。然后,它将详细讲解VisualBasic编程环境,包括VBScript语言的基本语法、变量、数据类型、控制结构(如...
总的来说,《Windows API范例入门与提高》初级教程是一本实用性很强的教材,适合有一定C/C++基础并希望深入学习Windows编程的初学者。通过系统学习,你将能够熟练地运用Windows API编写出高效、稳定的桌面应用程序。
通过这个教程,你将不仅能够编写基本的Windows应用程序,还能掌握高级的Windows编程技巧,为将来开发复杂的桌面应用打下坚实的基础。在实践中,结合具体的代码示例和项目练习,将使你更好地理解和掌握这些知识,成为...
VB编程入门教程是一个非常适合初学者的学习资源,通过图文并茂的方式,帮助新手快速掌握编程基础。 本教程可能涵盖以下关键知识点: 1. **基本概念**:首先,你会了解到VB的基本概念,如编程环境、代码编辑器、...
第一章 VC入门 1.1 如何学好VC 1.2 理解Windows消息机制 1.3 利用Visual C++/MFC开发Windows程序的优势 1.4 利用MFC进行开发的通用方法介绍 1.5 MFC中常用类、宏、函数介绍 第二章 图形输出 2.1 和GUI有关的各种对象...
C#编程语言是微软公司开发的一种面向对象的、现代的编程语言,被广泛应用于Windows桌面应用、游戏开发、Web应用以及移动应用等多个领域。对于初级学习者来说,掌握C#的基础知识是至关重要的,这包括语法结构、基本...
Java编程入门通常会包括以下几个关键知识点: 1. **环境搭建**:学习者需要安装Java Development Kit (JDK),配置好环境变量,如JAVA_HOME、Path等,以便于编译和运行Java程序。 2. **基础语法**:包括数据类型...
然后,可以回头学习C++的初级内容,比如《C++ Primer中文第四版》,以及进一步深入学习Windows编程,如《VC初级教程》和《MFC深入浅出第二版》。 学习编程的动机多种多样,包括找工作、提升技能、满足实际需求、...
7. **系统调用和驱动程序**:虽然不是初级开发者通常涉及的领域,但书中仍然对系统调用和驱动程序编写进行了简要介绍,为有兴趣的读者提供了入门知识。 8. **调试技术**:包括使用调试工具如WinDbg,以及调试技巧和...
ASP.NET MVC(Model-View-Controller)模式也是教程中的一个重要部分,它是一种流行的Web开发架构,强调分离关注点,提高代码的可读性和可维护性。你将了解到如何使用路由、控制器和视图来组织应用逻辑,并通过C#...
跨平台开发能力是Qt框架的一个重要特点,它支持许多操作系统,如Windows、Mac OS X、Linux、Unix、Android和iOS等。 标签"qt"为我们指明本文档的主题焦点,即所有的内容都是围绕Qt框架的使用和开发技巧。 根据提供...
编程入门学习是一个广阔而深奥的主题,涉及到许多不同的方面。首先,我们从计算机导论开始,这是理解计算机科学的基础,虽然它可能不涉及具体的编程内容,但能让你对计算机硬件、操作系统、网络等方面有一个基本的...
《C#程序设计初级入门书》是一本专为初学者设计的编程教程,旨在帮助新手快速掌握C#语言的基础知识,领略编程的乐趣。C#,由微软公司开发,是一种面向对象的、现代的编程语言,广泛应用于Windows平台、游戏开发、...
结合"游戏编程入门"这个主题,我们可以深入探讨如何使用DirectX和C++进行游戏开发。 在DirectX中,主要包含以下几个组件: 1. Direct3D:这是DirectX的核心部分,负责处理图形渲染,包括3D模型、纹理、光照和阴影等...
总的来说,《网络象棋》项目涵盖了C++的基础语法、面向对象编程、网络编程和图形界面设计等多个方面,对于想要入门C++游戏编程的初学者,这是一个很好的实践平台。通过分析和修改这个游戏的源码,不仅可以加深对C++...
从给定的文件信息中,我们可以提取到关于PHP初级入门教程的关键知识点,下面将详细解析这些知识点: ### PHP初级入门教程概述 ...无论是构建简单的个人网站还是复杂的Web应用,PHP都是一个值得信赖的选择。
据说,这个名称的灵感来源于团队成员们在喝 Java 咖啡时的一次讨论,Java 岛是印度尼西亚的一个盛产咖啡的地方。 Java 的发展历程可以追溯到 1991 年,当时 Sun 公司试图进入消费电子产品市场,成立了“Green”小组,并...
此外,还提供了两个实战案例——简单控制台应用与 Windows Forms 应用来帮助读者巩固理论知识。 适合人群:对编程有基本认知,想要进一步了解 VB.NET 或转型为 VB.NET 开发者的初级技术人员。 使用场景及目标:① ...