创建你的第一个Windows程序

C# WPF上位机开发(利用tcp/ip网络访问plc) 【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 c# wpf如果是用来开发非标上位机的,那么和plc的通信肯定是少不了的。而且,大部分plc都支持modbus协议,所以这个时候如果有一个库可以帮助我们和plc设备进行modbus通信,那就非常方便的。目前NuGet下关于modbus的函数库还是有一些的,比如EasyModbus。 阅读详情

第一个 Windows 程序

* 纯净版

#include<Windows.h>

int WINAPI WinMain(
	HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR lpCmdLine,
	int iShowCmd
)
{
	MessageBox(NULL, TEXT("Hello, Windows!"), TEXT("HelloMsg"), 1);
	return 0;
}

* 注释版

#include<Windows.h>

int WINAPI WinMain(
	HINSTANCE hInstance,		// 当前实例的句柄,唯一标识了我们这个程序(在Windows程序中,句柄就是一个数值,用来标识某个东西)
	HINSTANCE hPrevInstance,	// 前一个实例的句柄(在Win32中,此概念已弃用,因此该参数总是NULL)
	LPSTR lpCmdLine,			// 命令行参数
	int iShowCmd				// 指明程序最初如何显示(正常显示、最大化到全屏、最小化到任务栏)
)
{
	MessageBox(					// 函数作用:弹出一个小窗口,主要用来显示一些短消息
		NULL,					// 窗口句柄,唯一标识这个窗口
		TEXT("Hello, Windows!"),// 要在信息框里面出现的文本字符串
		TEXT("HelloMsg"),		// 要在标题栏上显示的文本字符串
		1						// 选择按钮的类型
	);
	return 0;
}

/*
Windows API 中"类型"的命名规则:

	HINSTANCE: H + INSTANCE == handle + instance == 实例句柄
	LPSTR: L + P + STR == long + pointer + str == 长字符指针
	i == int
	sz == 以零结尾的字符串
	c == const == 常量
	s == static == 静态

*/

编码问题

  • 早期 Windows 使用 ASCII 进行编码,对于美国自己来用,基本上足够了

  • 随着计算机的发展,世界各国都想要自己的文字能够在计算机上表示

  • 为了统一世界各国的字符编码问题,Unicode 诞生了

  • 它是通过增加位的方式来扩充,由原来的7位,变成现在的16位(方案不同,会有所出入,但只会更多,不会更少)

  • 可容纳的符号,由原来的27=128,变成现在的216=65536(方案不同,会有所出入,但只会更多,不会更少)

  • 使用 Unicode 也有缺点:就是用 Unicode 写的字符占用的空间,会比用 ASCII 写的字符所占用的空间大2倍

  • 为此,人们希望最好能够创建两个版本的程序,让不同需求的人,拿最适合自己的那一个版本即可

  • 于是,有了以下的设计:

使用 TCHAR.H 头文件,这个头文件提供了一系列的类型或函数的替代名称

一个命名为 _UNICODE 的标识符被定义了,在生成代码时

TCHAR 就自动变成 wchar_t,_tprintf 就自动变成 wprintf(w:width)

一个名为 _UNICODE 的标识符没有被定义,在生成代码时

TCHAR 就自动变成 char,_tprintf 就自动变成 printf

同样的道理,对于字符串而言,使用 _T("hello world") 或 _TEXT("hello world") 也能自动变化

#include<Windows.h>
#include<tchar.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
	MessageBox(NULL, _T("你好,窗口!"), _T("信息窗口"), 0);
	return 0;
}

创建窗口

运行代码的时候:

  • 打开项目属性。
  • 导航到“链接器”>“输入”>“附加依赖项”。
  • 在“附加依赖项”字段中添加 winmm.lib(如果列表中还没有的话)

* 纯净版

