- 博客(96)
- 收藏
- 关注
原创 windows第二十章 单文档应用程序
只能编辑一个文档,比如说画图,一次只能开一个,开2个就要打开2个程序,能够处理一个或者多个文件、文档、业务的程序多文档就是类似win11的记事本程序,打开一个程序能编辑很多记事本窗口。
2025-03-29 18:58:11
514
原创 windows第十九章 文档串行化
Serialize是继承自CObject的,所以主窗口也能使用。Dlg.cpp添加serialize消息。CMydocument.cpp简化。写一个类继承自CDocument。之前的2个按钮消息改成如下。界面如下,定义好关联变量。
2025-03-29 11:42:14
329
原创 windows第十八章 菜单、工具栏、状态栏
定义个成员函数CToolBar m_ToolBar右键资源,添加资源Toolbar,如下图,可以选择工具对按钮进行编辑把工具栏按钮的ID设成要响应的菜单ID,比如我刚才新建文件的菜单项是IDM_NEW,就把这个也设为IDM_NEWreturn -1;// 启用菜单项// 创建工具栏// 加载工具栏// 允许工具栏停靠// 允许框架窗口停靠return 0;
2025-03-28 20:53:57
904
原创 windows第十七章 GDI+体系
GDI+与GDI、DirectX一样、都是开发图形设备程序的一种方式,GDI+实际上就是GDI的一种高层次的封装。都是用来服务于图形、图像和文本的输出。CDI+在功能上要更强大。4. 开始绘图,和以前的绘图一样,在OnPaint里绘。2.在App的InitInstance里初始化资源。3. 类向导ExitInstance里添加释放函数。文理画刷也可以指定图片的部分区域,当做文理。1.在framework.h 添加头文件。之前用过的就是单色画刷。
2025-03-27 21:54:43
329
原创 windows第十六章 GDI进阶技术相关函数与用法介绍
在GDI中,可以使用AlphaBlend函数实现半透明效果的图形混合,或者使用TransparentBlt函数实现透明色处理。画笔的中心才是实际想要的矩形,画笔越粗,矩形的外框越大,内框越小,所以画笔就是以绘制路径为中心来画的。前一章有个listview,是以画线的方式来实现渐变色,现在以新的函数实现渐变色。我用20的画笔画一个150宽的矩形,实际效果如下。只有2个区域相交的部分,才能显示。
2025-03-24 10:25:03
289
原创 windows第十五章 控件自绘技术
控件颜色消息,用于在控件绘制之前通知父窗口,父窗口可以通过处理该消息来改变控件的绘制属性,如背景颜色、文本颜色等。主要用于自定义绘制控件,当具有OWNERDRAW风格的控件需要重绘时,会向其父窗口发送该消息。LPARAM:一个指向控件窗口句柄(HWND)的指针,通过该句柄,可以获取控件的相关信息。添加一个类,CListCtrlUI,让ListCtrl控件继承自该类。WPARAM:一个设备上下文(HDC)句柄,用于绘制控件。类向导,点击虚函数,搜索drawitem添加。利用控件自绘可以做一些小案例。
2025-03-23 18:40:43
688
原创 windows第十四章 GDI绘图模式介绍
客户区标准绘图,就是这个OnPaint里面绘制,MFC里面就是CPanitDC dc(this),底层就是调用win32的WM_PAINTbreak;看看什么情况会触发该消息绘制运行如下代码void C绘图模式Dlg::OnPaint()CRect rect;//获取客户区大小//绘制椭圆i++;str.Format(_T("触发绘图事件第%d次"), i);//设置窗口标题从上述结果可以看到,当窗口变大,最小化,最大化时会触发该绘图事件,但是原来的绘制并没有刷新。
2025-03-20 10:02:20
315
原创 windows第十二章 MFC控件常用消息
当控件产生一个消息时,MFC首先会尝试将该消息反射回控件自身进行处理,这就是控件反射消息机制。如果控件没有处理反射消息,或者没有设置反射消息处理机制,那么消息会传递给父窗口进行处理。缺点:需要用到唯一ID的时候,父窗口中的控件会有很多,并不能保证所有消息ID都是唯一的。如果父窗口也没有处理该消息,消息会继续向上传递到更高级别的窗口(如主框架窗口),直到消息被处理或者到达消息链的末端。这个消息与其它的消息不同,用户可以自定义通知的内容,但传递消息的方式是统一的。选中需要添加的事件,点下拉按钮,点add。
2025-03-13 21:42:36
937
原创 Linux第一章 环境搭建
binbinary,二进制文件,可执行程序,shell命令如:ls,rm,mv,cp等常用命令/sbins是Super User的意思,这里存放的是系统管理员使用的系统管理程序。如:ifconfig,halt,shutdown,reboot等系统命令/dev硬盘,显卡,显示器字符设备文件、块设备文件如:sudo cat mouse0/liblinux运行的时候需要加载的一些动态库如: libc.so、libpthread.so等/mnt手动的挂载目录,如u盘等/media。
2025-02-18 19:51:44
917
原创 Windows第九章 控件的介绍
这样其他组的单选按钮不受影响,如果不分组,那其他地方的单选和这里的所有只能选一个。没有进行每个的区分,如果要对它进行代码上的改动,就要重设一下ID。相当于combobox点下拉按钮后下面的那部分,显示一条一条的项。单选控件如果要分组,就要点一下第一个单选按钮,设置一下组。如果需要在分页上添加其他控件,只要在分页对话框上添加即可。这里我直接使用关联变量,关联变量的知识在第十章有介绍。想要在tab的分页上显示对话框,需要先创建对话框资源。在数据里添加项的显示,每个项用分号分开。
2025-02-16 23:32:32
677
原创 windows第十一章 项目实战员工管理系统
添加信息类添加和删除的时候可以重复调用,不用再做一个修改信息界面。管理员工号 1001 姓名 admin 密码123456。菜单可以通过右键添加事件处理程序,可以自动添加事件。这里注意列表视图要设置成Report。而且下次登陆自动读取登陆成功的信息。主对话框里加入了下面设计的菜单。上述 登陆界面实现了管理员登陆。各控件添加好对应的关联变量。
2025-02-16 14:01:14
413
原创 windows第十章 数值型关联变量和控件型关联变量
DoDataExchange的作用是进行数据交换和验证,不需要手动调用,也不能手动调用,是由UpdateData调用的。上例OnInitDialog后也会调用,说明OnInitDialog应该是调用了UpdateData(FALSE)然后把radioButton减少到2个,第一个加了组长,才能用的BOOL,而且。radioButton,我使用BOOL类型会弹出错误提示,而用int就没限制。有些数值型关联变量要特定的类型,否则会报错。当我输入的数据不在范围内,就会出提示。可以看到类别选项是灰色的,点不开。
2025-02-14 20:40:33
728
原创 FFmpeg rtmp推流直播
在实际发送时应对要发送的数据用不同的Chunk Size去尝试,通过抓包分析等手段得出合适的Chunk大小,并且在传输过程中可以根据当前的带宽信息和实际信息的大小动态调Chunk的大小,从而尽量提高CPU的利用率并减少信息的阻塞机率。Basic Header的长度可能是1,2或4个字节,其中chunk type的长度是固定的(占2位,单位是bit),Basic Header是变长的,其长度取决于CSID的大小,在足够存储这两个字段的前提下,最好用尽量少的字节从而减少由于引入Header增加的数据量。
2025-01-30 15:50:46
1546
原创 FFmpeg 自定义IO和格式转换
通常解封装时,当调用avformat_open_input和avformat_find_stream_info时,FFmpeg内部会自动读取文件内容来查找信息。除此之外,我们也可以自定义IO,我们只要提供一个自定义的读/写函数提供给avformat_open_input函数作为回调函数,这样的话,当调用前面这两个函数时,FFmpeg内部通过回调函数来提供数据。头文件包含新增#include <libavformat/avio.h> // 输入输出。
2025-01-28 11:12:38
1251
原创 windows第八章 系统对话框
一个字符串中的一个字符由1个或者2个字节组成。如果第一个字符在0x81~0x9F之间,或者在0xE0 ~0xFC之间,就必须检查下一个字节,才能判断出一个完整的汉字。所以有些字符是1字节,有些字符是2字节,处理比较复杂。某些语言文字系统字符集非常多,但是一个字节最多能够表示256个字符,为了支持这些语言文字系统,双字节字符集应运而生。16位不足以表示某些语言的所有字符,支持使用代理,使用32位来表示一个字符。将一些字符编码为一个字节,一些字符编码为2个,一些3个,有些是4个。将每一个字符编码为两个字节。
2025-01-27 19:59:16
981
原创 FFmpeg音视频采集
DirectShow(简称DShow)是一个Windows平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能,它支持多种多样的媒体文件格式,包括ASF、MPEG、AVI、MP3和WAV文件,同时支持使用WDM驱动或早期的VFW驱动来进行多媒体流的采集。通过ffplay指令播放。跟麦克风录制一样,略。
2025-01-21 19:20:16
883
原创 windows第七章 MFC类CWinApp介绍
上述方式是用MFC的方式,配置信息存储到注册表里,但是不方便,可以用win32的方式,把信息存储在当前程序文件夹下。指向指定应用程序的命令行一个Null终止的字符串。在注册表中配置应用程序设置,而不是.INI文件。对项的写入二进制数据在应用程序的.INI文件。从应用程序的.INI文件的项检索二进制数据。编写每对项的整数在应用程序的.INI文件。从应用程序的.INI文件的项检索字符串。写入项的字符串在应用程序的.INI文件。从应用程序的.INI文件的项检索整数。应用程序的.INI文件名。
2025-01-21 14:32:47
868
原创 windows第六章 MFC窗口类
m_hWnd:指示附加到此CWnd的HWND。是public属性的成员str.Format(L"当前窗口句柄:%#X",m_hWnd);
2025-01-17 16:28:52
724
原创 FFmpeg 元数据
使用ACDictonary API,可以查看元数据或者将元数据写入到AVFormatContext,AVStream,AVChapter和AVProgram结构体中,元数据保存在它们Metadata字段中。与FFmpeg中的所有字符串一样,元数据被假定为UTF-8编码的Unicode。请注意,在大多数情况下,demuxers导出的元数据不会检查字符串是否是有效的UTF-8。在处理音视频文件时,了解其元数据信息是非常重要的。元数据是描述文件内容和属性的数据,包括了诸如标题、作者、时长、分辨率等信息。
2025-01-16 15:54:57
1225
原创 windows第五章 MFC基本消息和消息映射介绍
在之前的CMyDlg.h修改public:CMyDlg();//声明消息映射public://重写基本消息CMyDlg.cpp//开始消息映射ON_WM_CREATE() //要重写哪个就在这里添加哪个//结束消息映射。
2025-01-15 23:08:28
481
原创 windows第四章 初识MFC
配置项目属性2.写代码三步曲创建CWinApp派生类重写InitInstance函数创建窗口对象public:virtual BOOL InitInstance()//这是Mfc的入口函数,为应用程序初始化//弹出一个对话框//返回FALSE,关闭应用程序,返回TRUE,让应用程序继续运行virtual int ExitInstance() //执行退出,清理工作//应用程序核心对象,一个MFC应用程序有且只有一个应用程序核心对象//定义字符串。
2025-01-14 11:56:11
455
原创 windows第三章 模态对话框和非模态对话框
一个程序打开某个对话框,如果这个对话框不关掉,就不能继续执行该程序的其他操作,这个就叫模态对话框。首先在代码里右键添加资源,选对话框,资源文件命名一下。非模态就是对话框不关掉也能进行其他操作。创建是使用CreateDialog。修改MainDialogProc类。销毁是DestroyWindow。添加新增窗口的回调函数。
2025-01-12 16:09:31
309
原创 Windows第一章 第一个窗口程序
初学的时候使用最多的是C语言库函数。在Windows平台下,也有类似的函数可以调用,这些函数是由windows操作系统提供,各种各样的函数,方便我们开发windows应用程序,这些函数就是由windows提供给应用程序编程的接口,简称API函数。主要的windows函数在Windows.h头文件进行声明。windows操作系统提供10000多个API函数,开发者要全部记住是不可能的,但是也很容易记,单词的组合,使用vs2022的Help Viewer可以实现查询。
2025-01-11 10:15:36
842
原创 FFmpeg 编码和解码
文章目录音频格式AACADIF音频数据交换格式ADTS音频数据传输流音频解码音频编码视频格式H264GOP图像组I帧,P帧,B帧H264压缩技术H264压缩级别H264视频级别H264码流结构SPSPPS解码视频编码视频音频格式AACAAC全称 Advanced Audio Coding,是一种专为声音数据设计的文件压缩格式。出现于1997年,基于MPEG-2的音频编码技术。由Fraunhofer IIS、杜比实验室、AT&T、索尼等公司共同开发,目的是取代MP3格式。与MP3不同,它采用了全
2024-12-30 12:40:06
935
原创 FFmpeg 框架简介和文件解复用
libavformat:复用和解复用,格式封装libavcodec:编码、解码libavutil:通用音视频工具,像素、IO、时间等工具iibavfilter:过滤器,可以用作音视频特效处理libavdevice:设备(摄像头、麦克风)libswscale:视频图像缩放,像素格式互换libswresample:重采样libpostproc:后期处理。
2024-12-21 15:40:43
1105
原创 FFmpeg库之ffmpeg
在特定输出文件没有任何映射选项的情况下,ffmpeg检查输出格式以检查哪种类型的流可以包含在其中,即视频,音频或字母。对于每个可接受的流类型,ffmpeg将从所有输入中选择一个可用的流。复杂过滤器图的一个简单示例是overlay过滤器,它具有两个视频输入和一个视频输出,其中一个视频叠加在另一个视频之上。指定了3个输出文件,对于前2个,没有设置-map选项,因此ffmpeg将自动为这两个文件选择流(会选择最好的那个流)。对于字幕,它将从B.mp4中选择流2,这是A.avi和B.mp4之间的第一个字幕流。
2024-12-18 23:00:21
1236
原创 FFmpeg库之ffplay
FFplay是一个非常简单的便携式媒体播放器,使用FFmpeg库和SDL库。它主要用作各种FFmpeg api的测试平台。需要把之前编译好的bin文件夹加入环境变量,我的是G:\msys64\home\PVer\ffmpeg\bin。我这里用的是cmake配置,mingw编译,不用移动文件夹。
2024-12-16 23:59:22
1181
原创 FFmpeg 音视频基础
因为图像的操作通常按行操作,如果图像的所有数据都紧密排列,那么会发生非常多次的读取非对齐内存,从而影响效率,而图像的处理本就是一个分秒必争的操作,所以为了性能的提高,就引入了stride这个概念。黑白二色的图像是数字图像中最简单的一种,它只有黑、白两种颜色,也就是说它的每一个像素只有1位颜色,位深度是1,用2的一次幂来表示,考虑带位深度平均分给R,G,B和Alpha,而只有RGB可以相互组合成颜色,所以4位颜色的图,它的位深度是4,只有2的4次幂种颜色,(即16种颜色或16种灰度等级)。
2024-12-13 23:15:33
1244
原创 vscode如何使用vim
在vim扩展管理,扩展键盘快捷方式,能查看所有vim快捷键。我要定位到上面代码的w.show的第一个w处。可以在设置里启动Easymotion。光标移动到当前有小括号的字符串,按。光标移动到当前有小括号的字符串,按。,就给当前字符串加了一对小括号。,就把当前小括号替换成中括号了。在normal模式下,按。就定位到我要的位置了。就把当前小括号删除了。
2024-09-16 23:14:30
1589
原创 QT实战 商城客户端开发
第一个导入数据库,mysql数据库密码在main.cpp里修改成你自己的,然后打开导入即可。第二个是客户端,mysql数据库密码在BasicWindow.cpp里修改成你自己的。
2024-09-12 23:02:47
529
原创 Qt第二十一章 语言家
Qt提供了一款优秀的支持Qt C++和Qt Quick应用程序的翻译工具。发布者、翻译者和开发者可以使用这款工具来完成他们的任务。发布者:承担了全面发布应用程序的责任。通常他们协调开发者和翻译者的工作,可以是哟换那个lupdate工具同步源代码,进行翻译,使用lrelease同步工具为发布应用程序创建运行时使用的翻译文件。翻译者:可以使用Qt Linguist 工具翻译应用程序的文本。当然,这必须要有专业的翻译知识。开发者:必须创建Qt应用程序能够使用的翻译文本。
2024-08-27 19:27:28
406
原创 Qt第二十章 数据库操作
字段还包含数据库列的值,可以查看或更改该值。有没有这个文件夹(没有的用qt维护工具安装当前版本QT的Sources)Qt版本不同的后面路径自行修改。如果你的程序使用了MySQL数据库,那么在部署时,需要将MySql的依赖,一并拷贝到exe同级目录。选择release ,同样构建一下项目(后面release项目的操作和debug类似,这里省略)(没有的去mysql官方下载安装)如果安装在别的文件夹,后面用到的路径自行修改一下。Qt5.13版本后不包含MySql的驱动插件,需要自己手动编译。
2024-08-26 11:14:47
1336
原创 Qt第十九章 网络编程
创建服务器while (server->hasPendingConnections()) { // 如果有连接,读取套接字");qDebug() << "有新的连接来了";});
2024-08-24 22:36:40
727
原创 Qt第十八章 XML和Json格式解析
可扩展标记语言,标准通用标记语言的子集,简称XML,是一种定义电子文档结构和描述其内容的国际标准语言,被设计用咯爱传输和存储数据。XML的易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其他的数据交换格式,但不久之后它们都将支持XML,那就意味着程序可以更容易的与Winows、Mac Os、Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析它,并以XML格式输出结果。
2024-08-23 18:40:43
857
原创 Qt第十七章 多线程
调用start()函数后,新线程会优先执行run()中的代码,再执行其他的。默认run()会调用exec()函数,即启动一个局部的不占CPU的事件循环。可以通过QThreadStorage类把全局变量设置成线程独立的变量。通过QMetaObject::invokeMethod。关于全局变量,在2个线程里修改会相互影响。参考之前的moveToThread。
2024-08-21 23:00:34
606
原创 Qt第十六章 多媒体Multimedia
cmakelist 添加MultimediaWidgets模块。通过QAudiSink类从QIODevice中拉去数据。存储位置只能是本地文件系统位置,存储格式也是固定的。cmakelist 添加Multimedia模块。播放mp3、aac等非原始格式音频。相反数据可以写入QIODevice。播放原始音频pcm格式。
2024-08-21 09:28:20
658
原创 Qt第十五章 动画和状态机
在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f66caee904cb43f18424370016238c83.gif。cmakelist配置(在原来的基础上修改添加,其他的不变)创建一个pushbutton连接信号与槽,槽函数代码。
2024-08-18 22:34:24
394
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人