day01

本文介绍了Windows编程的基础知识,包括控制台程序、窗口程序和库程序的不同类型。详细讲解了Windows开发工具链,如编译器cl.exe、链接器link.exe及资源编译器rc.exe的工作流程。同时,文中还解释了Win32SDK的组成及其如何帮助开发者进行Windows应用程序的开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

预编译头
F5 调试
F10 一步
shift+F5 结束调试
cl /c 文件名  - 产生.obj文件






二.Windows编程基础
1.Window程序的类型
1)控制台程序(console),DOS程序,在控制台窗口中运行,以字符方式与用户交互。


2)窗口程序,拥有自己的窗口,该窗口要 程序创建,通过图形化的界面元素与用户交互。


3)库程序
A.静态库 : 扩展名 .lib, 在编译链接程序时被嵌入到可执行代码中, 
B.动态库 : 扩展名 .dll, 在可执行程序运行过程中动态的从库中获取函数代码


2.Windows开发工具和库
1)集成开发环境(IDE)
C/C++、VC、Visual Studio
2)工具链
编译器 : cl.exe
链接器 : link.exe
资源编译器 : rc.exe
源文件(.C/CPP) - cl -> 目标文件(.obj) \
资源脚本(.rc) - rc -> 资源文件(.res) + link -> 可执行 (.exe\.dll)
  静态库/导入库(.lib) /


3.Win32 SDK = 库+头文件+文档, platform SDK
A.库 : 封装了Windows API --- 非常庞大
  user32.dll - 管理窗口、消息、资源
   gdi32.dll - 绘图相关
kernel32.dll - 进程、线程、内存管理
以上三个动态库在系统目录下: system32
对应的导入库在VC环境的lib目录下 : 
导入库 : 
  user32.lib
   gdi32.lib
kernel32.lib
B.头文件: VC环境下的include目录下。
 windef.h - windows的数据类型
winuser.h - 声明user32.dll的API
 wingdi.h - 声明gdi32.dll的API
winbase.h - 声明kernel32.dll的API
  winnt.h - UNICODE字符集相关
windows.h - 所有windows头文件集合
C.文档:MSDN
3.不使用IDE编写windows程序
1)入口函数
int WINAPI WinMain (
HINSTANCE hInstance,//应用程序实例句柄
HINSTANCE hPreInstance,//应用程序的上一个实例句柄
LPSTR  lpCmdLine,//命令行
int  nCmdShow //窗口的显示方式
);
在windef.h中:
#define WINAPI __stdcall //被调用者清理堆栈
#define APIENTRY __stdcall
#define CALLBACK __stdcall
#define PASCAL __stdcall
#define WINAPIV __cdecl //调用者清理堆栈
__cdecl
函数的调用者清理栈
__stdcall
自己清理栈


所有的窗口都是对象
HINSTANCE 就是标识对象
一切皆对象
所有的H开头的都是句柄
INSTANCE 实例
HINSTANCE hPreInstance 在16位的时候能用,在32位不会用了,一般返回为0
LPSTR
LP P 都是指针


2)消息框函数
MessageBox 
MessageBoxIndirect
3)构建过程
A.编辑源代码HelloBox.c 
B.绘制图标: HelloBox.ico
C.编辑资源脚本:HelloBox.rc
rc HelloBox.rc
D.编译源代码: cl /c HelloBox.c,得到目标文件 HelloBox.obj
E.编译资源脚本: rc HelloBox.rc,得到资源文件 HelloBox.res
F.链接: link HelloBox.obj HelloBox.res user32.lib, 得到可执行程序 HelloBox.exe




三、编写一个窗口程序
1.定义WinMain函数,程序的入口
2.定义窗口过程函数,处理消息
LRESULT 就是 long int
LRESULT CALLBACK WindowProc 
(
HWND hWnd, //窗口句柄
UINT uMsg, //消息标识
WPARAM wParam, //消息参数
LPARAM lParam //消息参数 (都是4个字节,都是长整形)
);
消息标识 - 通过这个可以知道他具体的操作
这个函数需要自己来定义的
3.缺省窗口过程函数,处理那些自己不处理的消息
简单的说就是不想处理的函数接口
LRESULT CALLBACK DefWindowsProc
(
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);


WNDPROC 窗口过程函数类型 


4.注册窗口类
1)窗口类
typedef struct {
UINT style; //窗口类的风格
WNDPROC lpfnWndProc; //窗口过程函数指针
int cbClsExtra; //窗口类附加数据缓冲区字节数
int cbWndExtra; //窗口附加数据缓冲区字节数
HINSTANCE hInstance; //应用程序实例句柄
HICON hIcon; //窗口图标句柄(窗口左上角的图标)
HBRUSH hBrush; //刷子句柄(窗口背景的颜色)
HCURSOR hCursor; //光标句柄
LPCTSTR lpszMenuName; //菜单资源名(左上角)
LPCTSTR lpszClassName; //窗口类名
}WNDCLASS, *PWNDCLASS;