#include<Windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(
	HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	PSTR szCmdLine,
	int iCmdShow
)
{
	static TCHAR szAppName[] = TEXT("HelloWin");
	HWND		hwnd;
	MSG			msg;
	WNDCLASS	wndclass;

	wndclass.style			= CS_HREDRAW | CS_VREDRAW;
	wndclass.lpfnWndProc	= WndProc;
	wndclass.cbClsExtra		= 0;
	wndclass.cbWndExtra		= 0;
	wndclass.hInstance		= hInstance;
	wndclass.hIcon			= LoadIcon(NULL, IDI_APPLICATION);
	wndclass.hCursor		= LoadCursor(NULL, IDC_APPSTARTING);
	wndclass.hbrBackground	= (HBRUSH)GetStockObject(WHITE_BRUSH);
	wndclass.lpszMenuName	= NULL;
	wndclass.lpszClassName	= szAppName;

	if (!RegisterClass(&wndclass))
	{
		MessageBox(NULL, TEXT("This program requires Windwos!"), szAppName, MB_ICONERROR);
		return 0;
	}

	hwnd = CreateWindow(
		szAppName,
		TEXT("The Hello Program"),
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		NULL,
		NULL,
		hInstance,
		NULL
	);

	ShowWindow(hwnd, iCmdShow);
	UpdateWindow(hwnd);

	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	RECT rect;

	switch (message)
	{
	case WM_CREATE:
		PlaySound(TEXT("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC);
		return 0;

	case WM_PAINT:
		hdc = BeginPaint(hwnd, &ps);

		GetClientRect(hwnd, &rect);

		DrawText(hdc, TEXT("Hello, Windows!"), -1, &rect,
			DT_SINGLELINE | DT_CENTER | DT_VCENTER);

		EndPaint(hwnd, &ps);
		return 0;

	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return DefWindowProc(hwnd, message, wParam, lParam);
}

* 注释版

#include<Windows.h>

/* ------------------------------------------------------------------
	要创建窗口,首先需要注册一个窗口类,而窗口类又需要"窗口过程"来处理窗口消息
	名词解释:窗口过程,是一个函数,用于处理发送到类的所有窗口或发布到所有窗口的所有消息
	窗口过程是给 Windows 回调用的,它必须遵循规定的格式
	对窗口过程的子程序名并没有规定,对 Windows 来说,窗口过程的地址才是惟一需要的
------------------------------------------------------------------ */


// 声明"窗口过程"(窗口处理函数),用于处理窗口消息
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);  // 窗口过程的名字,是可以自定义命名的


// Windows 程序的入口点
int WINAPI WinMain(
	HINSTANCE hInstance,		// 当前实例的句柄
	HINSTANCE hPrevInstance,	// 前一个实例的句柄(在Win32中,此参数总是NULL)
	PSTR szCmdLine,				// 命令行参数
	int iCmdShow				// 控制窗口如何显示
)
{
	static TCHAR szAppName[] = TEXT("HelloWin");	// 窗口类名
	HWND		hwnd;								// 窗口句柄
	MSG			msg;								// 消息结构体
	WNDCLASS	wndclass;							// 窗口类结构体

	// 设置窗口类的属性
	wndclass.style			= CS_HREDRAW | CS_VREDRAW;				// 窗口重绘风格
	wndclass.lpfnWndProc	= WndProc;								// 窗口过程(窗口处理函数)
	wndclass.cbClsExtra		= 0;									// 窗口类额外内存大小
	wndclass.cbWndExtra		= 0;									// 窗口实例额外内存大小
	wndclass.hInstance		= hInstance;							// 应用实例句柄
	wndclass.hIcon			= LoadIcon(NULL, IDI_APPLICATION);		// 加载默认图标
	wndclass.hCursor		= LoadCursor(NULL, IDC_APPSTARTING);	// 加载默认光标
	wndclass.hbrBackground	= (HBRUSH)GetStockObject(WHITE_BRUSH);	// 背景画刷
	wndclass.lpszMenuName	= NULL;									// 菜单名(这里没有使用)
	wndclass.lpszClassName	= szAppName;							// 窗口类名

	// 注册窗口类
	if (!RegisterClass(&wndclass))
	{
		MessageBox(
			NULL,
			TEXT("This program requires Windwos!"),
			szAppName,
			MB_ICONERROR
		);
		return 0;
	}

	// 创建窗口
	hwnd = CreateWindow(
		szAppName,					// 窗口类名
		TEXT("The Hello Program"),	// 窗口标题
		WS_OVERLAPPEDWINDOW,		// 窗口风格
		CW_USEDEFAULT,				// x坐标(使用默认值)
		CW_USEDEFAULT,				// y坐标(使用默认值)
		CW_USEDEFAULT,				// 宽度(使用默认值)
		CW_USEDEFAULT,				// 高度(使用默认值)
		NULL,						// 父窗口句柄(无父窗口)
		NULL,						// 菜单句柄(无菜单)
		hInstance,					// 应用实例句柄
		NULL						// 创建参数(这里不使用)
	);

	// 显示并更新窗口
	ShowWindow(hwnd, iCmdShow);
	UpdateWindow(hwnd);

	// 消息循环
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);		// 翻译消息(如键盘消息到字符消息)
		DispatchMessage(&msg);		// 分发消息到窗口过程(窗口处理函数)
	}
	return msg.wParam;
}


