社区视频监控系统源代码

合集下载

视频监控手机端源代码

视频监控手机端源代码

手机客户端的程序:package com.example.receive;import java.io.DataInputStream;import .Socket; //提供帮助网络访问的类import android.app.Activity;import android.graphics.Bitmap; //android.graphics是底层的图形库import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Rect;import android.os.Bundle; //android.os提供了系统服务、消息传输和IPC 机制import android.view.SurfaceHolder; //android.view提供基础的用户界面接口框架import android.view.SurfaceView;import android.view.View;import android.widget.Button;//android.widget包含各种UI 元素(大部分是可见的)在应用程序的屏幕中使用import android.widget.EditText;public class MainActivity extends Activity{ Canvas canvas ;Rect r = new Rect(10, 50, 30, 25); //定义画布大小SurfaceView v=null;/*SurfaceView是视图(View)的继承类,这个视图里内嵌了一个专门用于绘制的Surface,Surfaceview控制这个Surface的绘制位置*/SurfaceHolder holder; //通过SurfaceHolder接口访问这个surfaceprotected static final int COMPLETED = 0;private Bitmap bmp=null; //Bitmap是Android系统中的图像处理的最重要类之一private Button mButton1; //定义按钮@Overrideprotected void onCreate(Bundle savedInstanceState){setContentView(yout.activity_main);/*setContentView()设置当前的视图(View ),也就是设置一个Activity的显示界面,使用一个布局文件来控制各种控件的摆放和显示*/super.onCreate(savedInstanceState);//onCreate时候,会传入一个变量,里面包含上次退出的信息,这里面可以恢复上次退出的状态mButton1 =(Button) findViewById(R.id.myButton1); //定义按钮v=(SurfaceView) this.findViewById(R.id.View_Surface); //定义显示控件holder=v.getHolder(); //得到显示的句柄mButton1.setOnClickListener(new Button.OnClickListener() //链接按钮监听事件{@Overridepublic void onClick(View v){ Thread thread=new Thread (new qaz()); //新建线程thread.start(); //启动线程进行socket通信}});}class qaz implements Runnable{ //另起线程,进行socket建立网络罗操作private EditText Text22; //定义可编辑文本窗private EditText Text33; //定义可编辑文本窗public void run() //run()方法实现socket建立与断开功能{Socket client=null; //创建套接字String IP; //定义字符串int port; //定义端口Text22 = (EditText) findViewById(R.id.Text2); //可编辑文本窗Text33 = (EditText) findViewById(R.id.Text3); //可编辑文本窗IP = Text22.getText().toString(); //获取服务器端ip地址port=Integer.parseInt(Text33.getText().toString()); //获取服务器端端口Canvas canvas ; //创建画布DataInputStream dataInput=null; //创建输入数据流try //建立socket实现通信{ client = new Socket(IP, port); //在指定IP和端口上建立socket套接字dataInput = new DataInputStream(client.getInputStream());//建立输入流对象int size = dataInput.readInt(); //读取图片大小信息byte[] data = new byte[size]; //创建图片数据存储数组int len = 0;while (len < size){ //将输入流得到的图片数据存储在data数组len += dataInput.read(data, len, size - len);}bmp = BitmapFactory.decodeByteArray(data, 0, data.length; //对数据进行解码canvas = holder.lockCanvas(r); //获取画布canvas.drawBitmap(bmp, 0,0, null); //绘制在画布上holder.unlockCanvasAndPost(canvas);//刷新至屏幕dataInput.close(); //关闭socket数据流client.close(); //关闭socket链接}catch(Exception e) { }//捕获异常}}。

公共视频监控视频图像设备基础数据集代码表

公共视频监控视频图像设备基础数据集代码表

附录A公共视频监控视频图像设备基础数据集代码表A.1摄像机供电方式代码说明:摄像机供电方式的代码采用顺序码。

表示:nlA.2摄像机结构类型代码说明:摄像机结构类型的代码。

表不:112A.3移动视频图像采集设备类型代码说明:移动视频图像采集设备类型的代码。

