网络编程 初探windows编程

4 篇文章 1 订阅
订阅专栏

目录

一、什么是Winodws编程

二、开发环境搭建以及如何学习

三、VA助手安装

四、第一个Win32程序

五、窗口类句柄/窗口类对象

六、Winodws消息循环机制

七、Windows数据类型


一、什么是Winodws编程

Windows 编程指的是在 Microsoft Windows 操作系统上进行软件开发的过程,通常涉及使用 Windows API、.NET Framework、WPF(Windows Presentation Foundation)、WinForms 等技术。下面我将简要介绍一些相关的内容。

  1. Windows API: Windows 应用程序接口(Windows API)是一组定义了 Windows 操作系统核心功能的函数和数据结构的集合。通过调用这些函数,开发者可以实现诸如窗口管理、文件操作、内存管理等底层操作。使用 Windows API 进行编程可以获得最高的灵活性和控制力,但也需要处理更多的细节。

  2. .NET Framework: .NET Framework 是一个由微软开发的应用程序框架,它提供了大量的库和运行时环境,使开发者能够使用多种编程语言(如C#、 VB.NET)来开发 Windows 应用程序。.NET Framework 包括了各种功能强大的类库,以及对于 Windows 应用程序开发非常有用的 Windows Forms 和 WPF 框架。

  3. WPF(Windows Presentation Foundation): WPF 是用于创建 Windows 客户端应用程序的 UI 框架,它提供了一种基于 XML 的标记语言 XAML(Extensible Application Markup Language)来定义用户界面,同时支持丰富的数据绑定、样式模板、动画等功能。相较于传统的 Windows Forms,WPF 提供了更加灵活和强大的界面设计方式,可以实现更富有表现力的用户界面。

  4. WinForms: Windows Forms 是 .NET Framework 中的一部分,提供了一种快速开发 Windows 应用程序的方式。开发者可以使用 Visual Studio 中的可视化设计器来创建界面,并通过添加事件处理程序等方式来实现应用程序逻辑。虽然 WinForms 在界面设计方面不如 WPF 灵活,但它仍然是许多传统的 Windows 应用程序的首选开发方式

.h 文件和 .cpp 文件通常用于 C++ 项目的代码组织。它们有不同的作用:

  1. .h 文件(头文件):

    • 通常包含类的声明、函数原型、常量定义以及其他需要在多个源文件中共享的信息。
    • 头文件中通常不包含函数或类的实际实现,而是只包含其声明,以便其他源文件可以通过包含头文件来访问这些声明。
    • 使用头文件可以帮助提高代码的模块化和可维护性,因为它们允许将代码分割成更小的单元并进行组织。
    • 头文件通常使用 ".h" 扩展名,但也可能使用 ".hpp" 或其他类似的形式。
  2. .cpp 文件(源文件):

    • 包含了类成员函数和全局函数的实际实现,以及全局变量的定义等。
    • 在 .cpp 文件中,你会找到与头文件中声明的内容对应的实际代码。
    • .cpp 文件通常被编译器编译成目标代码,最终链接成可执行程序或库。

一般来说,C++ 项目中的代码都会以这种方式进行组织,头文件用于声明和共享信息,而 .cpp 文件用于实现声明并包含实际的代码逻辑。这种分离有助于提高代码的可读性、可维护性和重用性。

API:Application Programming Interface 应用程序编程接口。

SDK:Software Development Kit 软件开发工具包,一般会包括 API 接口文档,示例文档,帮助文档,使用手册,相关工具等。

二、开发环境搭建以及如何学习

Visual Studio Installer中选择

创建项目选择Windows桌面应用程序即可

如何学习?多查官方参考文档

Windows API官方文档: Windows API 索引 - Win32 apps | Microsoft Learn

三、VA助手安装

下载地址: https://www.jb51.net/softs/756854.html

解压密码:www.jb51.net

如果之前安装失败或者卸载过,参考下面文章解决

https://blog.csdn.net/m0_52776283/article/details/128329994

常用快捷键:只记住这几个就可以了,剩下的可以慢慢探索

  • ALT+G:跳到定义
  • ALT+SHIFT+F:查找所有引用
  • ALT+左箭头/右箭头:回退/前进

四、第一个Win32程序

#include <windows.h>
#include <stdio.h>

/*
    如何创建一个窗口:
		1. 设计窗口类
		2. 注册窗口类
		3. 创建窗口,操作系统会把它绘制出来
		4. 消息循环
		5. 回调函数
*/


// LPCTSTR = CHAR*  指向多字节字符串的指针
LPCTSTR clsName = "My";
LPCTSTR msgName = "欢迎学习";


// LRESULT = long
LRESULT CALLBACK MyWinProc(
	HWND hwnd, // handle to window
	UINT uMsg, // message identifier
	WPARAM wParam, // first message parameter word
	LPARAM lParam // second message parameter long
)
{
	//uMsg 消息类型
	int ret;
	/*
		声明 HDC hdc; 的目的是创建一个变量 hdc,用于存储设备上下文环境的句柄。
		通过使用设备上下文句柄,可以将绘图操作指定给特定的设备,如屏幕、打印机或图像文件等。
		在实际应用中,通常需要使用特定的函数来获取设备上下文句柄,例如 GetDC 函数用于获取屏幕设备上下文句柄。
		获取到设备上下文句柄后,可以使用它来进行相关的绘图操作,例如绘制线条、填充颜色、显示文本等。
		完成绘图操作后,可能需要使用相应的函数释放设备上下文句柄,以避免资源泄露。
	*/
	HDC hdc;
	switch (uMsg)
	{
	case WM_CHAR:
		char szChar[20];
		sprintf_s(szChar, "您刚才按下了: %c", wParam);
		MessageBox(hwnd, szChar, "char", NULL);
		break;
	case WM_LBUTTONDOWN:
		MessageBox(hwnd, "检测鼠标左键按下", "msg", NULL);
		break;
	case WM_PAINT:
		// 声明了一个名为 ps 的 PAINTSTRUCT 结构体变量。PAINTSTRUCT 结构体用于存储绘图信息,包括绘图区域的坐标等。
		PAINTSTRUCT ps;
		// BeginPaint 函数用于开始绘图操作,并返回一个设备上下文句柄 hdc。
		// 它接受窗口句柄 hwnd 和指向 PAINTSTRUCT 结构体的指针作为参数。这个函数的调用表示程序即将开始在指定窗口进行绘图操作。
		hdc = BeginPaint(hwnd, &ps);
		TextOut(hdc, 0, 0, "www.baidu.com", strlen("www.baidu.com"));
		EndPaint(hwnd, &ps);
		// 用于结束绘图操作,并清理相关资源。
		MessageBox(hwnd, "重绘", "msg", NULL);
		break;
	case WM_CLOSE:
		ret = MessageBox(hwnd, "是否真的结束?", "msg", MB_YESNO);
		if (ret == IDYES)
		{
			/*
			DestroyWindow(hwnd) 是一个 Windows API 函数,用于销毁指定窗口。

			在这里,hwnd 是一个窗口句柄,代表要销毁的窗口。通过调用 DestroyWindow(hwnd) 函数,程序可以关闭并销毁与该窗口相关联的资源。

			当调用 DestroyWindow 函数时,系统会发送 WM_DESTROY 消息给窗口过程函数,以通知窗口即将被销毁。窗口过程函数可以处理这个消息,并执行一些清理操作。之后,系统会释放与窗口相关的资源,包括设备上下文句柄、菜单、图标等。

			值得注意的是,使用 DestroyWindow 函数只能销毁由当前进程创建的窗口。如果要销毁其他进程创建的窗口,可以使用 PostMessage 函数发送 WM_CLOSE 消息给目标窗口。
			
			*/
			DestroyWindow(hwnd);
		}
		break;
	case WM_DESTROY:
		/*
		PostQuitMessage(0) 是一个 Windows API 函数,用于向消息队列中发送一个退出消息,通知应用程序要求其退出消息循环并终止。

		在这里,参数 0 表示指定的退出代码。当应用程序接收到这个退出消息后,它将会开始退出过程,并使用给定的退出代码作为程序的返回值。
		*/
		PostQuitMessage(0);
		break;
	default:
		// 默认过程函数处理其他消息
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
	}
	return 0;
}


// WINAPI = __stdcall
int WINAPI WinMain(
	_In_ HINSTANCE hInstance,              // 标识当前程序实例的句柄    
	_In_opt_ HINSTANCE hPrevInstance,
	_In_ LPSTR lpCmdLine,                  
	_In_ int nShowCmd
) {
	// a 设计一个窗口类
	//定义和配置窗口对象
	WNDCLASS wndcls;                 // 用来存储窗口类信息的结构体实例。
	wndcls.cbClsExtra = NULL;        // 表示窗口类的额外类内存,这里设为NULL表示不使用额外类内存。
	wndcls.cbWndExtra = NULL;        // 表示每个窗口实例的额外窗口内存,这里同样设为NULL表示不使用额外窗口内存
	wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);     // 指定了窗口背景的画刷句柄,这里使用 GetStockObject 函数获取了白色画刷。
	wndcls.hCursor = LoadCursor(NULL, IDC_ARROW);                   // 指定了光标的句柄,这里使用 LoadCursor 函数加载了箭头光标。
	wndcls.hIcon = LoadIcon(NULL, IDI_APPLICATION);                 // 指定了窗口的图标句柄,这里使用 LoadIcon 函数加载了应用程序图标。
	wndcls.hInstance = hInstance;                                   // 指定了窗口类所属的实例句柄。程序的句柄
	wndcls.lpfnWndProc = MyWinProc;                                 // 指定了窗口过程的地址,即窗口的消息处理函数。
	wndcls.lpszClassName = clsName;                                 // 指定了窗口类的类名。
	wndcls.lpszMenuName = NULL;               // 指定了窗口的菜单名,这里设置为NULL表示没有菜单。
	wndcls.style = CS_HREDRAW | CS_VREDRAW;   // 指定了窗口类的风格,CS_HREDRAW | CS_VREDRAW 表示当窗口大小水平或垂直方向发生变化时,窗口的内容需要重绘。
	
	// b 注册窗口类
	// 窗口类的信息被注册到系统中,使得之后可以使用这个窗口类来创建窗口实例,以便让系统知道如何处理特定类型的窗口。
	RegisterClass(&wndcls);
	
	// c 创建窗口
	// 通过调用 CreateWindow 函数,根据指定的窗口类、标题和风格等信息,系统会创建一个窗口实例,并返回该窗口的句柄。
	// 句柄可以用于后续对窗口进行操作和管理。
	/*
		clsName: 窗口类名,这里使用之前注册的窗口类 clsName。
		msgName: 窗口标题,用于在窗口的标题栏显示窗口的名称。
		WS_OVERLAPPEDWINDOW: 窗口风格,指定了窗口的外观和行为,这里使用了 WS_OVERLAPPEDWINDOW 风格,表示创建一个具有标题栏、边框和最大化/最小化按钮的窗口。
		CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT: 窗口的初始位置和大小,这里使用 CW_USEDEFAULT 表示使用系统默认值,即由系统决定窗口的位置和大小。
		NULL: 父窗口句柄,这里设置为NULL表示新创建的窗口没有父窗口。
		hInstance: 窗口所属的实例句柄,用于标识窗口所属的应用程序。
		NULL: 与窗口相关联的菜单句柄,这里设置为NULL表示不使用菜单。
	*/
	HWND hwnd = CreateWindow(clsName, msgName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
		CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance,
		NULL);
	
	//d 显示和刷新窗口
	ShowWindow(hwnd, SW_SHOWNORMAL);  // 用于显示先前创建的窗口实例,这里使用 SW_SHOWNORMAL 表示以原始大小和位置显示窗口。
	UpdateWindow(hwnd);               // 用于更新先前创建的窗口实例的客户区域。这样做可以立即将窗口客户区域的内容显示出来。
	
	//e 消息循环 GetMessage 只有在接收到 WM_QUIT 才会返回 0
	//TranslateMessage 翻译消息 WM_KEYDOWN 和 WM_KEYUP 合并为 WM_CAHR


	// MSG是一个结构体
	MSG msg;

	/*
		当调用 GetMessage 函数时,系统会检查当前线程的消息队列,如果队列中有消息,则将消息复制到 msg 结构体中,并返回非零值;
		如果队列中没有消息,函数会将当前线程置于等待状态,直到有新消息到达为止。
		通常情况下,这行代码会被放在一个循环中,不断地调用 GetMessage 函数以获取并处理消息,直到接收到退出程序的消息为止。
		通过不断地获取消息,程序可以及时响应用户的输入、系统事件等各种消息,从而实现交互式的用户界面和响应式的应用程序逻辑。
	*/

	while (GetMessage(&msg, NULL, NULL, NULL))  // 3个NULL 表示没有过滤规则,即获得所有消息
	{
		/*
			调用了 TranslateMessage 函数,用于将虚拟键消息转换为字符消息。
			具体来说,该函数会检查接收到的消息是否属于虚拟键消息(如键盘按键事件),
			如果是,则将其转换为相应的字符消息(如字符输入事件)。这样可以确保程序正确处理用户的键盘输入。
		*/
		TranslateMessage(&msg);
		/*
			调用了 DispatchMessage 函数,用于将消息分派给窗口过程(Window Procedure)来进行处理。
			每个窗口都有一个窗口过程,它是对窗口消息进行处理的函数。
			DispatchMessage 函数会根据消息中的窗口句柄找到对应的窗口过程,并将消息传递给该窗口过程进行处理。
		*/
		DispatchMessage(&msg);
	}
	return msg.wParam;
}