// 实现窗口过程(窗口处理函数)
LRESULT CALLBACK WndProc(
	HWND hwnd,			// 窗口句柄
	UINT message,		// 消息ID
	WPARAM wParam,		// 消息参数(对于某些消息,它表示特定的信息)
	LPARAM lParam		// 消息参数(对于某些消息,它通常是一个指向结构体的指针)
)
{
	HDC hdc;			// 设备上下文句柄,用于绘图操作
	PAINTSTRUCT ps;		// 绘图结构体,用于 BeginPaint 和 EndPaint 函数
	RECT rect;			// 矩形区域,用于描述窗口的绘图区域

	switch (message)
	{
	case WM_CREATE:						// 窗口创建消息
		PlaySound(						// 播放声音文件
			TEXT("hellowin.wav"),		// 声音文件的路径
			NULL,
			SND_FILENAME | SND_ASYNC	// SND_FILENAME表示通过文件名播放声音,SND_ASYNC表示异步播放(不阻塞程序)
		);
		return 0;

	case WM_PAINT:						// 窗口绘图消息
		hdc = BeginPaint(hwnd, &ps);	// 开始绘图

		GetClientRect(hwnd, &rect);		// 获取窗口客户区大小

		DrawText(
			hdc,
			TEXT("Hello, Windows!"),	// TEXT("Hello, Windows!"): 要绘制的文本字符串
			-1,							// -1: 字符串中的字符数。如果为-1,则函数会自动计算字符串长度 
			&rect,						// &rect: RECT结构体的指针,指定文本绘制的区域。文本将在这个矩形区域内被格式化
			DT_SINGLELINE | DT_CENTER | DT_VCENTER
			// DT_SINGLELINE | DT_CENTER | DT_VCENTER: 文本绘制选项
			// DT_SINGLELINE 表示文本将被格式化为单行
			// DT_CENTER 表示文本将在指定的矩形区域内水平居中
			// DT_VCENTER 表示文本将在指定的矩形区域内垂直居中
		);

		EndPaint(hwnd, &ps);			// 结束绘图
		return 0;

	case WM_DESTROY:					// 窗口销毁消息
		PostQuitMessage(0);				// 发出退出消息到消息队列
		return 0;
	}

	// 如果消息没有被窗口过程(WndProc)显式处理,则调用默认的窗口处理函数(DefWindowProc)来处理它
	return DefWindowProc(
		hwnd,		// hwnd: 窗口句柄,表示哪个窗口接收到了消息
		message,	// message: 消息ID,标识了要处理的消息类型
		wParam,		// wParam: 消息的参数之一,它的具体含义取决于消息类型
		lParam		// lParam: 消息的参数之二,它的具体含义也取决于消息类型
	);
}

常见的标识符前缀

前缀常量
CS类风格选项
CW创建窗口选项
DT文本绘制选项
IDI图标的 ID 号
IDC光标的 ID 号
MB消息框选项
SND声音选项
WM窗口消息
WS窗口风格

常用的变量名前缀

前缀数据类型
cchar 或 WCHAR 或 TCHAR
byBYTE(无符号字符)
nshort
iint
x, yint, 表示 x 坐标和 y 坐标
cx, cyint, 表示 x 或 y 的长度,c 表示 count (计数)
B 或 fBOOL(int); f 表示 flag
wWORD(无符号短整型)
lLONG(长整型)
dwDWORD(无符号长整型)
fn函数
s字符串
sz以零结束的字符串
h句柄
p指针
Raspberry Pi Pico + Inmp441麦克风(Pio模拟I2s)<2> 摘要:本文介绍了在Raspberry Pi Pico上使用PIO(Programmable I/O)接收I2S数字麦克风音频数据并保存为WAV文件的方法。项目采用双PIO状态机设计,一个生成I2S时钟信号(WS+SCK),另一个接收24位左声道数据并转换为16位格式。文章详细说明了接线方式、参数设置、WAV文件头构造、PIO汇编程序实现以及数据转换处理流程。项目在MicroPython环境下实现16kHz采样率、6秒时长录音,具有时序精确、稳定可靠的特性,并提供了进一步拓展的可能性,如双声道支持、实时频谱分 阅读详情

