`
ror854ti
  • 浏览: 17563 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

[转载]Win32 API讲座 第二部分

 
阅读更多

[转载]Win32 API讲座 第二部分
2010年11月10日
  第二课∶句柄、矩形和画点函数
  一、句柄
  今天开始,我向大家讲有关API的是实质性内容。我们就从"句柄"开始。 只要你来到了API的世界,经常碰到的问题之一就是句柄。那么究竟什么是句柄呢? 如果你从来都没有听说过"句柄"这个词,可能首先觉得句柄当中有很多内容。其实不然,所谓句柄实际上是一个数据,是一个Long (整长型)的数据。在API中,它经常是以一个参数的形式传递给各种API函数。如: Public Declare Function GetWindow& Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long)
  其中,hwnd就是句柄。在VB里,句柄是一种属性,您打开VB中的对象游览器看一看Form 窗体或者PictureBox控件等究竟有没有hwnd属性。是有的。VB中的解释是这样的∶ Microsoft Windows 运行环境,通过给应用程序中的每个窗体和控件分配一个句柄(或 hWnd)来标识它们。hWnd 属性用于Windows API调用。许多 Windows 运行环境函数需要活动窗口的 hWnd 作为参数。
  如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?
  为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows 内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。句柄地址(稳定)→记载着对象在内存中的地址────→对象在内存中的地址(不稳定)→ 实际对象
  但是,必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的一个座位是一样的道理。 在VB中获得一个对象的句柄十分简单,如要获取Form1窗体的句柄,就可以这样写∶ Form1.Hwnd
  对象的句柄还可以通过API函数来获得,如∶
  GetActiveWindow 返回位于最顶部的具有输入焦点的窗口句柄 GetFocus 获得当前线程里补获鼠标输入的窗口句柄 GetForegroundWindow 从位于前台的线程里返回活动窗口的句柄 GetCursor 取得当前指针的句柄 GetDesktopWindow 获取整个桌面的句柄 GetWindow 获得一个窗口的句柄,该窗口与某源窗口有特定的关系《以上函数说明均可在WinAPI.hlp文件中找到。》
  注意以下几点∶ 1,线程内与线程外。(VB不支持多线程)。其他应用程序对此程序来说都是线程外。 2,在windows95操作系统下,各个窗体(包括一些控件,如文本框,图片框等, MICROSORT对它们均统称为窗体)拥有各自的鼠标指针。这和win16下各应用程序使用同样一个指针是截然不同的。
  3,每次从新启动,各窗体的句柄都有所变化。Text5 的装载和卸载过程中,句柄始终是在变化着的。这说明了上面提的影院售门票中存在的现象是真实的。 获得对象句柄的函数还有很多,以后碰到它们时再介绍给大家。
  二、驾驶句柄
  只要弄清了什么是句柄,尤其是窗口句柄,那么操纵一个对象就变得自如一多了。比如,可以通过GetWindowText API函数,我们可以轻松地获得某特定窗口的标题。 GetWindowText 在VB中的声明如下: Private Declare Function GetWindowText& Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) 于是,我们可以通过以下一段代码来获得Form1的窗口标题。(新建一个项目,添加一个命令按钮,把以下的代码拷贝过去,还有上面的函数声明。你就可以运行了)
  Private Sub Command1_Click() Dim dl As Long Dim FormCaption As String FormCaption = Space(128) dl& = GetWindowText(Form1.hwnd, FormCaption, 128) Print FormCaption End Sub 注∶其中128是指字符串变量FormCaption的长度(又称缓冲区大小)
  这有必要吗?为了获得Form1窗体的标题,何必写这么多代码呢?难道这就是API。是的,的确在VB中用 Print Form1.Caption 一行代码就可以抵挡住以上代码了。但是,假如我们启动我们设计的应用程序后,想要在用鼠标点一下别的应用程序的时候,让我们的应用程序显示出那个窗体的标题,那又该怎么办呢?比方说,我们另外启动的是Micorsoft Word, 用鼠标点击Word时让程序显示出"您选择了Microsoft Word"字样。显然只靠VB是办不到的,还得靠API这老手。
  当然,您已经具备了这种能力,可以办到这件事情。让我们一起来。 关键的问题是如何获得Word程序的句柄。首先要认清的是,对VB的应用程序来说,Word 是属于进程外应用程序。正和您已经想到的那样,我们可以使用前一个示范程序用到过的 GetForegroundWindow API函数获取它的句柄。因为,当我们用鼠标点击Word时,Word 将成为前台活动窗体。接着呢?当然是 GetWindowText函数显示它的标题就可以了。我们可以采用Timer控件来完成这一切。剩下的事情就不用我多说了。本教程附带的 Program2.vbp程序是,为那些懒得由自己动手写这几行代码的人准备的,但愿您不是。如果你还没有写过API应用程序,可以说这是一个好的机会,还是动一动你的手吧,会有好处的。
  程序正常运行了没有?哈,这下感觉到API的魅力了吧? 还想不想继续学下去呀!
  三、矩形和点
  关于矩形和点,我们在上一个课堂中简单提了一下。在这里,就做一下详细的介绍。 先从简单点(Point)结构的开始。点的结构如下∶ Type POINTAPI x as Long y as Long End Type 在英语里,点叫Point,那么为什么不叫POINT,而叫POINTAPI呢?原来,VB中有Point 方法,这只是为了不必要的冲突或重名。Point用于描述一个位置,当然是一个点的位置了。在屏幕坐标中,x指的是从屏幕左边界到指定点的距离,y指的是从屏幕顶边界到指定点的距离。初次之外,没有太多的学问了,还是那句老话──牢记按引用传递。
  矩形的结构和点结构差不到哪儿去,只不过是用两个点来描述的。它的结构定义如下 Public Type RECT
  Left As Long Top As Long Right As Long Bottom As Long End Type 以下图描述了RECT结构各字段的含义。 可以看出,一个矩形区域是通过矩形的左上角的一个点和右下角的一个点,共两个点来描述的。其中,left和top字段描述了巨型的第一个角的位置,right和bottom字段描述了矩形的第二个角即右下角的位置。 在VB中,描述一个窗体或控件所处的矩形位置时,经常用Left,top以及Width,height来描述的。其中,Width是一个巨型区域的宽度,Height是高度。在此,您应当看到,RECT结构中并不是这样。如,想要获得宽度,必须从right中减掉left。
  API中有若干个函数用来处理矩形数据结构,如,下表所列∶
  函 数 功 能 EquaRect 判断两个矩形是否相同,如果相同则返回True(非0) InflateRect 增加或减少矩形的尺寸 InterSectRect 获得两个矩形相重叠的部分,即一个新的矩形 IsRectEmpty 如矩形为空,则返回TRUE OffsetRect 按规定的偏移量移动一个矩形的位置 ptInRect 判断一个指定点是否位于给出的矩形的内部 SetRect 设置巨型的参数字段值 SetRectEmpty 将所有字段都设为0,从而将矩形置空 SubtractRect 将一个矩形从另一个巨型里减去。"即切掉" UnionRect 获得同时包含两个矩形区域的最小矩形。 CopyRect 将一个矩形的内容复制给另一个 这几个函数,都是很好理解和实际应用的。
  五、设备场景在VB
  有时候,我们可能对设备场景属性进行大量的修改。使用完一个设备场景后,作为一个好的编程习惯,应当把设备场景状态恢复到我们控制这个设备场景以前的状态,以便保证其他代码正确进行绘图工作。这倒并不是说一定,只是一个好的习惯问题而已。 要把VB设备场景恢复到VB控制之前的初始状态,可以使用API函数SaveDC和RestoreDC函数,前者用来把设备场景保存到设备场景堆栈,后者则从堆栈中恢复设备场景属性。还是保持统一风格,画一个表吧∶
  设备场景堆栈函数
  函 数 说 明 SaveDC 将某设备场景状态和属性保存到设备场景堆栈。 RestoreDC 从Windows设备场景堆栈恢复某一设备状态和属性。
  接下来是,让我们研究一下设备场景的自动重画属性方面的问题。我们知道,VB 中Form和PictureBox控件具有AutoRedraw属性,用来决定是否用持久图形或通过Paint事件重绘对象。当AutoRedraw属性设为Flase时,用GetDC函数获取的设备场景句柄和控件提供的hDC句柄正好相同,说明都是指同一个设备场景。但是,当将其设为True时,用GetDC 获取的设备场景句柄不同于hDC属性所返回的场景句柄。有一点是清楚的,在这种场合的确存在两个设备场景。但是,这两个设备场景不可能同时与某一窗体关联的,不然的话,窗体应该显示哪一个设备场景中的图象呢?我们可以编写一个小小的程序来考察这个问题,(program2.vbp),程序代码如下∶
  Option Explicit
  Private Declare Function GetDC& Lib "user32" (ByVal hwnd As Long) Private Declare Function WindowFromDC& Lib "user32" (ByVal hdc As Long)
  Private Sub Command1_Click() Dim MyDC As Long
  Form1.AutoRedraw = True MyDC = GetDC(Form1.hwnd) Text1.Text = MyDC Text2.Text = Form1.hdc Text3.Text = WindowFromDC(MyDC) Text4.Text = WindowFromDC(Form1.hdc) Text5.Text = Form1.hwnd End Sub
  程序运行结果如下(在你的计算机上运行不一定是这些数据)∶ 1、用GetDC来获取的设备场景句柄∶10010,其关联窗体句柄为∶3024 2、hDC书信返回的设备场景句柄∶10234,其关联窗体句柄为∶0 3、Form窗体的句柄为3024
  1、 程序说明,用hDC来获取关联窗口时,函数执行出错,说明hDC并不与窗体关联。所以,当我们用以下代码来向窗体画一个圆时,我们将什么也看不到。(新建一个项目,把下面的代码粘贴上去,就可以运行) Private Declare Function Ellipse& Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long)
  Private Sub Form_Click() Form1.AutoRedraw = True Ellipse Form1.hdc, 0, 0, 100, 100 End Sub 尽管什么也看不到,但如果你用其他窗体掩盖程序窗体后,让程序窗体再次显示时,你会发现图形出现了。为什么呢?原来是Refresh方法所做所谓(请参看后面的表)。
  以下的代码能够直接的把绘图内容显示出来。(新建一个项目,把下面的代码粘贴上去,就可以运行) Private Declare Function GetDC& Lib "user32" (ByVal hwnd As Long) Private Declare Function Ellipse& Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long)
  Private Sub Form_Click() Dim MyDC As Long Form1.AutoRedraw = True MyDC = GetDC(Form1.hwnd) Ellipse MyDC, 0, 0, 100, 100 End Sub 尽管图形出现了,但这次的情况正好相反。也就是说,如果你用其他窗体掩盖程序窗体后,让程序窗体再次显示时,你会发现图形消失了。(但如果遮住图形的一半,图形仍然会存在)。是因为hDC中没有图象,Refresh方法用hDC来覆盖GetDC了。
  所以,如果你使用的是API绘图函数,那么在AutoRedraw = True时候,设计前对预期的结果应当有超前认识。在这种情况下windows是先在hDC中绘图,然后用GetDC来创建临时与窗体关联的设备场景,然后把hDC的内容拷贝到这个临时缓冲设备场景中来最终显示图形。我觉得这个过程已经封装在VB的Line等绘图函数里面了(注意,这只是我的猜测,不一定准确)。如下∶ Option Explicit
  Private Declare Function GetDC& Lib "user32" (ByVal hwnd As Long)
  Private Declare Function Ellipse& Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) Private Declare Function BitBlt& Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) Private Declare Function ReleaseDC& Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long)
  Private Sub Form_Click()
  Dim MyDC As Long Form1.AutoRedraw = True Ellipse hdc, 20, 20, 80, 80 '实际使用中可以用Form1.Refresh代替以下三行,以简化代码。 MyDC = GetDC(Form1.hwnd) BitBlt MyDC, 0, 0, Form1.Width, Form1.Height, Form1.hdc, 0, 0, vbSrcCopy ReleaseDC Form1.hwnd, MyDC End Sub 运行此程序后,可以发现,不管任何时候,图象总是显示在窗体之中。以下表格说明了绘制和刷新窗口有关的VB属性。
  VB属性
  AutoRedraw=FALSE
  AutoRedraw=TRUE
  hDC属性
  窗口设备场景句柄,即与窗口关联。
  指向内存设备场景的句柄(常说为内存设备场景),与窗口兼容,这幅位图叫作固定图象位图,针对窗口则叫屏幕。此设备场景不与窗口关联。
  Picture属性
  窗口背景图象位图的句柄
  背景图象位图的句柄,改变它将引起固定图象位图立即刷新以反映它。
  Image属性
  窗口固定图象位图句柄,绘制时该图象不能改变。
  窗口固定图象位图句柄,由hDC属性指给设备场景的句柄。
  Cls方法
  清除窗口使其只能现实背景位图
  清楚固定位图到背景色,并将复制到背景位图(若有)拷贝到固定固定位图。
  Refresh方法
  将背景图片(若有)复制给窗口,然后然后产生Paint事件。所有的绘图都是通过hDC设备场景直接对窗口进行。
  将固定图象复制到窗口,所有的绘图都是通过hDC设备场景直接的对固定图象位图进行。
  在这一节中要学会的关键的一个应用问题是,会使用内存设备场景。这里AutoRedraw = True时的以hDC为句柄的设备场景就是内存设备场景,它不与窗体关联。因此可以在此设备场景中进行多方面的图形加工处理,最后传送到用GetDC获取的设备场景,这样图象的加工过程就可以隐藏掉了。作为例子,你可以下载《VB前线》《源码解析》的Play024.zip文件(滤波器演示程序)。
  六、设备场景信息函数
  在本课堂一开始,讨论什么是设备场景的时候,我们已经给出了设备场景的各个属性。本节主要讨论有关获取这些属性信息的函数及其应用实例。设备场景的信息是用Windows通用设备接口(GDI)提供的GetDeviceCaps函数获取设备场景信息。此函数的功能是,根据指定设备场景代表的设备的功能返回信息。此函数有两个属性,其一是设备场景句柄,其二是返回信息的类型参数。对于使用该函数来说,主要的就是认识这些常数的含义。由于,本人精力有限,在此不能提供中文文档了,请参考MSDN等其他有关资料。
  总算把设备场景讲完了,下一堂课我们将讨论如何在这个设备场景中绘图。我想,那是很轻松的事情。当然,只要你理解好了设备场景。
  第五课∶设备场景
  一、什么是设备场景
  关于设备场景,叫法颇多,有些书上说为设备环境、显示场景,更常见的叫做设备描述表或设备描述体。当然你爱怎么叫随你的便,我还是喜欢说为设备场景。 那么究竟什么是设备场景呢? 设备场景是一种Windows对象,而Windows则是一种图形环境,其图形系统令人难以自信地灵活和强大。而实质上,Widnows下的所有绘图都是通过设备场景进行的,而不是直接对窗口和设备本身进行。为了说明设备场景,很多书都拿一些现实生活中的现象来进行对照说明。其中,最常见的是把它比喻为一位画家在作画。我想大家都看过画家是如何画画的,最起码是在电影里或者是在道旁的广告牌上作画的画家。我们可以想象一下∶有个风景秀丽的白云山(是我瞎起的名)上,有位画家一只手拿着调色板,另一只手则拿着画笔,面对一个画板正在写风景画。有些书认为画家的调色板相当于设备场景,有些书则认为画板相当于设备场景,说法不一。鉴于这种情况,我认为还是直接去说明设备场景比较好。
  作为Windows的对象,设备场景实际上是一种Windows内部的数据结构。就象POINTAPI数据结构具有x和y两个属性一样,设备场景同样具有着它自身的属性,只是属性比较多而已,如下表∶
  设备场景属性
  属 性 默 认 值背景色(Background color) 白色(White) 背景模式(Background mode) 不透明(Opaque) 位图(Bitmap) 无(None) 刷子(Brush) 白色刷子(White brush) 刷子起点(Brush origin) 0,0 剪切区(Clipping region) 整个窗口或设备表面(Entire window or device surface) 调色板(Color palette) 默认调色板(Default palette) 画笔位置(Pen position) 0,0 绘图模式(Drawing mode) R2_COPYPEN 字体(Font) 系统字体字间距(Intercharater spacing) 0 影射模式(Mapping mode) MM_TEXT 画笔(Pen) 黑色(Black) 多边形填充模式(Mapping Mode) ALTERNATE 伸缩模式(Stretching mode) BLACKONWHITE 文本色(Text color) 黑色(Black) 视口起点(Viewport origin) 0,0 视口范围(Viewport extents) 1,1 窗口起点(Window origin) 0,0 窗口范围(Window extents) 1,1
  请你多看看这张表,对设备场景都有哪些属性,脑子里应当有个印象。事实上,设备场景的很多属性对应于VB中的Form、PictureBox、Text等窗体或控件的属性。比如,字体、背景色、绘图模式等等。可想而知,很多学VB的朋友尽管并不知道什么叫设备场景,但实质上都不知不觉地使用了设备场景。可以说,设备场景是Windows编程中最重要的概念之一。 对于设备场景,有些朋友可能一时不大好理解,这很自然,不用担心谁都是一样。不知对你能否作为一个帮助,我是把设备场景想象成一种配套的(包括画板、调色板、画笔、刷子等)的绘画工具。其中画板是最重要的,其他的东西都是为这个画板服务的。如过你创建了一个设备场景,就等于是你从百货商店买来了这一套绘画工具,从而具备了绘画的条件。但,你的房间总不是那么宽敞的。为了继续绘出别的画、继续购买新的绘画工具,无用的工具应当及时清理掉。因为设备场景本身是占用内存的。不要担心这会降低运行速度,对计算机来说创建一个设备场景,再删掉一个设备场景,那都是瞬息之间的事情,根本谈不上什么浪费时间,绝对不像跑一趟百货商店那么麻烦、费时。对于绘图,你应当认识的一点是,绘图并不是简单地指绘画,输出文本也是一种绘图过程。尽管如此,API函数中图形函数与文本函数大体都是各自各的。绘画和写文本都是在同样的设备场景中进行,这一点很重要。
  我想,你大概还是没有理解好,不过没有关系,继续往下看好了。本节中请记住一点∶ Widnows下的所有绘图都是通过设备场景进行的。
  二、如何从VB里使用设备场景
  如何从VB里使用设备场景呢?VB的设计者们已经为我们想到了这一点,就象为了直接操纵窗体而提供了窗体句柄hWnd一样,为设备场景提供了hDC的句柄属性。很多API函数都是以hDC作为它的一个参数。如果控件没有提供hDC属性,你也可以用GetDC或 GetDCEx函数去获得,不用时就用ReleaseDC函数把它释放掉即可。不过这得需要控件具有hWnd属性。如果连hWnd属性也没有,那就没办法了,大概那根本不是绘图的地方。 按自己的需要也可以创建一个或多个设备场景,需要多少就创建多少。这可能是 CreateCompatibleDC和CreateDC函数的最拿手的好戏。设备场景可以同某一窗口关联,也可以以孤立的方式存在。所谓关联就是说,你在这个设备场景中绘图,内容将立即输出到关联的窗口,所谓孤立就是指尽管你在这个设备场景中绘出了图形,但它只存在于这个设备场景,而不显示在哪里。我们可以通过多个设备场景来对一个最终图形进行光栅运算,从而进行加工,最后把图象传送给已与窗体关联的设备场景,让它显示出来。被创建的设备场景,如果不再使用,应当删去。(这段描述,请参考附带的演示程序WindowDC.vbp。)
  以下表格总结了用于获取和释放设备场景的API函数。
  函 数 说 明 CreateCompatibleDC 创建一个与源DC兼容的内存设备场景。内存设备场景可看作一种对内存中设备的模拟。通过在设备中选进一幅位图,可创建与设备兼容的内存影响。 CreateDC 为指定的设备创建一个设备场景,它通常用于为打印机创建一个DC。 CreateIC 为指定的设备创建一个信息场景(IC)。IC类似于设备场景,只是所需系统开销更少,它可用来获取关于设备的信息,但不能作绘图操作。 DeleteDC 删除一个已经建立的设备场景。可用它释放CreateDC,CreateIC和CreateCompatibleDC 函数建立的设备场景。 GetDC,GetDCEx 为指定窗口获取一个设备场景。若窗口类使用专用DC,用该函数取回设备场景,否则它从Windows缓存中获取一个DC,用GetDCEx才能在窗口使用专用DC时获得一个缓存场景。 GetWindowDC 该函数与GetDC类似,只是取回的设备场景是针对窗口整个,而不是客户区。 ReleaseDC 释放用GetDC,GetDCEx和GetWindowDC获得的设备场景。若DC是一个专用设备场景,该函数无效。 WindowFromDC 判断与指定设备场景关联在一起的窗口句柄。 以下的演示程序是一个非常
分享到:
评论

相关推荐

    Toxi / Oxy Pro 便携式气体检测仪参考手册 使用说明书

    Toxi Oxy Pro 便携式气体检测仪参考手册 使用说明书

    科傻模拟网优化操作-教程书

    官方的的说明书资料,部分视频说明在这里: https://www.bilibili.com/video/BV1Fz4y1d7rn/?spm_id_from=333.999.0.0&vd_source=13dc65dbb4ac9127d9af36e7b281220e

    node-v8.14.0-x64.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    2023商业银行数据资产体系白皮书,主要介绍了“三位一体”数据资产体系的构成与工作机制,以及商业银行数据资产体系建设实践

    2023商业银行数据资产体系白皮书 目录 第 1 章 数据资产化与数据要素市场化相辅相成,相互促进 第 2 章 数据资产化是企业数据治理向上演进的必经之路 第 3 章 数据资产体系发展概述 第 4 章 “三位一体”数据资产体系的构思 4.1“三位一体”数据资产体系的构成与工作机制 数据资产管理 数据资产运营 数据资产评价 数据资产体系工作机制 4.2“三位一体”数据资产体系的相互作用关系 4.3“三位一体”数据资产体系的构建 4.4“三位一体”数据资产体系的优势 第 5 章 商业银行数据资产体系建设实践 5.1商业银行开展数据资产体系建设的背景和目标 5.2商业银行数据资产体系建设的工作步骤 5.3上海银行数据资产体系建设实践的主要成果 第 6 章 数据要素流通市场赋能企业数据资产化 6.1全国多层次数据要素市场的建设 6.2上海数据交易所赋能企业数据资产化 6.3数据要素流通交易市场赋能企业数据资产化的展望 第 7 章 未来演进与展望

    基于微信小程序的助农扶贫小程序

    大学生毕业设计、大学生课程设计作业

    车辆销售数据Python爬取并做数据分析,项目源码注解清晰一看就懂.zip

    车辆销售数据Python爬取并做数据分析,项目源码注解清晰一看就懂

    毕业设计:基于SSM的mysql-学生社团管理系统(源码 + 数据库 + 说明文档)

    毕业设计:基于SSM的mysql_学生社团管理系统(源码 + 数据库 + 说明文档) 第2章 主要技术和工具介绍 1 2.1 JSP语言 1 2.2 MySQL数据库 1 2.3 jsp技术 2 2.4ssm简介 3 第3章 系统分析 1 3.1可行性分析 1 3.1.1经济可行性 1 3.1.2技术可行性 1 3.1.3操作可行性 1 3.2需求分析 1 3.3业务流程分析 2 3.4数据流程分析 3 第4章 系统设计 5 4.1系统结构设计 5 4.2功能模块设计 5 4.3数据库设计 6 4.3.1数据库设计概述 6 4.3.1概念设计 6 4.3.2表设计 7 第5章 系统实现 15 5.1基本任务 15 5.2登录模块的实现 15 5.2.1首页实现 15 5.2.2管理员后台登录 16 5.3用户模块的实现 19 5.3.1注册模块及登录的实现 19 5.2.2入团模块的实现 21 5.2.3场地预约模块的实现 22 5.4管理员模块的实现 24 5.4.1系统用户管理模块的实现 24 5.4.2活动公告管理模块的实现 26 5.5社团模块的实现 28 5.5.1活动信息

    大健康零售业务O2O数字化战略规划方案.pptx

    大健康零售业务O2O数字化战略规划方案.pptx

    数据中台项目主要岗位及其职责和任务

    数据中台项目主要岗位及其职责和任务

    node-v8.0.0-linux-armv7l.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    流程制造行业数字化智能工厂总体规划建设方案.pptx

    流程制造行业数字化智能工厂总体规划建设方案.pptx

    c语言学生成绩管理系统源码.zip

    c语言学生成绩管理系统源码.zip

    DEV-C++-5.11下载链接

    DEV-C++-5.11下载链接

    电器租赁小程序.zip

    电器租赁小程序.zip

    知乎小程序算法.zip

    知乎小程序算法.zip

    基于R语言SIR传染病传播的SIR模型,很全,可直接应用仿真模拟.rar

    基于R语言SIR传染病传播的SIR模型,很全,可直接应用仿真模拟.rar

    node-v6.13.0.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v10.11.0-darwin-x64.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    项目申报系统(Struts2+Spring+Hibernate+Jsp+Mysql5).zip

    广东工业大学工程管理

Global site tag (gtag.js) - Google Analytics