表示:nlA.4摄像机补光类型代码说明:摄像机补光类型的代码。

表示:nlA.5摄像机光电成像类型代码说明:摄像机光电成像类型的代码。

表示:nlA.6视频编码格式代码说明:视频编码格式的代码。

表示:n2A.7摄像机支持分辨率代码说明:摄像机支持分辨率的代码。

表示:nlA.8监控点位类型代码说明:监控点位类型的代码。

表示:nlA.9摄像机功能类型代码说明:摄像机功能类型的代码。

表示:nlA.10卡口位置类型代码说明:卡口位置类型的代码。

表示:n2A.11卡口关注目标类型代码说明:卡口关注目标类型的代码。

表示:112A.12视频图像采集水平方向代码说明:视频图像采集水平方向的代码。

表不:nl取值9。

A.13视频图像采集垂直方向代码说明:视频图像采集垂直方向的代码。

表示:nlA.14取电来源代码说明:取电来源的代码。

表示:nlA.15道路类型代码说明:道路类型的代码。

表不:112A.16摄像机共享属性代码说明:摄像机共享属性的代码。

表不:nlA.17默认权限代码说明:默认权限的代码。

表示:nl说明:系统所属层级的代码。

表示:nlA.19设备生命周期阶段代码说明:设备生命周期阶段的代码。

表示:nl。

监控系统代码

监控系统代码

监控系统代码在当今数字化的时代,监控系统在各个领域都发挥着至关重要的作用。

从保障公共场所的安全,到优化工业生产流程,再到提升企业的运营效率,监控系统无处不在。

而监控系统的核心组成部分之一,便是其背后的代码。

监控系统代码的编写,并非一项简单的任务。

它需要综合考虑众多因素,包括但不限于系统的性能、稳定性、扩展性、兼容性以及安全性。

首先,性能是监控系统代码的关键考量因素之一。

一个高效的监控系统需要能够实时处理大量的数据,迅速作出响应。

这就要求代码在数据采集、传输、处理和存储等环节都要进行优化。

例如,在数据采集方面,代码需要能够快速地从各种传感器、设备中获取信息,同时避免对系统资源的过度占用。

在数据处理环节,要采用高效的算法,快速筛选、分析和整合有价值的数据,以便及时发出警报或提供决策支持。

稳定性也是不可或缺的。

监控系统通常需要长时间不间断运行,因此代码必须具备强大的容错能力和错误恢复机制。

在面对网络中断、设备故障等突发情况时,能够自动切换到备用方案,确保监控工作的连续性。

同时,代码还需要经过严格的测试,包括压力测试、边界测试等,以发现并解决潜在的稳定性问题。

扩展性是监控系统能够适应未来发展的重要保障。

随着业务的增长和需求的变化,监控系统可能需要增加新的功能、接入新的设备或处理更多的数据量。

优秀的监控系统代码应该采用模块化、松耦合的架构设计,方便后续的功能扩展和升级。

这样,当需要添加新的监控指标、改变数据存储方式或集成新的技术时,能够以最小的改动实现最大的效果。

兼容性也是不容忽视的一点。

监控系统往往需要与多种不同类型的设备、操作系统和软件进行交互。

代码需要能够兼容不同的接口标准、通信协议和数据格式,确保系统能够顺利地整合各种资源,实现无缝对接。

这就要求开发人员对相关的技术标准和规范有深入的了解,并在代码中进行妥善的处理。

安全性更是监控系统的重中之重。

监控数据往往包含敏感信息,如个人隐私、商业机密等。

代码必须采取严格的安全措施,防止数据泄露、篡改或未经授权的访问。

监控系统代码

监控系统代码

监控系统代码在当今数字化的时代,监控系统在保障安全、优化运营和提升效率等方面发挥着至关重要的作用。

而监控系统的核心之一便是其背后的代码,这些代码就像是系统的“大脑”,指挥着整个监控流程的运作。

监控系统代码的编写是一项复杂而精细的任务,需要综合考虑多个因素。