相关推荐

DeepSeek API调用太复杂?OneAPI一站式聚合解决方案

本文介绍了OneAPI如何作为一站式聚合解决方案,简化DeepSeek API的调用流程。通过统一接口、智能路由和模型映射等核心功能,OneAPI大幅降低了多API适配的复杂性,提升开发效率。文章还提供了详细的部署指南和高阶使用技巧,帮助开发者快速实现API聚合管理。

weixin_27215337的博客 381

day01 windows编程入门

我们以前见过double,int,long,我们都可以很清晰的知道他们是什么意思,但是这玩意可读性这么差,而且还都是大写,怎么记得住啊。你可以会觉得,这是什么鬼,怎么这么多参数,我们以前写的C++的mina最多也就两个参数啊,但是,你必须接受这个现实,windows编程有非常多的复杂概念,和非常复杂的声明等等。Windows编程的本质就是使用好操作系统,想要用好操作系统必不可少的秘籍----MSDN。我们已经完成了第一个窗口的实例,接下来我们将学习如何编写一个正规的第一个窗口。

ylh的博客 2072

模板匹配加速之金字塔分层搜索

图像金字塔是一种多分辨率图像表示方法,它通过一系列逐渐缩小或放大的图像来表示原始图像的不同尺度。高斯金字塔(Gaussian Pyramid):通过不断下采样(降采样)生成更小的图像。拉普拉斯金字塔(Laplacian Pyramid):通过高斯金字塔和差分操作生成一组残差图像。在模板匹配中,我们主要使用高斯金字塔来实现多尺度匹配。金字塔灰度模板匹配通过多尺度搜索策略,在保持较高准确率的同时显著提升匹配速度,尤其适用于:高分辨率图像处理实时检测系统移动端设备等资源受限场景。

weixin_44969144的博客 1732

windows系统编程

oookkWindows系统编程是指在微软的Windows操作系统上开发应用程序的过程。Windows提供了大量的API(应用程序接口),这些API允许开发者访问系统的底层功能,如文件操作、网络通信、图形界面等。本篇文章将为初学者提供一个Windows编程的基础框架,包括所需工具、开发环境配置以及一些基本的编程概念。

chatgpt001的博客 2291

CIC-IDS-2018数据集高效预处理实战:从数据清洗到特征整合

本文详细介绍了CIC-IDS-2018数据集的高效预处理方法,从数据清洗到特征整合的全流程实战。通过内存优化、异常值处理和特征工程等技巧,帮助网络安全研究人员快速处理大规模网络流量数据,提升机器学习模型的训练效率和准确率。特别针对特征数据的预处理提供了实用代码示例和优化建议。

weixin_29274969的博客 502

从零开始:用ZEMAX设计双高斯照相物镜的完整流程(附55mm焦距实例)

本文详细介绍了使用ZEMAX设计双高斯照相物镜的完整流程,特别针对55mm焦距实例进行了深入解析。从初始结构选择、参数设置到优化策略和像质分析,逐步指导读者掌握这一经典光学设计方法。通过具体实例展示了如何实现卓越的像差校正,适用于35mm相机标准镜头等应用场景。

onion的博客 705

手把手教你写第一个Windows窗口

手把手教你写第一个Windows窗口,快速上手,你学会了吗

一以贯之的努力 不得懈怠的人生 4274

SigFit实战:从FEA到光学仿真的热力耦合分析全流程解析

在光机系统与芯片封装等精密工程领域,热与力的耦合效应是影响产品性能与可靠性的核心物理问题。有限元分析(FEA)是预测结构在热、力载荷下变形与应力的基础工具,但其结果通常无法直接用于评估光学性能。这需要一座桥梁,将物理场数据转化为光学设计语言。其核心原理在于数据映射与面形表征技术,例如通过泽尼克多项式拟合,将离散的节点位移分解为离焦、像散等标准光学像差。这项技术的工程价值在于,它实现了多物理场仿真的闭环,使工程师能在设计阶段精准预测热变形或应力对波前误差、调制传递函数等关键光学指标的影响。其典型应用场景包括高