五、窗口类句柄/窗口类对象

窗口就是屏幕上的一片区域,接收用户的输入,显示程序的输出。可以包含标题栏,菜单栏,工具栏,控件等。

句柄[Handle]:(资源的编号,二级指针,门把手),窗口句柄,文件句柄,数据库连接句柄。

C++窗口类对象与窗口并不是一回事,它们之间惟一的关系是C++窗口类对象内部定义了一个窗口句柄变量,保存了与这个 C++窗口类对象相关的那个窗口的句柄。窗口销毁时,与之对应的 C++窗口类对象销毁与否,要看其生命周期是否结束。但 C++窗口类对象销毁时,与之相关的窗口也将销毁。

WinMain函数的第一个参数,HINSTANCE hInstance 是一个表示程序实例的句柄(handle)。在Windows操作系统中,每个正在运行的程序都有一个唯一的实例句柄,用于标识该程序在内存中的位置和资源。hInstance 参数在程序启动时由操作系统传递给程序的主函数 WinMain(),以便程序可以使用该句柄来访问程序实例的各种资源,如窗口、图标、菜单等。

通过使用 hInstance 句柄,程序可以获取程序的路径、图标资源、对话框模板等信息,或者创建和管理窗口、菜单、图标等对象。另外,在多个实例同时运行的情况下,hInstance 句柄还可用于区分不同的程序实例。需要注意的是,hInstance 是一个抽象的句柄值,它不直接表示实际的内存地址。在操作系统中,句柄通常被映射到实际的内存地址或资源描述符上,程序可以通过句柄来间接引用这些内存地址或资源。