首先,它必须能够准确地收集来自各种数据源的信息。

这可能包括摄像头的视频流、传感器的数据、网络设备的状态信息等等。

为了实现这一点,代码需要具备与不同类型的设备和接口进行通信的能力。

例如,与网络摄像头进行连接时,可能需要使用特定的网络协议,如 RTSP(实时流传输协议)来获取视频数据。

在数据收集之后,监控系统代码还需要对这些数据进行有效的处理和分析。

这就涉及到一系列的数据处理算法和技术。

比如,对于视频数据,可能需要进行图像识别和运动检测,以识别出异常的活动或物体。

对于传感器的数据,可能需要进行阈值判断和趋势分析,以发现潜在的问题或异常情况。

在这个过程中,代码的效率和准确性至关重要。

如果处理速度过慢,可能会导致监控的延迟,从而错过关键的信息。

如果分析结果不准确,可能会产生误报或漏报,影响监控系统的可靠性。

存储也是监控系统代码中需要重点考虑的一个方面。

收集到的大量数据需要安全、高效地存储起来,以便后续的查询和分析。

这可能涉及到选择合适的数据库管理系统,如关系型数据库(如 MySQL、Oracle)或非关系型数据库(如 MongoDB、Cassandra)。

同时,还需要考虑数据的备份和恢复策略,以防止数据丢失。

除了数据处理和存储,监控系统代码还需要具备良好的用户界面和交互功能。

用户需要能够方便地查看监控数据、设置警报规则、进行历史数据的查询等。

这就要求代码能够生成直观、易于操作的用户界面,并且能够响应用户的各种操作。

在界面设计方面,需要考虑到不同用户的需求和使用习惯,提供简洁明了的布局和操作流程。

另外,监控系统代码的安全性也是不容忽视的。

由于监控系统通常涉及到敏感的信息和重要的设施,必须采取措施防止未经授权的访问和数据泄露。

vb源代码vb小程序:摄像头视频图像的监控、截图、录像(改进:第二页)

vb源代码vb小程序:摄像头视频图像的监控、截图、录像(改进:第二页)

vb源代码vb小程序:摄像头视频图像的监控、截图、录像(改进:第二页)Private Sub SetDir()Dim nStr As StringIf Trim(ctDir) = &quot;&quot; Then ctDir = App.Path &amp; &quot;\videos&quot; '如果路径不存在,用默认文件名 C:\CAPTURE.AVInStr = &quot;设置录像保存的文件夹。

&quot; &amp; vbCrLf &amp; &quot;输入“&lt;&gt;”表示使用默认文件夹:&quot; &amp; vbCrLf &amp; App.Path &amp;&quot;\videos&quot;nStr = Trim(InputBox(nStr, &quot;录像保存的文件夹&quot;, ctDir))If nStr = &quot;&quot; Then Exit SubctDir = nStrIf ctDir = &quot;&lt;&gt;&quot; Or ctDir = &quot;&lt;默认&gt;&quot; Then ctDir =&quot;&quot;End SubPrivate Sub SetFile()Dim nStr As String, nF As StringnF = String(255, &quot; &quot;)SendMessage ctCapWin, WM_Cap_File_Get_File, Len(nF), ByVal nFnF = GetStrLeft(nF, vbNullChar)If Trim(ctF) = &quot;&quot; Then ctF = &quot;&lt;默认&gt;&quot; '如果路径不存在,用默认文件名 C:\CAPTURE.AVInStr = &quot;设置录像保存的文件名(不带路径)。

监控系统代码

监控系统代码

监控系统代码监控系统代码文档一、介绍1.1 监控系统的目的和功能监控系统是一个用于监测、记录和管理系统状态和事件的软件系统。

它能够帮助用户实时监控系统的运行状态,及时发现和解决问题,提高系统的稳定性和可靠性。

1.2 文档的目的和读者本文档旨在提供监控系统代码的详细说明,以便开发人员能够深入了解系统的实现原理和功能。

本文档的主要读者包括开发人员和系统管理员。