weixin_28630185的博客 337

C#编写第一个Windows桌面应用

使用 C# 创建 Windows 窗体应用

gugugutime.com 1万+

YOLOv8 超参数调优教程! 使用Ray Tune进行高效的超参数调优!

YOLOv8超参数调优教程!😎 使用Ray Tune进行高效的超参数调优!

Coding... 1万+

使用Open3D进行RGB-D图像点云处理

在本文中,我们将使用Open3D来处理RGB-D图像,提取点云并进行一些基本的操作。总结起来,本文介绍了如何使用Open3D库处理RGB-D图像并提取点云。我们展示了如何读取RGB-D图像,创建RGB-D图像和点云,并显示点云。除了显示点云,Open3D还提供了许多其他功能,如点云滤波、点云配准、表面重建等。在创建RGB-D图像时,我们需要指定深度图像的缩放因子和截断值,以及是否将RGB图像转换为强度图像。希望本文能够帮助您入门Open3D,并在处理RGB-D图像和点云数据时提供一些指导。

QfcaLinux的博客 445

如何创建一个Windows软件

如何创建一个Windows软件

Tim_Cookerr的博客 7126

云原生之容器编排实践-在K8S集群中使用Registry2搭建私有镜像仓库

基于前面搭建的3节点 Kubernetes 集群,今天我们使用 Registry2 搭建私有镜像仓库,这在镜像安全性以及离线环境下运维等方面具有重要意义。作为测试环境,本次使用 Registry2 搭建了私有镜像仓库,实际生产环境建议使用 Harbor;创建了一个 local-storage 的 StorageClass ,并使用本地磁盘的方式创建使用 PV ,实际建议使用 NFS 。

Heartsuit的博客 2461

Windows 程序设计:创建第一个窗口

超详细的Windows窗口创建教程!只要你有C语言基础就能轻松学会!文章末尾附带完整的Windows窗口创建代码!

先写一个BUG吧 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Windows编程基础,第一个Windows程序,注册窗口,创建窗口

Win32编程,指的是用Window提供的API(Application Programming Interface)为Window编写应用程序。Windows编程,大家也通常称为win32编程,或win32 SDK编程,其含义是针对32位Windows操作系统。 在这一章节中,我们会带大家认识Windows应用程序,编写第一个Windows程序,带大家学习注册窗口和创建窗口。

WdIg-2023的博客 1726

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

VS 2019创建第一个Windows程序

步骤记录如下: 【1】创建新项目 选择Windows桌面应用程序或者Windows桌面向导。然后点击创建。此时即可创建一个已经有模板的Window GUI程序。 【2】清空文件 清空文件,准备使用我们自己的代码。 【3】添加自定义代码 #include <windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { Mess.

Hello World 1412

创建第一个Windows驱动程序

简单来说,内核驱动作为Windows服务运行,在执行具体代码前,驱动SYS文件首先会被映射到内核地址空间,作为内核的一个驱动模块(MODULE),接着系统对这个驱动模块执行导入表初始化、修正重定位表中对应的数据偏移等操作,最后系统会调用该驱动模块的DriverEntry 入口函数,如果这个入口函数返回STATUS_SUCCESS,系统认为这个驱动初始化成功;因为内核驱动是作为Windows系统服务( Service)存在的,Windows系统有众多服务,如果从服务运行的环境来分区,服务分为。

【微软MVP】zhaotianff的专栏 2549

创建你的第一个带有窗口的Windows程序

今天和大家说下如何创建一个带有窗口的程序,注意窗口的程序是以后写Windows程序的基础,今天的程序很重要,一定要看懂再去看以后的Windows程序 #include  /*1.窗口消息处理程序WndProc2.在32位的Windows中,WPARAM被定义为一个UINT,而LPARAM被定义为一个LONG(这就是C中的long整数型态),因此窗口消息处理程序的这两

聪明的编译器 2326

Windows Azure入门教学系列 (一): 创建第一个WebRole程序