六、Winodws消息循环机制

事件可分为几种,由输入设备触发的,比如鼠标键盘等等。由窗体控件触发的,比如button控件,file菜单等。还有就是来自Windows内部的事件。这三种称为事件。

消息,是由事件翻译而来的。事件产生消息。从数据结构角度来讲,消息是一种结构体。结构如下:

typedef struct tagMSG
  
 {
  
     HWND hwnd;  //窗口句柄。
  
      UINT message;//消息类型。
  
      WPARAM wParam;//32位附加信息。

      LPARAM lParam;//32位附加信息。
 
     DWORD time;//消息发送时间。
 
     POINT pt;//消息发送时,鼠标所在位置。
 
 }MSG;    

消息队列:消息队列有两种,分为系统消息队列和应用程序消息队列。产生的消息首先由Windows系统捕获,放在系统消息队列,再拷贝到对应的应用程序消息队列。32/64位系统为每一个应用程序维护一个消息队列。

消息循环:系统为每个应用程序维护一个消息循环,消息循环会不断检索自身的消息队列。每有一个消息,就用GetMessage()取出消息。

while(GetMessage (&msg, NULL, 0, 0))//Windows消息循环。
 
 {
     TranslateMessage (&msg) ;//翻译消息,如按键消息,翻译为WM_CHAR
 
     DispatchMessage (&msg) ;//分发消息到对应窗口
 
 }