二、系统架构2.1 系统组成和模块划分监控系统由以下几个主要模块组成:●数据采集:负责采集系统各种指标和事件数据,并将其发送到数据处理模块。

●数据处理:负责对采集到的数据进行处理和分析,监控报告并发送给用户。

●报警管理:负责根据预设的规则判断是否需要发送告警,并将告警信息发送给相关人员。

●界面展示:提供用户界面,用于展示监控数据、报告和告警信息。

2.2 系统架构图[在此插入系统架构图]三、代码结构3.1 整体结构监控系统的代码结构如下:●src:包含所有源代码文件。

●data_collection:数据采集模块的源代码。

●data_processing:数据处理模块的源代码。

●alarm_management:报警管理模块的源代码。

●user_interface:界面展示模块的源代码。

●config:包含配置文件。

●data_collection_config.ini:数据采集模块的配置文件。

●data_processing_config.ini:数据处理模块的配置文件。

●alarm_management_config.ini:报警管理模块的配置文件。

●user_interface_config.ini:界面展示模块的配置文件。

●docs:包含系统的其他文档和说明文件。

3.2 数据采集模块代码结构数据采集模块的代码结构如下:●mn.py:数据采集模块的入口文件。

●data_collection.py:数据采集的主要逻辑。

●data_source.py:数据源接口的定义和实现。

视频监控站点编码规范初稿

视频监控站点编码规范初稿

视频监控站点编码规范初稿一、视频监控站点编码规范1.编码目的。

唯一标识四川省视频点编码;2.编码原则。

用11位字母和数字的组合码分别表示视频点所在流域、水系和河流、编号及类别。

3.代码格式。

ABTFFSSNNNY。

A B T FFSS NNN Y视频点类型视频点编号支流编码二级流域码一级流域码类别属性码4.说明:A:1位字母表示类别属性,视频点取值V(SL213-98中未作规范,且V未被占用,因此采用Video的首字母替代);B:1位字母表示一级流域,一级流域码详见附录A;T:1位字母表示二级流域(水系),二级流域(水系)码相见附录B。

FF:2位数字或字母表示一级支流的编号,取值0~9、A~Y,其中00~09作为干流或干流不同河段的代码,详细参见《中国河流名称代码》SL249-1999;SS:2位数字或字母分别表示二级支流、二级以下支流的编号,取值0~9,A~Y;若是二级支流,第二个S为0。

详细参见《中国河流名称代码》SL249-1999;NNN:3位数字表示该区域(流域,水系)内某个视频点的编号,取值001~999。

Y:1位数字代表视频点类型,其中:1:河道视频监测点;2:水库视频监测点;3:堤防视频监测点;4:蓄滞洪区视频监测点;5:闸门视频监控点;6:跨河、治河工程视频监控点;7:穿堤建筑物视频监控点;8:灌区视频监控点;9:其他;二、参考资料:1.《水利工程基础信息代码编制规定》SL213-98;2.《中国河流名称代码》SL249-1999三、附录附录A 一级流域分类码一级流域按字母定义如下:A:黑龙江流域B:辽河流域C:海河流域D:黄河流域E:淮河流域F:长江流域G:浙闽台诸河流域H:珠江流域J:广西、云南、西藏、新疆诸国际河流K:内流区流域附录B 二级流域(水系)分类码二级流域按字母定义如下:黑龙江流域A:黑龙江水系B:松花江水系C:乌苏里江水系D:绥芬河水系E:图们江水系F:额尔古纳河水系A:辽河干流水系B:大凌河及辽东沿海诸河水系C:辽东半岛诸河水系D:鸭绿江水系海河流域A:滦河水系B:潮白、北运、蓟运河水系C:永定河水系D:大清河水系E:子牙河水系F: 徒骇、马颊河水系G:漳卫南运河水系黄河流域A:黄河干流水系B:汾河水系C:渭河水系D:山东半岛及沿海诸河水系淮河流域A:淮河干流水系B:沂沭泗水系C:里下河水系长江流域A:长江干流水系B:雅砻江水系C:岷江水系D:嘉陵江水系E:乌江水系F:洞庭湖水系G:汉江水系H:鄱阳湖水系J:太湖水系东、南沿海诸河流域A:钱塘江水系B:瓯江水系C:闽江水系D:闽东、粤东及台湾沿海诸河水系E:韩江水系A:西江水系B:北江水系C:东江水系D:珠江三角洲水系E:粤桂琼沿海诸河水系广西、云南、西藏、新疆诸国际河流A:元江——红河流域B:澜沧江——猖公河流域C:怒江——伊洛瓦底江流域D:雅鲁藏布江——布拉马普特拉河流域E:狮泉河——印度河流域F:额尔齐斯河流域内流区A:乌裕尔河内流区B:呼伦贝尔内流区C:白城内流区D:扶余内流区E:霍林河内流区F:内蒙古内流区G:鄂尔多斯内流区H:河西走廊——阿拉善河内流区J:柴达木内流区K:准葛尔内流区L:中亚(伊犁河,额敏河)内流区M:塔里木内流区N:西藏内流区。