公告:本博客为微软云计算中文博客的镜像博客。部分文章因为博客兼容性问题,会影响阅读体验。如遇此情况,请访问原博客。    这是一系列Windows Azure入门教学文章的第一篇。 在第一篇教学中,我们将学习如何在Visual Studio 2010中创建一个WebRole程序(C#语言)。

微软云计算:Microsoft Azure 中文博客(优快云镜像博客) 4739

[Windows开发] 用C++创建第一个窗口程序

Win32 API(也称为Windows API)是Windows比较原生态的C++ API。 #ifndef UNICODE #define UNICODE #endif #include <windows.h> LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR

藏知阁 4916

【OpenGL】Windows下创建第一个OpenGL程序

开发工具 IDE:VS2019 GLFW CMake GLAD glfw下载 glfw源码:下载地址 下载的内容如下所示: CMake下载 CMake(将源码生成自己想要的IDE工程):下载地址 下载的内容如下所示: 下载完成后安装即可 生成工程文件GLFW 使用CMake程序生成GLFW.sln文件 1、打开CMake 设置好glfw根目录和生成的工程目标目录(自己任意设置,我这里设置为在g...

Do Better 794

你的第一个Windows程序——创建一个窗口

MSDN在线原文(英文) 你的第一个Windows程序——创建一个窗口  窗口类 一个窗口类定义了一组数个窗口可以共有的行为。比如有一组按钮,当用户单击按钮,每个按钮都有类似的行为。当然,按钮也不是完全相同的;每个按钮都有自己的显示文本字符串和自己的屏幕坐标。对于被称为实例数据的每个窗口的数据是唯一的。每个窗口必须有一个窗口类关联,即使你的程序只创建该类的一个实例。重要的是要明白,一个窗

nongzhenyu的专栏 1647

Windows程序设计--创建第一个窗口

本篇文章讲如何创建一个基本的窗口。MessageBox弹出来的消息框就是一个窗口,但是窗口是怎样创建的呢?其实很简单,只要几个固定的步骤就行。而只要我们的窗口创建出来之后,只要把需要的函数填进去就能得到一个有功能的窗口。所以我觉得学习Windows就是学习API函数而已,懂得如何调用,各个参数的意思就行。说到参数,其类型都是从C语言的基本数据类型演变而来的,并不难。现在开始创建第一个窗口,该窗口并无

_ACME_的博客 1643

10分钟快速上手:使用windows-drivers-rs创建你的第一个KMDF驱动程序

windows-drivers-rs是一个能让开发者使用Rust进行Windows驱动开发的平台,它极大地简化了驱动开发流程,让新手也能快速入门。本文将带你在10分钟内完成第一个KMDF驱动程序的创建与构建。 ## 📋 准备工作 在开始之前,请确保你的系统已安装以下工具: - Rust环境(推荐使用rustup安装) - Windows Driver Kit (WDK) - Git 首先,

gitblog_02000的博客 370

VS2008创建第一个Windows应用程序

  Windows窗体应用程序也就是WinForms应用程序。事实上,我们每天都会接触到不同的Windows窗体,操作系统中我的电脑、记事本、听歌的软件窗口等都有相似的特点,可以改变大小,可以在窗体上添加按钮和菜单。Windows应用程序一般都由一个或多个窗体组成,这些窗体可包含文本框、按钮、列表框等控件,可以实现用户与应用程序交互。 Visual Studio 2008中包含的项目主要分为控...

weixin_33726943的博客 342

使用Visual Studio 2008创建你的第一个Windows Mobile程序介绍

介绍   Microsoft Visual Studio 2008 专业版或者更高版本提供了一个Windows Mobile程序开发环境,允许你使用本地代码(C / C++)或托管代码(C# / Visual Basic.NET)为Windows Mobile设备创建程序。   这篇文章将带你正确的安装Visual Studio 2008和附加的Windows Mobile SDK,接着我...

neil 294

Windows编程——实验1-1 创建第一个Windows应用程序

1、实验名称 实验1 使用Windows一般框架 2、实验日期 3、实验目的 1、熟悉入口函数及其部分参数含义; 2、熟悉显示对话框函数MessageBox的使用; 3、学会使用MSDN(重点)。 4、实验环境 1、vs2019 5、实验的步骤和方法 1、打开VS2019,创建一个空的Win32项目,...

Gubrave的博客 1901
上一篇: 编程语言 与 Windows API
下一篇: HOOK 钩子技术
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值