GetMessage具有阻塞机制。当消息队列中没有消息时,程序非忙等,而是让权等待。当收到WM_QUIT时,GetMessage返回false,循环停止,同时应用程序终止。

消息处理:DispatchMessage()把取出来的消息分配给相应的窗口或线程,由窗口过程处理函数DefWindowProc()处理。

Windows的应用程序靠消息驱动来实现功能。而消息驱动靠消息机制来处理。消息机制就是由消息队列,消息循环,消息处理构成的。

那么,消息机制是如何运作的呢?

当用户运行一个应用程序,通过对鼠标的点击或键盘按键,产生一些特定事件。由于Windows一直监控着I/O设备,该事件首先会被翻译成消息,由系统捕获,存放于系统消息队列。经分析,Windows知道该消息应由那个应用程序处理,则拷贝到相应的应用程序消息队列。由于消息循环不断检索自身的消息队列,当发现应用程序消息队列里有消息,就用GetMessage()取出消息,封装成Msg()结构。如果该消息是由键盘按键产生的,用TranslateMessage()翻译为WM_CHAR消息,否则,用DisPatchMessage()将取出的消息分发到相应的应用程序窗口,交由窗口处理程序处理。Windows为每个窗体预留了过程窗口函数,该函数是一个回掉函数,由系统调用,应用程序不能调用。程序员可以通过重载该函数处理我们”感兴趣”的消息。对于不感兴趣的消息,则由系统默认的窗口过程处理程序做出处理。