VLC源代码分析完整版

VLC源代码分析完整版

VLC源代码分析完整版VLC(VideoLAN Client)是一个开源的媒体播放器和框架,它能够播放各种音视频格式,可以在多个平台上运行,包括Windows、Mac、Linux和移动设备等。

VLC的源代码是公开的,任何人都可以查看和修改。

首先,VLC的源代码包含了多个模块,包括音频、视频、网络、输入输出和用户界面等。

这些模块相互配合,实现了VLC播放器的各种功能。

其中,音频和视频模块负责解码和播放音视频文件,网络模块负责获取音视频流并进行传输,输入输出模块负责处理用户输入和输出。

音频和视频模块的关键函数是解码函数,它们负责将音视频文件解码成原始的音频和视频数据。

VLC支持多种音视频编码格式,因此解码函数需要根据文件的编码格式选择合适的解码器,并将解码后的数据传递给播放模块进行播放。

在音频模块中,还包括声音输出函数,它负责将解码后的音频数据传递给音频输出接口,以实现音频的播放。

网络模块负责获取音视频流并进行传输。

它使用了多种网络协议,包括HTTP、RTSP、RTP和UDP等。

网络模块首先根据URL获取音视频流的数据,然后进行传输。

在传输过程中,网络模块会处理数据包的传输错误和丢失等问题,以保证音视频数据的稳定性和准确性。

输入输出模块负责处理用户输入和输出。

它包括用户界面和控制台输入等。

用户界面负责显示VLC播放器的用户界面,并接收用户的操作指令。

控制台输入负责从命令行接收用户的命令,并解析执行。

这些模块将用户输入的指令传递给其他模块进行处理,以达到用户期望的功能。

除了以上核心模块,VLC的源代码还包括了许多其他辅助模块,如字幕、滤镜、效果和插件等。

这些模块提供了额外的功能和特性,可以在播放过程中应用于音视频数据,以实现字幕显示、图像滤镜和音效处理等效果。

总之,VLC的源代码是一个庞大而复杂的系统,包括多个模块和功能特性。