2)注册窗口类
ATOM 为 unsigned short
ATOM RegisterClass (
const WNDCLASS* lpWndClass;
);
成功返回窗口类的唯一标识,失败返回0
5.创建窗口,在内存中创建窗口对象,并不可见
HWND CreateWindow (
LPCTSTR lpClassName; //窗口类名
LPCTSTR lpWindowName; //窗口标题 (窗口标题)
DWORD dwStyle, //窗口风格
int x,
int y,
int nWidth,
int nHeight, //位置大小
HWND hWndParent, //父窗口句柄
HMENU hMenu, //菜单句柄
HINSTANCE hInstance, //应用程序实例句柄
LPVOID lpParam //附加数据
);
可以为窗口类指定特定的东西,都在这个里创建(在这里和窗口类相同的选项)
成功返回窗口句柄,失败返回NULL
6.显示窗口,在屏幕上把窗口画出来
1)显示
BOOL ShowWindow (
HWND hWnd, //窗口句柄
int nCmdShow //显示方式(最大化,最小化)
);
成功返回TRUE,失败返回FALSE
2)刷新
BOOL UpdateWindow (
HWND hWnd, //窗口句柄
);
成功返回TRUE,失败返回FALSE
7.消息循环,重复执行提取消息、翻译消息、派发消息
1)提取消息
BOOL GetMessage (
LPMSG lpMsg, //消息结构体
HWND hWnd, //窗口句柄(为了获取特定窗口定制的,一般为NULL)
UINT wMsgFilterMin, //起始消息
UINT wMsgFilterMax //终止消息(消息的范围)
);
LPMSG 消息结构体
收到WM_QUIT 消息返回FALSE,其他情况一律返回TRUE
2)翻译消息
BOOL TravslateMessage (
const MSG* lpMsg //消息结构
);
有消息被翻译返回TRUE,否则返回FALSE
3)派发消息
LRESULT DispatchMessage (
const MSG* lpMsg //消息结构体
);
派发给窗口过程函数
返回窗口过程函数的返回值。
8.处理消息







































































内容概要:本文档详细介绍了Android开发中内容提供者(ContentProvider)的使用方法及其在应用间数据共享的作用。首先解释了ContentProvider作为四大组件之一,能够为应用程序提供统一的数据访问接口,支持不同应用间的跨进程数据共享。接着阐述了ContentProvider的核心方法如onCreate、insert、delete、update、query和getType的具体功能与应用场景。文档还深入讲解了Uri的结构和作用,它是ContentProvider中用于定位资源的重要标识。此外,文档说明了如何通过ContentResolver在客户端应用中访问其他应用的数据,并介绍了Android 6.0及以上版本的运行时权限管理机制,包括权限检查、申请及处理用户的选择结果。最后,文档提供了具体的实例,如通过ContentProvider读写联系人信息、监听短信变化、使用FileProvider发送彩信和安装应用等。 适合人群:对Android开发有一定了解,尤其是希望深入理解应用间数据交互机制的开发者。 使用场景及目标:①掌握ContentProvider的基本概念和主要方法的应用;②学会使用Uri进行资源定位;③理解并实现ContentResolver访问其他应用的数据;④熟悉Android 6.0以后版本的权限管理流程;⑤掌握FileProvider在发送彩信和安装应用中的应用。 阅读建议:建议读者在学习过程中结合实际项目练习,特别是在理解和实现ContentProvider、ContentResolver以及权限管理相关代码时,多进行代码调试和测试,确保对每个知识点都有深刻的理解。
开发语言:Java 框架:SSM(Spring、Spring MVC、MyBatis) JDK版本:JDK 1.8 或以上 开发工具:Eclipse 或 IntelliJ IDEA Maven版本:Maven 3.3 或以上 数据库:MySQL 5.7 或以上 此压缩包包含了本毕业设计项目的完整内容,具体包括源代码、毕业论文以及演示PPT模板。 项目配置完成后即可运行,若需添加额外功能,可根据需求自行扩展。 运行条件 确保已安装 JDK 1.8 或更高版本,并正确配置 Java 环境变量。 使用 Eclipse 或 IntelliJ IDEA 打开项目,导入 Maven 依赖,确保依赖包下载完成。 配置数据库环境,确保 MySQL 服务正常运行,并导入项目中提供的数据库脚本。 在 IDE 中启动项目,确认所有服务正常运行。 主要功能简述: 用户管理:系统管理员负责管理所有用户信息,包括学生、任课老师、班主任、院系领导和学校领导的账号创建、权限分配等。 数据维护:管理员可以动态更新和维护系统所需的数据,如学生信息、课程安排、学年安排等,确保系统的正常运行。 系统配置:管理员可以对系统进行配置,如设置数据库连接参数、调整系统参数等,以满足不同的使用需求。 身份验证:系统采用用户名和密码进行身份验证,确保只有授权用户才能访问系统。不同用户类型(学生、任课老师、班主任、院系领导、学校领导、系统管理员)具有不同的操作权限。 权限控制:系统根据用户类型分配不同的操作权限,确保用户只能访问和操作其权限范围内的功能和数据。 数据安全:系统采取多种措施保障数据安全,如数据库加密、访问控制等,防止数据泄露和非法访问。 请假审批流程:系统支持请假申请的逐级审批,包括班主任审批和院系领导审批(针对超过三天的请假)。学生可以随时查看请假申请的审批进展情况。 请假记录管理:系统记录学生的所有请假记录,包括请假时间、原因、审批状态及审批意见等,供学生和审批人员查询。 学生在线请假:学生可以通过系统在线填写请假申请,包括请假的起止日期和请假原因,并提交给班主任审批。超过三天的请假需经班主任审批后,再由院系领导审批。 出勤信息记录:任课老师可以在线记录学生的上课出勤情况,包括迟到、早退、旷课和请假等状态。 出勤信息查询:学生、任课老师、班主任、院系领导和学校领导均可根据权限查看不同范围的学生上课出勤信息。学生可以查看自己所有学年的出勤信息,任课老师可以查看所教班级的出勤信息,班主任和院系领导可以查看本班或本院系的出勤信息,学校领导可以查看全校的出勤信息。 出勤统计与分析:系统提供出勤统计功能,可以按班级、学期等条件统计学生的出勤情况,帮助管理人员了解学生的出勤状况
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值