上面代码的执行过程为:

  1. 消息循环调用GetMessage()从消息队列中查找消息进行处理,如果消息队列为空,程序将停止执行并等待(程序阻塞)。
  2. 事件发生时导致一个消息加入到消息队列(例如系统注册了一个鼠标点击事件),GetMessage()将返回一个正值,这表明有消息需要被处理,并且消息已经填充到传入的MSG参数中;当传入WM_QUIT消息时返回0;如果返回值为负表明发生了错误。
  3. 取出消息(在Msg变量中)并将其传递给TranslateMessage()函数,这个函数做一些额外的处理:将虚拟键值信息转换为字符信息。这一步实际上是可选的,但有些地方需要用到这一步。
  4. 上面的步骤执行完后,将消息传递给DispatchMessage()函数。DispatchMessage()函数将消息分发到消息的目标窗口,并且查找目标窗口过程函数,给窗口过程函数传递窗口句柄、消息、wParam、lParam等参数然后调用该函数。
  5. 窗口过程函数中,检查消息和其他参数,你可以用它来实现你想要的操作。如果不想处理某些特殊的消息,你应该总是调用DefWindowProc()函数,系统将按按默认的方式处理这些消息(通常认为是不做任何操作)
  6. 一旦一个消息处理完成,窗口过程函数返回,DispatchMessage()函数返回,继续循环处理下一个消息。