通过对源代码的分析,我们可以了解VLC播放器是如何工作的,能够播放各种音视频格式,并具有丰富的功能和特性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一步粘贴代码CBitmap m_BKGround;CString m_Caption;BOOL m_IsMax;CButtonState m_ButtonState; //按钮状态int m_BorderWidth; //边框宽度int m_BorderHeight; //边框高度int m_FrameWidth ; //窗体D宽度int m_FrameHeight; //窗体D高度int m_CaptionHeight; //标题栏的高度int m_TitleDrawHeight; //标题栏实际的绘制高度int m_ButtonWidth; //按钮位图宽度int m_ButtonHeight; //按钮位图高度COLORREF m_CapitonColor; //标题字体颜色CFont m_CaptionFont; //标题字体BOOL m_IsDrawForm ;CRect m_LTitleRc, m_MTitleRc,m_RTitleRc; //左,中,右标题显示区域CRect m_MinRect,m_MaxRect,m_CloseRect; //标题栏按钮的显示区域第二步粘贴代码// CCaptureDlg dialog#define FLEFTBAR 1 //左边框#define FLEFTTITLE 2 //左标题#define FRIGHTTITLE 4 //右标题#define FMIDTITLE 8 //中间标题#define FRIGHTBAR 16 //右边框#define FBOTTOMBAR 32 //底边框#define FMINBUTTON 64 //最小化按钮#define FMAXBUTTON 128 //最大化按钮#define FCLOSEBUTTON 256 //关闭按钮#define FALL 511 //所有标识#define MAXNUM 100//按钮状态Onlintdialog//加载背景位图m_BKGround.LoadBitmap(IDB_BKGROUND);m_BorderHeight = GetSystemMetrics(SM_CYBORDER);m_BorderWidth = GetSystemMetrics(SM_CXBORDER);m_CaptionHeight = GetSystemMetrics(SM_CYCAPTION);SetWindowText(m_Caption);m_CaptionFont.CreateFont(14,10,0,3,600,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_ROMAN,"宋体");CBitmap bitmap;bitmap.LoadBitmap(IDB_MINBT);BITMAPINFO bInfo;bitmap.GetObject(sizeof(bInfo),&bInfo);m_ButtonWidth = bInfo.bmiHeader.biWidth;m_ButtonHeight = bInfo.bmiHeader.biHeight;bitmap.DeleteObject();CcaptureDialog右键添加成员函数void DrawDialog(UINT Flags) public //获得边框信息m_FrameHeight = GetSystemMetrics(SM_CYFIXEDFRAME);m_BorderHeight = GetSystemMetrics(SM_CYBORDER);m_FrameWidth = GetSystemMetrics(SM_CXFIXEDFRAME);m_BorderWidth = GetSystemMetrics(SM_CXBORDER);m_CaptionHeight = GetSystemMetrics(SM_CYCAPTION);CRect Clientrect;GetClientRect(Clientrect);CRect WinRC,FactRC;GetWindowRect(WinRC);FactRC.CopyRect(CRect(0,0,WinRC.Width(),WinRC.Height()));//获取窗口设备上下文CWindowDC WindowDC(this);CBitmap LeftLine,*OldObj;BITMAPINFO bitinfo;CDC memDC;memDC.CreateCompatibleDC(&WindowDC);int leftwidth = 0; //左标题的宽度int rightwidth = 0; //右标题的宽度int leftlinewidth = 0; //窗体边框和3D宽度int rLineWidth;int bLineHeight;DeleteObject(LeftLine);LeftLine.LoadBitmap(IDB_RIGHTTITLE); //加载右标题LeftLine.GetObject(sizeof(bitinfo),&bitinfo);rightwidth = bitinfo.bmiHeader.biWidth;LeftLine.Detach();int x,y;//绘制左边线//获取位图大小if(Flags & FLEFTBAR){DeleteObject(LeftLine);LeftLine.LoadBitmap(IDB_LEFTBAR);LeftLine.GetObject(sizeof(bitinfo),&bitinfo);LeftLine.GetObject(sizeof(bitinfo),&bitinfo);x = bitinfo.bmiHeader.biWidth;y = bitinfo.bmiHeader.biHeight;OldObj = memDC.SelectObject(&LeftLine);//判断位图的宽度与窗体边缘的宽度leftlinewidth = (x> m_FrameWidth+m_BorderWidth)? x:m_FrameWidth+m_BorderWidth;WindowDC.StretchBlt(0,m_CaptionHeight,leftlinewidth,FactRC.Height()-m_CaptionHeight,&memDC,0,0,x,y,SRCCOPY);memDC.SelectObject(OldObj);LeftLine.Detach();}//绘制左标题if(Flags & FLEFTTITLE){DeleteObject(LeftLine);LeftLine.LoadBitmap(IDB_LEFTTITLE);//获取位图大小LeftLine.GetObject(sizeof(bitinfo),&bitinfo);OldObj = memDC.SelectObject(&LeftLine);leftwidth = x = bitinfo.bmiHeader.biWidth;y = bitinfo.bmiHeader.biHeight;m_TitleDrawHeight = (m_CaptionHeight+4 > y) ? m_CaptionHeight+4 : y;m_LTitleRc.CopyRect(CRect(0,0,x,m_TitleDrawHeight));WindowDC.StretchBlt(m_LTitleRc.left,m_LTitleRc.top,m_LTitleRc.Width(),m_LTitleRc.Height(),&memDC,0,0,x,y,SRCCOPY);memDC.SelectObject(OldObj);LeftLine.Detach();}//绘制右标题if(Flags & FRIGHTTITLE){DeleteObject(LeftLine);LeftLine.LoadBitmap(IDB_RIGHTTITLE);//获取位图大小LeftLine.GetObject(sizeof(bitinfo),&bitinfo);OldObj = memDC.SelectObject(&LeftLine);x = bitinfo.bmiHeader.biWidth;y = bitinfo.bmiHeader.biHeight;m_TitleDrawHeight = (m_CaptionHeight+4 > y) ? m_CaptionHeight+4 : y;m_RTitleRc.CopyRect(CRect(FactRC.right-x,0,FactRC.right,m_TitleDrawHeight));WindowDC.StretchBlt(m_RTitleRc.left,m_RTitleRc.top,m_RTitleRc.Width(),m_RTitleRc.Height(),&memDC,0,0,x,y,SRCCOPY);DeleteObject( memDC.SelectObject(OldObj));LeftLine.Detach();}//绘制中间标题if(Flags & FMIDTITLE){DeleteObject(LeftLine);LeftLine.LoadBitmap(IDB_MIDTITLE);//获取位图大小LeftLine.GetObject(sizeof(bitinfo),&bitinfo);OldObj = memDC.SelectObject(&LeftLine);x = bitinfo.bmiHeader.biWidth;y = bitinfo.bmiHeader.biHeight;m_TitleDrawHeight = (m_CaptionHeight+4 > y) ? m_CaptionHeight+4 : y;m_MTitleRc.CopyRect(CRect(m_LTitleRc.right,0,m_RTitleRc.left,m_TitleDrawHeight));WindowDC.StretchBlt(m_MTitleRc.left,m_MTitleRc.top,m_MTitleRc.Width(), m_MTitleRc.Height(),&memDC,0,0,x,y,SRCCOPY);LeftLine.Detach();memDC.SelectObject(OldObj);}//绘制右边框if(Flags & FRIGHTBAR){DeleteObject(LeftLine);LeftLine.LoadBitmap(IDB_RIGHTBAR);//获取位图大小LeftLine.GetObject(sizeof(bitinfo),&bitinfo);OldObj = memDC.SelectObject(&LeftLine);x = bitinfo.bmiHeader.biWidth;y = bitinfo.bmiHeader.biHeight;rLineWidth = m_FrameWidth + m_BorderWidth;rLineWidth = rLineWidth>x? rLineWidth:x;WindowDC.StretchBlt(m_RTitleRc.right-rLineWidth,m_TitleDrawHeight,rLineWidth, FactRC.Height()-m_TitleDrawHeight,&memDC,0,0,x,y,SRCCOPY);memDC.SelectObject(OldObj);LeftLine.Detach();}//绘制底边框if(Flags & FBOTTOMBAR){DeleteObject(LeftLine);LeftLine.LoadBitmap(IDB_BOTTOMBAR);//获取位图大小LeftLine.GetObject(sizeof(bitinfo),&bitinfo);OldObj = memDC.SelectObject(&LeftLine);x = bitinfo.bmiHeader.biWidth;y = bitinfo.bmiHeader.biHeight;bLineHeight = m_BorderHeight + m_FrameHeight;bLineHeight = bLineHeight>y? bLineHeight:y;WindowDC.StretchBlt(leftlinewidth,FactRC.Height()-bLineHeight,m_RTitleRc.right -rLineWidth-leftlinewidth, bLineHeight,&memDC,0,0,x,y,SRCCOPY);memDC.SelectObject(OldObj);LeftLine.Detach();}//绘制底边框CPoint pos(30,1);m_MinRect.CopyRect(CRect(m_RTitleRc.left+pos.x,(m_TitleDrawHeight+2*m_BorderHeight -m_ButtonHeight)/2+pos.y,m_ButtonWidth,m_ButtonHeight));pos.x = 55;m_MaxRect.CopyRect(CRect(m_RTitleRc.left+pos.x,(m_TitleDrawHeight+2*m_BorderHeight -m_ButtonHeight)/2+pos.y,m_ButtonWidth,m_ButtonHeight));pos.x = 80;m_CloseRect.CopyRect(CRect(m_RTitleRc.left+pos.x,(m_TitleDrawHeight+2*m_BorderHeigh t-m_ButtonHeight)/2+pos.y,m_ButtonWidth,m_ButtonHeight));//绘制最小化按钮if(Flags & FMINBUTTON){DeleteObject(LeftLine);LeftLine.LoadBitmap(IDB_MINBT);//获取位图大小LeftLine.GetObject(sizeof(bitinfo),&bitinfo);OldObj = memDC.SelectObject(&LeftLine);x = bitinfo.bmiHeader.biWidth;y = bitinfo.bmiHeader.biHeight;WindowDC.StretchBlt(m_MinRect.left,m_MinRect.top,m_MinRect.right,m_MinRect.bottom,&memDC,0,0,x,y,SRCCOPY);memDC.SelectObject(OldObj);LeftLine.Detach();}//绘制最大化按钮if ( Flags & FMAXBUTTON){DeleteObject(LeftLine);LeftLine.LoadBitmap(IDB_MAXBT);//获取位图大小LeftLine.GetObject(sizeof(bitinfo),&bitinfo);OldObj = memDC.SelectObject(&LeftLine);x = bitinfo.bmiHeader.biWidth;y = bitinfo.bmiHeader.biHeight;WindowDC.StretchBlt(m_MaxRect.left,m_MaxRect.top,m_MaxRect.right, m_MaxRect.bottom,&memDC,0,0,x,y,SRCCOPY);memDC.SelectObject(OldObj);LeftLine.Detach();}//绘制关闭按钮if(Flags & FCLOSEBUTTON){DeleteObject(LeftLine);LeftLine.LoadBitmap(IDB_CLOSEBT);//获取位图大小LeftLine.GetObject(sizeof(bitinfo),&bitinfo);OldObj = memDC.SelectObject(&LeftLine);x = bitinfo.bmiHeader.biWidth;y = bitinfo.bmiHeader.biHeight;WindowDC.StretchBlt(m_CloseRect.left,m_CloseRect.top,m_CloseRect.right, m_CloseRect.bottom,&memDC,0,0,x,y,SRCCOPY);memDC.SelectObject(OldObj);LeftLine.Detach();}LeftLine.DeleteObject();memDC.DeleteDC();DrawCaption();右键添加函数void DrawCapture publicif(!m_Caption.IsEmpty()){CDC* pDC = GetWindowDC();pDC->SetBkMode(TRANSPARENT);pDC->SetTextColor(m_CapitonColor);pDC->SetTextAlign(TA_CENTER);CRect rect;GetClientRect(rect);pDC->SelectObject(&m_CaptionFont);pDC->TextOut(rect.Width()/2, m_CaptionHeight/3 ,m_Caption);ReleaseDC(pDC);}Onpaint函数下DrawDialog(FALL);m_IsDrawForm = TRUE;CCaptureDlg::CCaptureDlg(CWnd* pParent /*=NULL*/): CDialog(CCaptureDlg::IDD, pParent){//{{AFX_DATA_INIT(CCaptureDlg)//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);m_CapitonColor = RGB(0,0,255);m_Caption = "社区视频监控系统";m_IsMax = TRUE;。

相关文档
最新文档