七、Windows数据类型

Unicode 是世界通用的字符编码标准,使用 16 位数据表示一个字符,一共可以表示 65535 种字符。 ASNI 字符集,使用 8 位数据或将相邻的两个 8 位的数据组合在一起表示特殊的语言字符。如果一个字节是负数,则将其后续的一个字节组合在一起表示一个字符。这种编码方式的字符集也称作“多字节”字符集。

DWORD                 32 字节无符号整型数据 

DWORD32               32 字节无符号整型数据
 
DWORD64               64 字节无符号整型数据

HANDLE                对象的句柄,最基本的句柄类型

HICON                 图标的句柄

HINSTANCE             程序实例的句柄

HKEY                  注册表键的句柄

HMODULE               模块的句柄

HWND                  窗口的句柄

INT                   32位符号整型数据类型

INT_PTR               指向 INT 类型数据的指针类型

INT32                 32位符号整型

INT64                 64 位符号整型

LONG32                32 位符号整型

LONG64                64 位符号整型

LPARAM                消息的 L 参数

WPARAM                消息的 W 参数

LPCSTR                Windows,ANSI,字符串常量

LPCTSTR               根据环境配置,如果定义了 UNICODE 宏,则是LPCWSTR类型,
                                                         否则是 LPCSTR 类型
LPCWSTR               UNICODE 字符串常量

LPDWORD               指向 DWORD 类型数据的指针

LPSTR                 Window,ANSI,字符串变量

LPTSTR                根据环境配置,如果定义了 UNICODE,则是LPWSTR类型,否则是 LPSTR 类型

LPWSTR                UNICODE 字符串变量

SIZE_T                表示内存大小,以字节为单位,其最大值是CPU 最大寻址范围TCHAR 如果定义了     
                      UNICODE,则为 WCHAR,否则为CHARWCHAR 16 位 Unicode 字符

变量命名规则:

Windows编程初步(一)
业精于勤,荒于嬉
08-03 2530
Windows编程初步(一) 使用C语言进行Windows开发,必然使用到WindowsSDK。Windows SDK指Windows开发人员工具包,是为使用C语言开发Windows程序所提供的工具集。里面提供的工具异常全面丰富,很少有人能全部了解,在开发Windows应用程序时,应同时使用MSDN,即俗称Windows开发帮助。安装好MSDN后,在程序设计过程中,不记得函数调用方式时,可以在VC中将光标移动到函数名上按下F1帮助键,即可以获得这个函数的所有信息,非常方便;在遇到难解的编译出错信息时,也可在
windows编程--网络编程学习--winsock编程(2)
热门推荐
我只是一个单纯的2的博客
07-22 1万+
Winsock下TCP实现过程
Windows网络编程
云破日出
08-22 2923
第一章 序言               我写这个专题的目的,一方面是为了通过对网络编程再一次系统的总结,提高自己的网络编程水平,特别是Windows下的网络编程水平。同时,我也希望,能为众多初学网络编程的人提供一点帮助,因为我开始学习网络编程的时候,能找到的资料就很少。当然,花钱可以买到翻译版本的书:)              首先向大家推荐一本很好的参考书,Network Pro
网络编程基础
最新发布
qq_61872165的博客
09-14 1383
♫什么是网络编程网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络数据传输。在网络编程中,获取一个网络资源,涉及到两次网络数据传输: 发送端请求数据的发送 和 接受端响应数据的发送,其中提供服务的一端叫做接受端,获取服务的一端叫做客户端。
Windows编程
笔记|思路|总结
01-03 1495
Windows编程
Windows环境下C语言网络编程初探
"Windows下C语言网络编程快速入门" 在Windows环境下进行C语言的网络编程,首先需要理解的是,与传统的C语言控制台程序不同,Windows系统提供了更为丰富的API(Application Programming Interface)供开发者使用,...
C#网络编程初探[参照].pdf
10-11
《C#网络编程初探》 C#作为.NET框架的核心语言,其网络编程能力主要依赖于.NET Framework SDK提供的类库。在SDK中,有两个关键的命名空间用于网络编程,即"System.Net"和"System.Net.Sockets"。这两个命名空间提供...
Windows下C语言网络编程初探
这些参数在后续的Windows编程中扮演着重要角色,用于管理应用程序的状态和交互。 在进行C网络编程时,开发者需要掌握如何使用Windows Socket API(简称Winsock)来实现网络通信。Winsock提供了与Berkeley Sockets...
Windows编程入门
weixin_47652005的博客
09-27 1296
前言 主要参考龙书 《DirectX 12 3D 游戏开发实战》 的附录A,为个人的笔记整理 环境:VS2019 官方链接 MSDN(Microsoft developer network): https://docs.microsoft.com/zh-cn/ Win32 API: https://docs.microsoft.com/en-us/windows/win32/api/ https://docs.microsoft.com/zh-cn/windows/win32/ 在上面链接中也有官方的入门教
windows编程
03-10
pdf资源,有很好的参考价值!绝对绝对要看哦!
Windows编程从入门到精通(书)---浅显易懂,带代码讲解
12-27
循序渐进的讲述了网络编程技术,很适合使用c++开发网络程序的初学者。
windows编程入门(C语言)
09-09
学习C语言很久了,是不是一直在跟黑乎乎的屏幕打交道,像QQ、360、VC6.0这样的软件都是带界面的,怎么做到的呢? 前面我们讲的”黑屏“叫控制台应用程序(Win32 Console Application),也称DOS程序(或MS-DOS程序)。DOS是早期的命令式操作系统,很难做出漂亮的界面,除了开发人员,”黑屏“对普通用户很不友好。 带界面的程序叫Windows应用程序(Win32 Application)。Windows是一款现代操作系统,带有丰富的交互界面,使用简单,无需记忆繁杂的命令。 使用C语言可以开发出Windows应用程序,也就是带界面的程序,只是绝大部分C语言教程没有讲,它们只讲了基本语法,让很多初学者认为学C语言没用,什么都做不出来。 其实不是这样的,C语言只是一种工具,需要与Windows系统结合,借助Windows提供的函数才能开发出漂亮的程序。 这套教程,将以简单明了的方式教你使用C语言来编写带界面的 Windows 应用程序。
windows编程入门教程
09-19
Visual C++面向对象与可视化程序设计,包括: 第2章 VC++6.0开发环境 第3章 Windows应用程序 第4章 Windows的GDI及Windows绘图(1)(2) 第5章 文本的输出方法与字体的设置 第6章 Windows应用程序对键盘与鼠标的响应 第8章 MFC基础知识 第9章 标准控件在可视化编程中的应用(1) 第9章 标准控件在可视化编程中的应用(2)(3) 第10章 在MFC中创建应用程序的资源(1) 第10章 在MFC中创建应用程序的资源(2) 第11章 单文档与多文档 第13章 数据库应用程序开发(简介)
window编程入门
学习
05-18 1913
第一个win32程序
Windows编程入门程序详解
dianyin8310的博客
10-26 522
Windows编程入门程序详解 1.程序 /************************************************************************ * 名 称:Windows_Frist_Code.cpp * 功 能:Windows编程入门 * 描 述:包含WinMain函数、WNDCLASS、消息循环等多种内容 ...
windows编程-网络编程
qwertyasdfghh的博客
01-16 2018
/ 1 定义和配置窗口对象//定义交互响应//回调//定义窗口代号//回调MyWinProc是我们的自定义函数,我们将这个函数回调到这个窗口对象中,将操作和窗口联系在一起(3)注册窗口类虽然我们定义了一个窗口,但是系统并不知道这个窗口的存在,所以接下来我们通过RegisterClass()函数来注册窗口类。
写文章

热门文章

  • 内网安全:内网穿透详解 25485
  • Visual Studio 2019使用详解 17167
  • 文件上传漏洞(全网最详细) 14724
  • 内网安全:代理技术详解 9240
  • 内网安全:隧道技术详解 7750

分类专栏

  • 代码审计 3篇
  • 漏洞发现 4篇
  • API攻防 1篇
  • 系统攻防 1篇
  • 云上攻防 8篇
  • 计算机组成与系统结构 3篇
  • 服务攻防 7篇
  • Web攻防 34篇
  • 安全开发 19篇
  • 信息收集 10篇
  • 基础入门 10篇
  • QT 9篇
  • 内网渗透 13篇
  • MFC 19篇
  • CTF-PWN 8篇
  • 权限提升 10篇
  • C与汇编 17篇
  • ACM日记 17篇
  • C/C++ 22篇
  • MySQL数据库 18篇
  • SDK 6篇
  • ASM 4篇
  • Windows核心编程 10篇
  • 网络编程 4篇
  • Python编程 6篇
  • Web开发 2篇
  • 渗透测试面试专栏 5篇
  • 应急响应专栏 5篇
  • 160个CrackMe
  • JavaWeb
  • CVE漏洞复现 2篇
  • Java后端开发专栏 3篇

最新评论

  • Day105:代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析

    kenny323: 所以这个_emlog 改了怎么构造正则

  • Day58:WEB攻防-RCE代码&命令执行&过滤绕过&异或无字符&无回显方案&黑白盒挖掘

    InfI1traTe.: https://xz.aliyun.com/t/9387?time__1311=n4%2BxnD0DuAK7qY5Aq05%2BbDyDmxGwM0BOqAKqQx&u_atoken=572d9b19ea2c6997c04ce2cb6840dc61&u_asig=0a472f8317286170513598368e0049

  • MFC 序列化机制

    一只理智鹏: 为啥我这里全是乱码

  • SQLMap使用教程:从入门到入狱详细指南

    2301_76719583: 如果显示没有id这个参数怎么整

  • Day58:WEB攻防-RCE代码&命令执行&过滤绕过&异或无字符&无回显方案&黑白盒挖掘

    2301_78054703: 大佬,有没有这个PHP和Python的脚本代码

大家在看

  • Java老鸟前端小白来尝试配置uniapp+uview准备自动动手开发小程序
  • 初一系列——整数四则运算
  • CorelDRAW2024最新免登录补丁25.2.0.301破解版安装包下载 605
  • 如何快速创建您的个人或企业网站
  • 软件设计师:系统开发与运行 802

最新文章

  • Day104:漏洞发现-漏扫项目篇&武装BURP&浏览器插件&信息收集&分析辅助&遥遥领先
  • Day91:API攻防-接口安全&SOAP&OpenAPI&RESTful&分类特征导入&项目联动检测
  • Day92:系统攻防-Windows&Linux&远程探针&本地自检&任意执行&权限提升&入口点
2024
04月 28篇
03月 65篇
02月 14篇
01月 28篇
2023年172篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dao-道法自然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳坪山网站建设公司清远外贸网站关键词优化工具上饶网络推广网站优化上海网站优化排名方案上海seo网站排名优化公司上海信息网站搭建优化网站优化每天跟新新闻武汉网站推广网站优化网站的优化优选火3星顶尖网站优化推广方案示范网站关键词优化推广常熟网站优化哪家好中牟网站优化排名石家庄效果好的网站优化哪家好宿迁seo网站优化推广网站排名优化工具免费咨询网站排名优化 的方式中山网站优化实战伦敦网站优化公司网站优化面试望江网站优化哪家便宜日喀则网站搜索优化eo网站优化技术重庆网站关键词优化系统江门网站优化是什么商洛网站关键词优化排名家政行业网站优化策划青岛网站优化靠谱网站搜索优化就找s火20星项城百度网站优化有哪些为什么网站一直优化香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化