MediaPlayer.7z



-
具体介绍使用请查看https://fulin.blog.csdn.net/article/details/114275914博客
2.53MB
4-15-1(MediaPlayer音乐).7z
2021-02-034-15-1(MediaPlayer音乐).7z
535KB
Android-Handler.7z
2020-09-01Android中Handler基本流程熟悉,MediaPlayer中流程调用逻辑以及ThreadLocal的作用
526KB
MeidaPlayer流程.7z
2020-02-08MediaPlayer从java层到native层的详细流程图,主要包括了setDataSource()、prepareAsync()、start()的调用流程;中间还涵盖了整体的消息机制,播放器选择(播放工厂、打分机制)、NuPlayer的创建、不同资源类型的选择、AVSync(音视频同步)
1.85MB
Java图片转视频需要用到的五个jar包
2020-12-01此资源的初心是供各位无法翻墙的朋友免费下载,内含:customizer.jar、Jim2mov.jar、jmf.jar、mediaplayer.jar、multiplayer.jar
15.39MB
Apress.Pro.WPF.in.C.Sharp.2008.2nd.Edition.Feb.2008
2010-04-15WPF编程宝典——使用C# 2008和.NET 3.5(第2版)英文版 目录 第1章 WPF概述 1 1.1 理解Windows图形 1 1.1.1 DirectX:新的图形引擎 1 1.1.2 硬件加速与WPF 2 1.2 WPF:高级API 4 1.2.1 分辨率无关性 5 1.2.2 WPF的演化 9 1.2.3 Windows窗体将继续保留 11 1.2.4 DirectX也将继续保留 12 1.2.5 Silverlight 12 1.3 WPF体系结构 13 1.4 结束语 17 第2章 XAML 19 2.1 理解XAML 20 2.1.1 WPF之前的图形用户界面 20 2.1.2 XAML变体 21 2.1.3 XAML编译 22 2.2 XAML基础 22 2.2.1 XAML名称空间 23 2.2.2 后台代码类 24 2.3 XAML中的属性和事件 26 2.3.1 简单属性与类型转换器 27 2.3.2 复杂属性 29 2.3.3 标记扩展 30 2.3.4 附加属性 31 2.3.5 嵌套元素 32 2.3.6 特殊字符与空白字符 35 2.3.7 事件 36 2.3.8 完整的Eight Ball示例程序 38 2.4 使用其他名称空间中的类型 38 2.5 加载和编译XAML 40 2.5.1 只使用代码 41 2.5.2 使用代码和未编译的XAML 43 2.5.3 使用代码和编译过的XAML 44 2.5.4 只使用XAML 46 2.6 结束语 47 第3章 Application类 48 3.1 应用程序的生命周期 48 3.1.1 创建Application对象 48 3.1.2 派生一个自定义的 Application类 49 3.1.3 应用程序的关闭方式 51 3.1.4 应用程序事件 51 3.2 Application类的任务 53 3.2.1 处理命令行参数 54 3.2.2 访问当前Application对象 55 3.2.3 在窗口之间进行交互 56 3.2.4 单实例应用程序 57 3.3 结束语 63 第4章 布局 64 4.1 理解WPF中的布局 64 4.1.1 WPF布局原则 65 4.1.2 布局过程 66 4.1.3 布局包容器 66 4.2 使用StackPanel面板 进行简单布局 68 4.2.1 布局属性 69 4.2.2 对齐方式 70 4.2.3 外边距 71 4.2.4 最小尺寸、最大尺寸以及 显式地设置尺寸 72 4.3 WrapPanel面板和DockPanel 面板 74 4.3.1 WrapPanel面板 74 4.3.2 DockPanel面板 75 4.3.3 嵌套布局包容器 77 4.4 Grid面板 78 4.4.1 调整行和列 80 4.4.2 跨越行和列 82 4.4.3 分割窗口 83 4.4.4 共享尺寸组 86 4.4.5 UniformGrid面板 88 4.5 使用Canvas面板进行 基于坐标的布局 89 4.5.1 Z顺序 90 4.5.2 lnkCanvas元素 91 4.6 布局示例 93 4.6.1 列设置 93 4.6.2 动态内容 94 4.6.3 组合式用户界面 96 4.7 结束语 97 第5章 内容 99 5.1 理解内容控件 99 5.1.1 Content属性 101 5.1.2 对齐内容 102 5.1.3 WPF内容原则 103 5.2 特殊包容器控件 104 5.2.1 ScrollViewer包容器控件 104 5.2.2 GroupBox和TabItem: 带标题的内容控件 107 5.2.3 Expander控件 109 5.3 装饰控件 112 5.3.1 Border控件 112 5.3.2 Viewbox控件 113 5.4 结束语 115 第6章 依赖项属性和路由事件 116 6.1 理解依赖项属性 116 6.1.1 定义和注册依赖项属性 117 6.1.2 WPF使用依赖项属性的方式 124 6.2 理解路由事件 126 6.2.1 定义和注册路由事件 126 6.2.2 关联事件处理程序 128 6.2.3 事件路由 129 6.3 WPF事件 137 6.3.1 生命周期事件 137 6.3.2 输入事件 139 6.3.3 键盘输入 140 6.3.4 鼠标输入 145 6.4 结束语 149 第7章 经典控件 151 7.1 控件类 151 7.1.1 背景画刷和前景画刷 151 7.1.2 字体 155 7.1.3 鼠标光标 159 7.2 内容控件 160 7.2.1 标签 160 7.2.2 按钮 161 7.2.3 工具提示 164 7.3 文本控件 170 7.3.1 多行文本 171 7.3.2 选择文本 172 7.3.3 TextBox控件的其他特征 172 7.3.4 PasswordBox控件 173 7.4 列表控件 174 7.4.1 ListBox控件 174 7.4.2 ComboBox控件 177 7.5 基于范围的控件 178 7.5.1 Slider控件 178 7.5.2 进度条 179 7.6 结束语 180 第8章 窗口 181 8.1 Window类 181 8.1.1 显示窗口 183 8.1.2 定位窗口 184 8.1.3 保存和恢复窗口位置 185 8.2 窗口交互 187 8.2.1 窗口所有权 188 8.2.2 对话框模型 189 8.2.3 通用对话框 190 8.3 非矩形窗口 191 8.3.1 简单形状窗口 191 8.3.2 具有形状内容的透明窗口 194 8.3.3 移动任意形状窗口 195 8.3.4 改变任意形状窗口的尺寸 196 8.4 Vista风格的窗口 197 8.4.1 使用Windows Vista玻璃效果 198 8.4.2 任务对话框和文件对话框 202 8.5 结束语 204 第9章 页面和导航 205 9.1 理解基于页面的导航 205 9.2 基于页面的用户界面 206 9.2.1 一个具有导航功能的基于 页面的简单应用程序 206 9.2.2 Page类 208 9.2.3 超链接 209 9.2.4 在一个框架中宿主页面 211 9.2.5 在另外一个页面中宿主页面 212 9.2.6 在Web浏览器中宿主页面 213 9.3 页面历史 214 9.3.1 深入分析WPF中的URI 214 9.3.2 导航历史 215 9.3.3 维护自定义的属性 216 9.4 导航服务 217 9.4.1 通过编程进行导航 217 9.4.2 导航事件 218 9.4.3 管理日志 219 9.4.4 向日志添加自定义项 221 9.4.5 页函数 225 9.5 XAML浏览器应用程序 227 9.5.1 XBAP应用程序的运行要求 228 9.5.2 创建XBAP应用程序 229 9.5.3 部署XBAP应用程序 230 9.5.4 更新XBAP应用程序 231 9.5.5 XBAP应用程序的安全性 232 9.5.6 完全信任的XBAP应用程序 233 9.5.7 联合XBAP应用程序和 标准的单机应用程序 234 9.5.8 为不同的安全级别编写代码 234 9.5.9 在Web页面中嵌入XBAP 应用程序 239 9.6 结束语 240 第10章 命令 241 10.1 理解命令 241 10.2 WPF命令模型 243 10.2.1 ICommand接口 243 10.2.2 RoutedCommand类 244 10.2.3 RoutedUICommand类 245 10.2.4 命令库 245 10.3 执行命令 246 10.3.1 命令源 246 10.3.2 命令绑定 247 10.3.3 使用多命令源 249 10.3.4 微调命令文本 250 10.3.5 直接调用命令 251 10.3.6 禁用命令 252 10.3.7 具有内置命令的控件 253 10.4 高级命令 255 10.4.1 自定义命令 255 10.4.2 在不同的位置使用 相同的命令 257 10.4.3 使用命令参数 259 10.4.4 跟踪和翻转命令 259 10.5 结束语 263 第11章 资源 264 11.1 程序集资源 264 11.1.1 添加资源 264 11.1.2 检索资源 266 11.1.3 pack URI 267 11.1.4 内容文件 268 11.2 本地化 269 11.2.1 构建本地化用户界面 269 11.2.2 使应用程序为本地化 做好准备 270 11.2.3 翻译过程 271 11.3 对象资源 276 11.3.1 资源集合 276 11.3.2 资源层次 277 11.3.3 静态资源和动态资源 279 11.3.4 非共享资源 280 11.3.5 通过代码访问资源 280 11.3.6 应用程序资源 281 11.3.7 系统资源 281 11.3.8 使用资源字典组织资源 283 11.3.9 在程序集之间共享资源 284 11.4 结束语 287 第12章 样式 288 12.1 样式基础 288 12.1.1 创建样式对象 291 12.1.2 设置属性 292 12.1.3 关联事件处理程序 293 12.1.4 多层样式 294 12.1.5 通过类型自动应用样式 296 12.2 触发器 297 12.2.1 简单触发器 297 12.2.2 事件触发器 299 12.3 结束语 301 第13章 形状、变换和画刷 302 13.1 理解形状 302 13.1.1 Shape类 303 13.1.2 矩形和椭圆 304 13.1.3 改变形状的尺寸和 放置形状 305 13.1.4 直线 309 13.1.5 折线 310 13.1.6 多边形 311 13.1.7 直线线帽和直线交点 313 13.1.8 点划线 314 13.1.9 像素对齐 315 13.2 变换 316 13.2.1 变换形状 317 13.2.2 变换元素 318 13.3 更好的画刷 319 13.3.1 LinearGradientBrush画刷 320 13.3.2 RadialGradientBrush画刷 322 13.3.3 ImageBrush画刷 323 13.3.4 平铺的ImageBrush画刷 325 13.3.5 VisualBrush画刷 327 13.3.6 透明掩码 328 13.4 位图效果 330 13.4.1 模糊效果 331 13.4.2 斜面边缘效果 331 13.4.3 浮雕边缘效果 332 13.4.4 光环和阴影 332 13.5 结束语 334 第14章 图形、图画和可视化对象 335 14.1 路径和图形 335 14.1.1 直线、矩形和椭圆图形 336 14.1.2 使用GeometryGroup 组合形状 337 14.1.3 使用CombinedGeometry 融合图形 339 14.1.4 使用PathGeometry绘制曲线 和直线 341 14.1.5 微语言图形 345 14.1.6 使用图形进行剪裁 347 14.2 图画 348 14.2.1 显示图画 350 14.2.2 导出插图 352 14.3 可视化对象 353 14.3.1 绘制可视化对象 354 14.3.2 在元素中包装可视化对象 355 14.3.3 命中测试 358 14.3.4 复杂的命中测试 360 14.4 结束语 363 第15章 控件模板 364 15.1 理解逻辑树和可视化树 364 15.2 理解模板 369 15.2.1 修饰类 371 15.2.2 剖析控件 372 15.3 创建控件模板 375 15.3.1 简单按钮模板 375 15.3.2 模板绑定 376 15.3.3 模板触发器 378 15.4 组织模板资源 380 15.4.1 分解按钮控件的模板 381 15.4.2 通过样式应用模板 383 15.4.3 自动应用模板 384 15.4.4 由用户选择的皮肤 385 15.5 构建更复杂的模板 387 15.5.1 多部分模板 387 15.5.2 ItemsControl控件中的 控件模板 388 15.5.3 修改滚动条 390 15.5.4 创建自定义窗口 394 15.5.5 SimpleStyle示例项目 398 15.6 结束语 400 第16章 数据绑定 401 16.1 数据绑定基础 401 16.1.1 绑定到元素的属性 401 16.1.2 使用代码创建绑定 404 16.1.3 多绑定 405 16.1.4 绑定方向 408 16.1.5 绑定更新 410 16.1.6 绑定到非元素对象 411 16.2 使用自定义对象绑定 到数据库 414 16.2.1 构建数据访问组件 414 16.2.2 构建数据对象 417 16.2.3 显示绑定对象 418 16.2.4 更新数据库 419 16.2.5 更改通知 420 16.3 绑定到对象集合 422 16.3.1 显示和编辑集合元素 422 16.3.2 插入和移除集合元素 425 16.3.3 绑定到ADO.NET对象 426 16.3.4 绑定到LINQ表达式 428 16.4 数据转换 430 16.4.1 使用值转换器格式化 字符串 431 16.4.2 使用值转换器创建对象 434 16.4.3 应用条件格式化 436 16.4.4 评估多个属性 438 16.5 验证 439 16.5.1 在数据对象中进行验证 439 16.5.2 自定义验证规则 443 16.5.3 响应验证错误 445 16.5.4 获取异常列表 445 16.5.5 显示不同的错误指示符号 446 16.6 结束语 449 第17章 数据模板、数据视图 和数据提供者 451 17.1 数据绑定回顾 451 17.2 数据模板 452 17.2.1 分离和重用模板 454 17.2.2 更高级的模板 455 17.2.3 改变模板 457 17.2.4 模板选择器 458 17.2.5 模板与选择 462 17.2.6 样式选择器 466 17.2.7 改变元素布局 468 17.3 数据视图 469 17.3.1 检索视图对象 470 17.3.2 过滤集合 470 17.3.3 过滤DataTable对象 473 17.3.4 排序 474 17.3.5 分组 475 17.3.6 声明式地创建视图 478 17.3.7 视图导航 480 17.4 数据提供者 483 17.4.1 ObjectDataProvider 484 17.4.2 XmlDataProvider 486 17.5 结束语 488 第18章 列表、树、工具条和菜单 489 18.1 ItemsControl类 489 18.1.1 ComboBox控件 492 18.1.2 包含复选框或单选 按钮的ListBox控件 495 18.2 ListView控件 497 18.2.1 使用GirdView视图创建列 499 18.2.2 改变列的尺寸 500 18.2.3 单元格模板 500 18.2.4 创建自定义视图 503 18.3 TreeView控件 510 18.3.1 使用数据绑定的TreeView 控件 511 18.3.2 将DataSet对象绑定 到树视图 514 18.3.3 即时节点创建 515 18.4 菜单 518 18.4.1 Menu类 518 18.4.2 菜单项 519 18.4.3 ContextMenu类 520 18.4.4 菜单分隔条 521 18.5 工具条和状态栏 522 18.5.1 ToolBar控件 522 18.5.2 StatusBar控件 525 18.6 结束语 526 第19章 文档 527 19.1 理解文档 527 19.2 流文档 528 19.2.1 流内容元素 529 19.2.2 格式化流内容元素 530 19.2.3 创建简单的流文档 532 19.2.4 块级别元素 533 19.2.5 内联级别元素 538 19.2.6 通过代码与元素进行交互 543 19.2.7 调整文本 547 19.3 只读流文档包容器 548 19.3.1 缩放 549 19.3.2 页面和列 549 19.3.3 从文件加载文档 552 19.3.4 打印 552 19.4 编辑流文档 553 19.4.1 加载文件 553 19.4.2 保存文件 555 19.4.3 格式化选择的文本 556 19.4.4 获取单个单词 558 19.5 固定文档 559 19.6 批注 561 19.6.1 批注类 562 19.6.2 启用批注服务 562 19.6.3 创建批注 563 19.6.4 检查批注 567 19.6.5 响应批注更改 569 19.6.6 在固定文档中保存批注 570 19.6.7 自定义便笺外观 571 19.7 结束语 572 第20章 打印 573 20.1 基本打印 573 20.1.1 打印元素 574 20.1.2 变换打印输出 576 20.1.3 打印不显示的元素 578 20.1.4 打印文档 579 20.1.5 在文档打印输出中 控制页面 582 20.2 自定义打印 584 20.2.1 使用可视化层中的类 进行打印 584 20.2.2 自定义多页打印 587 20.3 打印设置和管理 592 20.3.1 保存打印设置 592 20.3.2 打印页面范围 593 20.3.3 管理打印队列 593 20.4 通过XPS进行打印 596 20.4.1 为打印预览创建XPS文档 597 20.4.2 通过XPS直接打印 到打印机 598 20.4.3 异步打印 598 20.5 结束语 599 第21章 动画 600 21.1 理解WPF动画 600 21.1.1 基于时间的动画 600 21.1.2 基于属性的动画 601 21.2 基本动画 602 21.2.1 Animation类 602 21.2.2 使用代码创建动画 605 21.2.3 同时发生的动画 609 21.2.4 动画生命期 610 21.2.5 Timeline类 611 21.3 声明式动画和故事板 614 21.3.1 故事板 614 21.3.2 事件触发器 615 21.3.3 重叠动画 619 21.3.4 同时发生的动画 620 21.3.5 控制播放 620 21.3.6 监视动画进度 624 21.3.7 期望的帧速率 626 21.4 动画类型回顾 628 21.4.1 使用动画改变变换 629 21.4.2 使用动画改变画刷 633 21.4.3 关键帧动画 635 21.4.4 基于路径的动画 638 21.4.5 基于帧的动画 640 21.5 结束语 644 第22章 声音和视频 645 22.1 播放WAV音频 645 22.1.1 SoundPlayer类 646 22.1.2 SoundPlayerAction类 647 22.1.3 系统声音 648 22.2 MediaPlayer类 648 22.3 MediaElement类 650 22.3.1 使用代码播放音频 650 22.3.2 处理错误 651 22.3.3 使用触发器播放音频 652 22.3.4 播放多个声音 654 22.3.5 改变音量、平衡、速度 以及播放位置 655 22.3.6 将动画同步到音频 657 22.3.7 播放视频 658 22.3.8 视频效果 659 22.4 语音 661 22.4.1 语音合成 662 22.4.2 语音识别 663 22.5 结束语 665 第23章 3D绘图 666 23.1 3D绘图基础 666 23.1.1 视口 667 23.1.2 3D对象 667 23.1.3 摄像机 674 23.2 深入研究3D绘图 678 23.2.1 着色和法线 679 23.2.2 更加复杂的形状 682 23.2.3 Model3DGroup集合 683 23.2.4 使用材质 684 23.2.5 纹理映射 686 23.3 交互和动画 690 23.3.1 变换 690 23.3.2 旋转 691 23.3.3 飞过 692 23.3.4 跟踪球 694 23.3.5 命中测试 696 23.3.6 3D表面上的2D元素 700 23.4 结束语 702 第24章 自定义元素 704 24.1 理解WPF中的 自定义元素 705 24.2 构建基本的用户控件 707 24.2.1 定义依赖项属性 707 24.2.2 定义路由事件 710 24.2.3 添加标记 711 24.2.4 使用控件 713 24.2.5 命令支持 713 24.2.6 深入分析用户控件 716 24.3 无外观控件 717 24.3.1 修改颜色拾取器的代码 717 24.3.2 修改颜色拾取器的标记 718 24.3.3 流线化控件模板 720 24.3.4 特定主题样式和默认样式 722 24.4 扩展已有控件 724 24.4.1 理解掩码编辑控件 724 24.4.2 屏蔽语法 725 24.4.3 MaskedTextProvider类 726 24.4.4 实现一个WPF屏蔽文本框 726 24.4.5 改进MaskedTextBox控件 730 24.5 自定义面板 731 24.5.1 两步布局处理 732 24.5.2 Canvas面板克隆 734 24.5.3 更好的换行面板 735 24.6 自定义绘图元素 738 24.6.1 OnRender( )方法 739 24.6.2 评估自定义绘图 740 24.6.3 自定义绘图元素 741 24.6.4 自定义装饰元素 743 24.7 结束语 744 第25章 与Windows窗体的互操作 745 25.1 访问互操作性 745 25.2 混合窗口和窗体 748 25.2.1 为WPF应用程序添加窗体 748 25.2.2 为Windows窗体应用程序 添加WPF窗口 748 25.2.3 显示模态窗口和窗体 749 25.2.4 显示非模态窗口和窗体 749 25.2.5 Windows窗体控件的 可视化风格 750 25.2.6 不需要互操作性的 Windows窗体类 750 25.3 创建具有混合内容的窗口 754 25.3.1 WPF和Windows 窗体“空域” 755 25.3.2 在WPF中宿主Windows 窗体控件 756 25.3.3 WPF和Windows窗体 用户控件 758 25.3.4 在Windows窗体中宿主 WPF控件 759 25.3.5 访问键、助记码和焦点 761 25.3.6 属性映射 762 25.4 结束语 764 第26章 多线程和插件 765 26.1 多线程 765 26.1.1 Dispatcher类 766 26.1.2 DispatcherObject类 766 26.1.3 BackgroundWorker类 769 26.2 应用程序插件 775 26.2.1 插件管线 776 26.2.2 使用插件的应用程序 780 26.2.3 与宿主交互 787 26.2.4 可视化插件 792 26.3 结束语 794 第27章 ClickOnce部署 795 27.1 应用程序部署 795 27.1.1 理解ClickOnce 796 27.1.2 ClickOnce安装模型 796 27.1.3 ClickOnce的局限 798 27.2 简单的ClickOnce发布 798 27.2.1 选择位置 799 27.2.2 部署文件 803 27.2.3 安装ClickOnce应用程序 803 27.2.4 更新ClickOnce应用程序 805 27.3 ClickOnce选项 805 27.3.1 发布版本 806 27.3.2 更新策略 807 27.3.3 发布选项 808 27.4 结束语 809
397KB
PrivacyDefender-v7.0.2z
2010-09-07Privacy Defender 是一款能够真正在不重启机子的情况下,擦除受系统保护的 index.dat 文件内容的软件。这也是绝大多数 Internet 清除软件所不具有的能力。目前还没有发现有哪个软件能够做到这点。(也许是孤陋寡闻了:P) 软件的版本很乱很乱,这个版本是从主页下载的版本,应该是2005.4.20的版本,汉化时顺便修正了原软件对回收站内容的错误提示,修正原软件的一个快捷键的问题。 软件功能比较简单, 1、擦除缓存及缓存 index.dat 2、擦除Cookies 及 Cookies index.dat 3、擦除历史记录及历史记录 index.dat 4、清除地址栏列表、IE 收藏夹、最近文件列表 5、清空临时目录、回收站 6、清除 MediaPlayer 最近文件记录、清除 Real One 最近文件记录 建议配合其它清除程序使用。 软件有使用时间限制,不方便注册而又偶尔使用这个软件的朋友,可以到期后运行一下“计数清零.reg”,算作权宜之计。如果觉得这个软件很好,并且打算一直使用下去,请务必在有条件的情况下注册支持作者。
50.0MB
WPF编程宝典 part1
2015-07-20第Ⅰ部分 基础知识 第1章 WPF概述 3 1.1 Windows图形演化 3 1.1.1 DirectX:新的图形引擎 4 1.1.2 硬件加速与WPF 4 1.2 WPF:高级API 4 1.3 分辨率无关性 5 1.3.1 WPF单位 6 1.3.2 系统DPI 7 1.3.3 位图和矢量图形 9 1.4 WPF体系结构 10 1.5 WPF 4.5 13 1.5.1 WPF工具包 14 1.5.2 Visual Studio 2012 14 1.6 小结 16 第2章 XAML 17 2.1 理解XAML 17 2.1.1 WPF之前的图形用户界面 17 2.1.2 XAML变体 19 2.1.3 XAML编译 19 2.2 XAML基础 20 2.2.1 XAML名称空间 21 2.2.2 代码隐藏类 22 2.3 XAML中的属性和事件 24 2.3.1 简单属性与类型转换器 25 2.3.2 复杂属性 26 2.3.3 标记扩展 28 2.3.4 附加属性 29 2.3.5 嵌套元素 30 2.3.6 特殊字符与空白 32 2.3.7 事件 34 2.3.8 完整的Eight Ball Answer示例 35 2.4 使用其他名称空间中的类型 36 2.5 加载和编译XAML 38 2.5.1 只使用代码 38 2.5.2 使用代码和未经编译的XAML 40 2.5.3 使用代码和编译过的XAML 42 2.5.4 只使用XAML 44 2.6 小结 45 第3章 布局 47 3.1 理解WPF中的布局 47 3.1.1 WPF布局原则 47 3.1.2 布局过程 48 3.1.3 布局容器 48 3.2 使用StackPanel面板进行简单 布局 50 3.2.1 布局属性 52 3.2.2 对齐方式 52 3.2.3 边距 53 3.2.4 最小尺寸、最大尺寸以及显式地 设置尺寸 54 3.2.5 Border控件 56 3.3 WrapPanel和DockPanel面板 57 3.3.1 WrapPanel面板 57 3.3.2 DockPanel面板 58 3.3.3 嵌套布局容器 59 3.4 Grid面板 60 3.4.1 调整行和列 63 3.4.2 布局舍入 64 3.4.3 跨越行和列 65 3.4.4 分割窗口 66 3.4.5 共享尺寸组 69 3.4.6 UniformGrid面板 72 3.5 使用Canvas面板进行基于 坐标的布局 72 3.5.1 Z顺序 73 3.5.2 lnkCanvas元素 74 3.6 布局示例 76 3.6.1 列设置 76 3.6.2 动态内容 77 3.6.3 组合式用户界面 79 3.7 小结 80 第4章 依赖项属性 83 4.1 理解依赖项属性 83 4.1.1 定义依赖项属性 84 4.1.2 注册依赖项属性 84 4.1.3 添加属性包装器 86 4.1.4 WPF使用依赖项属性的方式 87 4.1.5 共享的依赖项属性 88 4.1.6 附加的依赖项属性 88 4.2 属性验证 90 4.2.1 验证回调 90 4.2.2 强制回调 91 4.3 小结 93 第5章 路由事件 95 5.1 理解路由事件 95 5.1.1 定义、注册和封装路由事件 95 5.1.2 共享路由事件 96 5.1.3 引发路由事件 96 5.1.4 处理路由事件 97 5.2 事件路由 99 5.2.1 RoutedEventArgs类 100 5.2.2 冒泡路由事件 100 5.2.3 处理挂起的事件 103 5.2.4 附加事件 103 5.2.5 隧道路由事件 105 5.3 WPF事件 106 5.3.1 生命周期事件 106 5.3.2 输入事件 108 5.4 键盘输入 108 5.4.1 处理按键事件 109 5.4.2 焦点 111 5.4.3 获取键盘状态 112 5.5 鼠标输入 113 5.5.1 鼠标单击 115 5.5.2 捕获鼠标 115 5.5.3 鼠标拖放 116 5.6 多点触控输入 118 5.6.1 多点触控的输入层次 119 5.6.2 原始触控 119 5.6.3 操作 122 5.6.4 惯性 124 5.7 小结 125 第Ⅱ部分 进一步研究WPF 第6章 控件 129 6.1 控件类 129 6.1.1 背景画刷和前景画刷 130 6.1.2 字体 132 6.1.3 鼠标光标 136 6.2 内容控件 137 6.2.1 Content属性 138 6.2.2 对齐内容 140 6.2.3 WPF内容原则 141 6.2.4 标签 142 6.2.5 按钮 142 6.2.6 工具提示 145 6.3 特殊容器 151 6.3.1 ScrollViewer 152 6.3.2 GroupBox 154 6.3.3 TabItem 154 6.3.4 Expander 155 6.4 文本控件 158 6.4.1 多行文本 158 6.4.2 选择文本 159 6.4.3 拼写检查 160 6.4.4 PasswordBox 162 6.5 列表控件 162 6.5.1 ListBox 163 6.5.2 ComboBox 166 6.6 基于范围的控件 166 6.6.1 Slider 167 6.6.2 ProgressBar 168 6.7 日期控件 169 6.8 小结 171 第7章 Application类 173 7.1 应用程序的生命周期 173 7.1.1 创建Application对象 173 7.1.2 派生自定义的Application类 174 7.1.3 应用程序的关闭方式 176 7.1.4 应用程序事件 177 7.2 Application类的任务 179 7.2.1 显示初始界面 179 7.2.2 处理命令行参数 180 7.2.3 访问当前Application对象 181 7.2.4 在窗口之间进行交互 182 7.2.5 单实例应用程序 184 7.3 程序集资源 189 7.3.1 添加资源 189 7.3.2 检索资源 190 7.3.3 pack URI 192 7.3.4 内容文件 193 7.4 本地化 193 7.4.1 构建能够本地化的用户界面 194 7.4.2 使应用程序为本地化做好准备 194 7.4.3 管理翻译过程 195 7.5 小结 200 第8章 元素绑定 201 8.1 将元素绑定到一起 201 8.1.1 绑定表达式 202 8.1.2 绑定错误 203 8.1.3 绑定模式 203 8.1.4 使用代码创建绑定 205 8.1.5 使用代码检索绑定 206 8.1.6 多绑定 207 8.1.7 绑定更新 210 8.1.8 绑定延迟 211 8.2 绑定到非元素对象 211 8.2.1 Source属性 212 8.2.2 RelativeSource属性 212 8.2.3 DataContext属性 213 8.3 小结 214 第9章 命令 215 9.1 理解命令 215 9.2 WPF命令模型 216 9.2.1 ICommand接口 217 9.2.2 RoutedCommand类 217 9.2.3 RoutedUICommand类 218 9.2.4 命令库 219 9.3 执行命令 220 9.3.1 命令源 220 9.3.2 命令绑定 221 9.3.3 使用多命令源 223 9.3.4 微调命令文本 224 9.3.5 直接调用命令 224 9.3.6 禁用命令 225 9.3.7 具有内置命令的控件 227 9.4 高级命令 229 9.4.1 自定义命令 229 9.4.2 在不同位置使用相同的命令 230 9.4.3 使用命令参数 232 9.4.4 跟踪和翻转命令 233 9.5 小结 237 第10章 资源 239 10.1 资源基础 239 10.1.1 资源集合 239 10.1.2 资源的层次 241 10.1.3 静态资源和动态资源 242 10.1.4 非共享资源 243 10.1.5 通过代码访问资源 244 10.1.6 应用程序资源 244 10.1.7 系统资源 245 10.2 资源字典 246 10.2.1 创建资源字典 246 10.2.2 使用资源字典 247 10.2.3 在程序集之间共享资源 248 10.3 小结 251 第11章 样式和行为 253 11.1 样式基础 253 11.1.1 创建样式对象 256 11.1.2 设置属性 257 11.1.3 关联事件处理程序 258 11.1.4 多层样式 259 11.1.5 通过类型自动应用样式 261 11.2 触发器 262 11.2.1 简单触发器 262 11.2.2 事件触发器 264 11.3 行为 266 11.3.1 获取行为支持 266 11.3.2 理解行为模型 267 11.3.3 创建行为 268 11.3.4 使用行为 270 11.3.5 Blend中的设计时行为支持 271 11.4 小结 271 第Ⅲ部分 图画和动画 第12章 形状、画刷和变换 275 12.1 理解形状 275 12.1.1 Shape类 276 12.1.2 矩形和椭圆 277 12.1.3 改变形状的尺寸和放置形状 278 12.1.4 使用Viewbox控件缩放形状 280 12.1.5 直线 282 12.1.6 折线 283 12.1.7 多边形 284 12.1.8 直线线帽和直线交点 286 12.1.9 点划线 287 12.1.10 像素对齐 288 12.2 画刷 289 12.2.1 SolidColorBrush画刷 290 12.2.2 LinearGradientBrush画刷 290 12.2.3 RadialGradientBrush画刷 292 12.2.4 ImageBrush画刷 294 12.2.5 平铺的ImageBrush画刷 295 12.2.6 VisualBrush画刷 297 12.2.7 BitmapCacheBrush画刷 298 12.3 变换 299 12.3.1 变换形状 300 12.3.2 变换元素 302 12.4 透明 303 12.4.1 使元素半透明 303 12.4.2 透明掩码 304 12.5 小结 306 第13章 几何图形和图画 307 13.1 路径和几何图形 307 13.1.1 直线、矩形和椭圆图形 308 13.1.2 使用GeometryGroup 组合形状 309 13.1.3 使用CombinedGeometry融合 几何图形 311 13.1.4 使用PathGeometry绘制曲线和 直线 313 13.1.5 微语言几何图形 318 13.1.6 使用几何图形进行剪裁 319 13.2 图画 320 13.2.1 显示图画 322 13.2.2 导出插图 324 13.3 小结 326 第14章 效果和可视化对象 327 14.1 可视化对象 327 14.1.1 绘制可视化对象 328 14.1.2 在元素中封装可视化对象 329 14.1.3 命中测试 332 14.1.4 复杂的命中测试 334 14.2 效果 338 14.2.1 BlurEffect类 338 14.2.2 DropShadowEffect类 339 14.2.3 ShaderEffect类 340 14.3 WriteableBitmap类 342 14.3.1 生成位图 342 14.3.2 写入WriteableBitmap对象 343 14.3.3 更高效的像素写入 345 14.4 小结 347 第15章 动画基础 349 15.1 理解WPF动画 349 15.1.1 基于时间的动画 349 15.1.2 基于属性的动画 350 15.2 基本动画 351 15.2.1 Animation类 351 15.2.2 使用代码创建动画 353 15.2.3 同时发生的动画 358 15.2.4 动画的生命周期 358 15.2.5 Timeline类 359 15.3 故事板 362 15.3.1 故事板 363 15.3.2 事件触发器 363 15.3.3 重叠动画 366 15.3.4 同步的动画 367 15.3.5 控制播放 367 15.3.6 监视动画进度 371 15.4 动画缓动 373 15.4.1 使用缓动函数 373 15.4.2 在动画开始时应用缓动与在动画 结束时应用缓动 374 15.4.3 缓动函数类 375 15.4.4 创建自定义缓动函数 377 15.5 动画性能 379 15.5.1 期望的帧率 380 15.5.2 位图缓存 382 15.6 小结 384 第16章 高级动画 385 16.1 动画类型回顾 385 16.1.1 动态变换 386 16.1.2 动态改变画刷 390 16.1.3 动态改变像素着色器 392 16.2 关键帧动画 393 16.2.1 离散的关键帧动画 395 16.2.2 缓动关键帧 395 16.2.3 样条关键帧动画 396 16.3 基于路径的动画 397 16.4 基于帧的动画 399 16.5 使用代码创建故事板 402 16.5.1 创建主窗口 403 16.5.2 创建Bomb用户控件 405 16.5.3 投弹 406 16.5.4 拦截炸弹 409 16.5.5 统计炸弹和清理工作 410 16.6 小结 412 第Ⅳ部分 模板和自定义元素 第17章 控件模板 417 17.1 理解逻辑树和可视化树 417 17.2 理解模板 422 17.2.1 修饰类 424 17.2.2 剖析控件 426 17.3 创建控件模板 428 17.3.1 简单按钮 429 17.3.2 模板绑定 430 17.3.3 改变属性的触发器 431 17.3.4 使用动画的触发器 434 17.4 组织模板资源 435 17.4.1 分解按钮控件模板 436 17.4.2 通过样式应用模板 438 17.4.3 自动应用模板 439 17.4.4 由用户选择的皮肤 440 17.5 构建更复杂的模板 442 17.5.1 嵌套的模板 443 17.5.2 修改滚动条 445 17.5.3 控件模板示例 450 17.6 可视化状态 451 17.7 小结 452 第18章 自定义元素 453 18.1 理解WPF中的自定义元素 454 18.2 构建基本的用户控件 456 18.2.1 定义依赖项属性 456 18.2.2 定义路由事件 459 18.2.3 添加标记 460 18.2.4 使用控件 462 18.2.5 命令支持 462 18.2.6 深入分析用户控件 465 18.3 创建无外观控件 466 18.3.1 修改颜色拾取器的代码 466 18.3.2 修改颜色拾取器的标记 467 18.3.3 精简控件模板 469 18.4 支持可视化状态 472 18.4.1 开始编写FlipPanel类 473 18.4.2 选择部件和状态 475 18.4.3 默认控件模板 476 18.4.4 使用FlipPanel控件 482 18.4.5 使用不同的控件模板 483 18.5 创建自定义面板 485 18.5.1 两步布局过程 485 18.5.2 Canvas面板的副本 488 18.5.3 更好的WrapPanel面板 489 18.6 自定义绘图元素 492 18.6.1 OnRender( )方法 493 18.6.2 评估自定义绘图 494 18.6.3 自定义绘图元素 495 18.6.4 创建自定义装饰元素 497 18.7 小结 498 第Ⅴ部分 数据 第19章 数据绑定 501 19.1 使用自定义对象绑定到 数据库 501 19.1.1 构建数据访问组件 502 19.1.2 构建数据对象 504 19.1.3 显示绑定对象 505 19.1.4 更新数据库 508 19.1.5 更改通知 508 19.2 绑定到对象集合 510 19.2.1 显示和编辑集合项 510 19.2.2 插入和移除集合项 513 19.2.3 绑定到ADO.NET对象 514 19.2.4 绑定到LINQ表达式 515 19.3 提高大列表的性能 518 19.3.1 虚拟化 518 19.3.2 项容器再循环 519 19.3.3 缓存长度 519 19.3.4 延迟滚动 520 19.4 验证 521 19.4.1 在数据对象中进行验证 521 19.4.2 自定义验证规则 526 19.4.3 响应验证错误 528 19.4.4 获取错误列表 529 19.4.5 显示不同的错误指示符号 530 19.4.6 验证多个值 533 19.5 数据提供者 535 19.5.1 ObjectDataProvider 536 19.5.2 XmlDataProvider 539 19.6 小结 541 第20章 格式化绑定的数据 543 20.1 数据绑定回顾 543 20.2 数据转换 544 20.2.1 使用StringFormat属性 545 20.2.2 值转换器简介 546 20.2.3 使用值转换器设置字符串 的格式 547 20.2.4 使用值转换器创建对象 549 20.2.5 应用条件格式化 551 20.2.6 评估多个属性 552 20.3 列表控件 554 20.4 列表样式 555 20.4.1 ItemContainerStyle 556 20.4.2 包含复选框或单选按钮的ListBox 控件 557 20.4.3 交替条目样式 559 20.4.4 样式选择器 561 20.5 数据模板 564 20.5.1 分离和重用模板 566 20.5.2 使用更高级的模板 567 20.5.3 改变模板 569 20.5.4 模板选择器 570 20.5.5 模板与选择 573 20.5.6 改变项的布局 577 20.6 ComboBox控件 578 20.7 小结 581 第21章 数据视图 583 21.1 View对象 583 21.1.1 检索视图对象 584 21.1.2 视图导航 584 21.1.3 以声明方式创建视图 587 21.2 过滤、排序与分组 588 21.2.1 过滤集合 588 21.2.2 过滤DataTable对象 591 21.2.3 排序 592 21.2.4 分组 593 21.2.5 实时成型 598 21.3 小结 599 第22章 列表、树和网格 601 22.1 ListView控件 601 22.1.1 使用GirdView创建列 602 22.1.2 创建自定义视图 606 22.2 TreeView控件 613 22.2.1 创建数据绑定的TreeView 控件 614 22.2.2 将DataSet对象绑定到TreeView 控件 617 22.2.3 即时创建节点 618 22.3 DataGrid控件 621 22.3.1 改变列的尺寸与重新安排列 622 22.3.2 定义列 623 22.3.3 设置列的格式和样式 628 22.3.4 设置行的格式 629 22.3.5 显示行细节 630 22.3.6 冻结列 631 22.3.7 选择 632 22.3.8 排序 632 22.3.9 编辑 633 22.4 小结 635 第Ⅵ 窗口、页面和富控件 第23章 窗口 639 23.1 Window类 639 23.1.1 显示窗口 641 23.1.2 定位窗口 642 23.1.3 保存和还原窗口位置 642 23.2 窗口交互 644 23.2.1 窗口所有权 646 23.2.2 对话框模型 647 23.2.3 通用对话框 648 23.3 非矩形窗口 649 23.3.1 简单形状窗口 649 23.3.2 具有形状内容的透明窗口 651 23.3.3 移动形状窗口 653 23.3.4 改变形状窗口的尺寸 653 23.3.5 组合到一起:窗口的自定义控件 模板 655 23.4 Windows 7任务栏编程 658 23.4.1 使用跳转列表 659 23.4.2 改变任务栏图标和预览 663 23.5 小结 667 第24章 页面和导航 669 24.1 基于页面的导航 669 24.2 基于页面的界面 670 24.2.1 创建一个具有导航窗口的基于 页面的简单应用程序 670 24.2.2 Page类 672 24.2.3 超链接 673 24.2.4 在框架中驻留页面 675 24.2.5 在另一个页面中驻留页面 677 24.2.6 在Web浏览器中驻留页面 678 24.3 页面历史 678 24.3.1 深入分析WPF中的URI 678 24.3.2 导航历史 679 24.3.3 维护自定义的属性 681 24.4 导航服务 682 24.4.1 通过编程进行导航 682 24.4.2 导航事件 683 24.4.3 管理日志 684 24.4.4 向日志添加自定义项 685 24.4.5 使用页函数 689 24.5 XAML浏览器应用程序 692 24.5.1 创建XBAP应用程序 692 24.5.2 部署XBAP应用程序 693 24.5.3 更新XBAP应用程序 695 24.5.4 XBAP应用程序的安全性 695 24.5.5 完全信任的XBAP应用程序 696 24.5.6 组合XBAP/独立应用程序 697 24.5.7 为不同的安全级别编写代码 697 24.5.8 在网页中嵌入XBAP 应用程序 702 24.6 WebBrowser控件 702 24.6.1 导航到页面 703 24.6.2 构建DOM树 704 24.6.3 使用.NET代码为网页添加 脚本 706 24.7 小结 708 第25章 菜单、工具栏和功能区 709 25.1 菜单 709 25.1.1 Menu类 710 25.1.2 菜单项 710 25.1.3 ContextMenu类 712 25.1.4 菜单分隔条 713 25.2 工具栏和状态栏 714 25.2.1 ToolBar控件 714 25.2.2 StatusBar控件 717 25.3 功能区 718 25.3.1 添加功能区 719 25.3.2 应用程序菜单 720 25.3.3 选项卡、组与按钮 722 25.3.4 富工具提示 724 25.3.5 带有快捷键提示的键盘访问 725 25.3.6 改变功能区的大小 726 25.3.7 快速访问工具栏 729 25.4 小结 730 第26章 声音和视频 731 26.1 播放WAV音频 731 26.1.1 SoundPlayer类 731 26.1.2 SoundPlayerAction类 733 26.1.3 系统声音 733 26.2 MediaPlayer类 734 26.3 MediaElement类 735 26.3.1 使用代码播放音频 736 26.3.2 处理错误 737 26.3.3 使用触发器播放音频 737 26.3.4 播放多个声音 739 26.3.5 改变音量、平衡、速度以及 位置 740 26.3.6 将动画同步到音频 742 26.3.7 播放视频 744 26.3.8 视频效果 744 26.4 语音 747 26.4.1 语音合成 747 26.4.2 语音识别 749 26.5 小结 751 第27章 3D绘图 753 27.1 3D绘图基础 753 27.1.1 视口 754 27.1.2 3D对象 754 27.1.3 摄像机 761 27.2 深入研究3D绘图 765 27.2.1 着色和法线 766 27.2.2 更复杂的形状 769 27.2.3 Model3DGroup集合 769 27.2.4 使用材质 771 27.2.5 纹理映射 773 27.3 交互和动画 777 27.3.1 变换 777 27.3.2 旋转 778 27.3.3 飞过 779 27.3.4 跟踪球 781 27.3.5 命中测试 782 27.3.6 3D表面上的2D元素 786 27.4 小结 789 第Ⅶ部分 文档和打印 第28章 文档 793 28.1 理解文档 793 28.2 流文档 794 28.2.1 流内容元素 795 28.2.2 设置内容元素的格式 796 28.2.3 创建简单的流文档 797 28.2.4 块元素 799 28.2.5 内联元素 804 28.2.6 通过代码与元素进行交互 809 28.2.7 文本对齐 812 28.3 只读流文档容器 813 28.3.1 缩放 814 28.3.2 创建页面和列 815 28.3.3 从文件加载文档 817 28.3.4 打印 818 28.4 编辑流文档 818 28.4.1 加载文件 819 28.4.2 保存文件 821 28.4.3 设置所选文本的格式 822 28.4.4 获取单个单词 824 28.5 固定文档 825 28.6 批注 826 28.6.1 批注类 827 28.6.2 启用批注服务 828 28.6.3 创建批注 829 28.6.4 检查批注 832 28.6.5 响应批注更改 835 28.6.6 在固定文档中保存批注 835 28.6.7 自定义便签的外观 836 28.7 小结 837 第29章 打印 839 29.1 基本打印 839 29.1.1 打印元素 840 29.1.2 变换打印输出 842 29.1.3 打印不显示的元素 844 29.1.4 打印文档 845 29.1.5 在文档打印输出中控制页面 848 29.2 自定义打印 851 29.2.1 使用可视化层中的类 进行打印 851 29.2.2 自定义多页打印 854 29.3 打印设置和管理 859 29.3.1 保存打印设置 859 29.3.2 打印页面范围 859 29.3.3 管理打印队列 860 29.4 通过XPS进行打印 863 29.4.1 为打印预览创建XPS文档 863 29.4.2 写入内存的XPS文档 864 29.4.3 通过XPS直接打印到 打印机 865 29.4.4 异步打印 866 29.5 小结 866 第Ⅷ部分 其他主题 第30章 与Windows窗体进行交互 869 30.1 访问互操作性 869 30.2 混合窗口和窗体 870 30.2.1 为WPF应用程序添加窗体 870 30.2.2 为Windows窗体应用程序 添加WPF窗口 870 30.2.3 显示模态窗口和窗体 871 30.2.4 显示非模态窗口和窗体 871 30.2.5 启用Windows窗体控件的 可视化风格 872 30.3 创建具有混合内容的窗口 872 30.3.1 WPF和Windows窗体 “空域” 873 30.3.2 在WPF中驻留Windows 窗体控件 874 30.3.3 使用WPF和Windows窗体 用户控件 876 30.3.4 在Windows窗体中驻留WPF 控件 877 30.3.5 访问键、助记码和焦点 879 30.3.6 属性映射 880 30.4 小结 882 第31章 多线程 883 31.1 了解多线程模型 883 31.1.1 Dispatcher类 884 31.1.2 DispatcherObject类 884 31.2 BackgroundWorker类 887 31.2.1 简单的异步操作 887 31.2.2 创建BackgroundWorker 对象 888 31.2.3 运行BackgroundWorker 对象 889 31.2.4 跟踪进度 891 31.2.5 支持取消 893 31.3 小结 894 第32章 插件模型 895 32.1 在MAF和MEF两者间 进行选择 895 32.2 了解插件管道 896 32.2.1 管道的工作原理 897 32.2.2 插件文件夹结构 898 32.2.3 为使用插件模型准备 解决方案 899 32.3 创建使用插件模型的 应用程序 900 32.3.1 协定 901 32.3.2 插件视图 901 32.3.3 插件 902 32.3.4 插件适配器 902 32.3.5 宿主视图 903 32.3.6 宿主适配器 904 32.3.7 宿主 904 32.3.8 更多插件 907 32.4 与宿主进行交互 908 32.5 可视化插件 912 32.6 小结 915 第33章 ClickOnce部署 917 33.1 理解应用程序部署 917 33.1.1 ClickOnce安装模型 918 33.1.2 ClickOnce部署的局限性 919 33.2 简单的ClickOnce发布 920 33.2.1 设置发布者和产品 920 33.2.2 启动发布向导 922 33.2.3 理解部署文件的结构 926 33.2.4 安装ClickOnce应用程序 926 33.2.5 更新ClickOnce应用程序 928 33.3 ClickOnce附加选项 928 33.3.1 发布版本 928 33.3.2 更新 929 33.3.3 文件关联 930 33.3.4 发布选项 931 33.4 小结 932
36.71MB
WPF编程宝典 part2
2015-07-20第Ⅰ部分 基础知识 第1章 WPF概述 3 1.1 Windows图形演化 3 1.1.1 DirectX:新的图形引擎 4 1.1.2 硬件加速与WPF 4 1.2 WPF:高级API 4 1.3 分辨率无关性 5 1.3.1 WPF单位 6 1.3.2 系统DPI 7 1.3.3 位图和矢量图形 9 1.4 WPF体系结构 10 1.5 WPF 4.5 13 1.5.1 WPF工具包 14 1.5.2 Visual Studio 2012 14 1.6 小结 16 第2章 XAML 17 2.1 理解XAML 17 2.1.1 WPF之前的图形用户界面 17 2.1.2 XAML变体 19 2.1.3 XAML编译 19 2.2 XAML基础 20 2.2.1 XAML名称空间 21 2.2.2 代码隐藏类 22 2.3 XAML中的属性和事件 24 2.3.1 简单属性与类型转换器 25 2.3.2 复杂属性 26 2.3.3 标记扩展 28 2.3.4 附加属性 29 2.3.5 嵌套元素 30 2.3.6 特殊字符与空白 32 2.3.7 事件 34 2.3.8 完整的Eight Ball Answer示例 35 2.4 使用其他名称空间中的类型 36 2.5 加载和编译XAML 38 2.5.1 只使用代码 38 2.5.2 使用代码和未经编译的XAML 40 2.5.3 使用代码和编译过的XAML 42 2.5.4 只使用XAML 44 2.6 小结 45 第3章 布局 47 3.1 理解WPF中的布局 47 3.1.1 WPF布局原则 47 3.1.2 布局过程 48 3.1.3 布局容器 48 3.2 使用StackPanel面板进行简单 布局 50 3.2.1 布局属性 52 3.2.2 对齐方式 52 3.2.3 边距 53 3.2.4 最小尺寸、最大尺寸以及显式地 设置尺寸 54 3.2.5 Border控件 56 3.3 WrapPanel和DockPanel面板 57 3.3.1 WrapPanel面板 57 3.3.2 DockPanel面板 58 3.3.3 嵌套布局容器 59 3.4 Grid面板 60 3.4.1 调整行和列 63 3.4.2 布局舍入 64 3.4.3 跨越行和列 65 3.4.4 分割窗口 66 3.4.5 共享尺寸组 69 3.4.6 UniformGrid面板 72 3.5 使用Canvas面板进行基于 坐标的布局 72 3.5.1 Z顺序 73 3.5.2 lnkCanvas元素 74 3.6 布局示例 76 3.6.1 列设置 76 3.6.2 动态内容 77 3.6.3 组合式用户界面 79 3.7 小结 80 第4章 依赖项属性 83 4.1 理解依赖项属性 83 4.1.1 定义依赖项属性 84 4.1.2 注册依赖项属性 84 4.1.3 添加属性包装器 86 4.1.4 WPF使用依赖项属性的方式 87 4.1.5 共享的依赖项属性 88 4.1.6 附加的依赖项属性 88 4.2 属性验证 90 4.2.1 验证回调 90 4.2.2 强制回调 91 4.3 小结 93 第5章 路由事件 95 5.1 理解路由事件 95 5.1.1 定义、注册和封装路由事件 95 5.1.2 共享路由事件 96 5.1.3 引发路由事件 96 5.1.4 处理路由事件 97 5.2 事件路由 99 5.2.1 RoutedEventArgs类 100 5.2.2 冒泡路由事件 100 5.2.3 处理挂起的事件 103 5.2.4 附加事件 103 5.2.5 隧道路由事件 105 5.3 WPF事件 106 5.3.1 生命周期事件 106 5.3.2 输入事件 108 5.4 键盘输入 108 5.4.1 处理按键事件 109 5.4.2 焦点 111 5.4.3 获取键盘状态 112 5.5 鼠标输入 113 5.5.1 鼠标单击 115 5.5.2 捕获鼠标 115 5.5.3 鼠标拖放 116 5.6 多点触控输入 118 5.6.1 多点触控的输入层次 119 5.6.2 原始触控 119 5.6.3 操作 122 5.6.4 惯性 124 5.7 小结 125 第Ⅱ部分 进一步研究WPF 第6章 控件 129 6.1 控件类 129 6.1.1 背景画刷和前景画刷 130 6.1.2 字体 132 6.1.3 鼠标光标 136 6.2 内容控件 137 6.2.1 Content属性 138 6.2.2 对齐内容 140 6.2.3 WPF内容原则 141 6.2.4 标签 142 6.2.5 按钮 142 6.2.6 工具提示 145 6.3 特殊容器 151 6.3.1 ScrollViewer 152 6.3.2 GroupBox 154 6.3.3 TabItem 154 6.3.4 Expander 155 6.4 文本控件 158 6.4.1 多行文本 158 6.4.2 选择文本 159 6.4.3 拼写检查 160 6.4.4 PasswordBox 162 6.5 列表控件 162 6.5.1 ListBox 163 6.5.2 ComboBox 166 6.6 基于范围的控件 166 6.6.1 Slider 167 6.6.2 ProgressBar 168 6.7 日期控件 169 6.8 小结 171 第7章 Application类 173 7.1 应用程序的生命周期 173 7.1.1 创建Application对象 173 7.1.2 派生自定义的Application类 174 7.1.3 应用程序的关闭方式 176 7.1.4 应用程序事件 177 7.2 Application类的任务 179 7.2.1 显示初始界面 179 7.2.2 处理命令行参数 180 7.2.3 访问当前Application对象 181 7.2.4 在窗口之间进行交互 182 7.2.5 单实例应用程序 184 7.3 程序集资源 189 7.3.1 添加资源 189 7.3.2 检索资源 190 7.3.3 pack URI 192 7.3.4 内容文件 193 7.4 本地化 193 7.4.1 构建能够本地化的用户界面 194 7.4.2 使应用程序为本地化做好准备 194 7.4.3 管理翻译过程 195 7.5 小结 200 第8章 元素绑定 201 8.1 将元素绑定到一起 201 8.1.1 绑定表达式 202 8.1.2 绑定错误 203 8.1.3 绑定模式 203 8.1.4 使用代码创建绑定 205 8.1.5 使用代码检索绑定 206 8.1.6 多绑定 207 8.1.7 绑定更新 210 8.1.8 绑定延迟 211 8.2 绑定到非元素对象 211 8.2.1 Source属性 212 8.2.2 RelativeSource属性 212 8.2.3 DataContext属性 213 8.3 小结 214 第9章 命令 215 9.1 理解命令 215 9.2 WPF命令模型 216 9.2.1 ICommand接口 217 9.2.2 RoutedCommand类 217 9.2.3 RoutedUICommand类 218 9.2.4 命令库 219 9.3 执行命令 220 9.3.1 命令源 220 9.3.2 命令绑定 221 9.3.3 使用多命令源 223 9.3.4 微调命令文本 224 9.3.5 直接调用命令 224 9.3.6 禁用命令 225 9.3.7 具有内置命令的控件 227 9.4 高级命令 229 9.4.1 自定义命令 229 9.4.2 在不同位置使用相同的命令 230 9.4.3 使用命令参数 232 9.4.4 跟踪和翻转命令 233 9.5 小结 237 第10章 资源 239 10.1 资源基础 239 10.1.1 资源集合 239 10.1.2 资源的层次 241 10.1.3 静态资源和动态资源 242 10.1.4 非共享资源 243 10.1.5 通过代码访问资源 244 10.1.6 应用程序资源 244 10.1.7 系统资源 245 10.2 资源字典 246 10.2.1 创建资源字典 246 10.2.2 使用资源字典 247 10.2.3 在程序集之间共享资源 248 10.3 小结 251 第11章 样式和行为 253 11.1 样式基础 253 11.1.1 创建样式对象 256 11.1.2 设置属性 257 11.1.3 关联事件处理程序 258 11.1.4 多层样式 259 11.1.5 通过类型自动应用样式 261 11.2 触发器 262 11.2.1 简单触发器 262 11.2.2 事件触发器 264 11.3 行为 266 11.3.1 获取行为支持 266 11.3.2 理解行为模型 267 11.3.3 创建行为 268 11.3.4 使用行为 270 11.3.5 Blend中的设计时行为支持 271 11.4 小结 271 第Ⅲ部分 图画和动画 第12章 形状、画刷和变换 275 12.1 理解形状 275 12.1.1 Shape类 276 12.1.2 矩形和椭圆 277 12.1.3 改变形状的尺寸和放置形状 278 12.1.4 使用Viewbox控件缩放形状 280 12.1.5 直线 282 12.1.6 折线 283 12.1.7 多边形 284 12.1.8 直线线帽和直线交点 286 12.1.9 点划线 287 12.1.10 像素对齐 288 12.2 画刷 289 12.2.1 SolidColorBrush画刷 290 12.2.2 LinearGradientBrush画刷 290 12.2.3 RadialGradientBrush画刷 292 12.2.4 ImageBrush画刷 294 12.2.5 平铺的ImageBrush画刷 295 12.2.6 VisualBrush画刷 297 12.2.7 BitmapCacheBrush画刷 298 12.3 变换 299 12.3.1 变换形状 300 12.3.2 变换元素 302 12.4 透明 303 12.4.1 使元素半透明 303 12.4.2 透明掩码 304 12.5 小结 306 第13章 几何图形和图画 307 13.1 路径和几何图形 307 13.1.1 直线、矩形和椭圆图形 308 13.1.2 使用GeometryGroup 组合形状 309 13.1.3 使用CombinedGeometry融合 几何图形 311 13.1.4 使用PathGeometry绘制曲线和 直线 313 13.1.5 微语言几何图形 318 13.1.6 使用几何图形进行剪裁 319 13.2 图画 320 13.2.1 显示图画 322 13.2.2 导出插图 324 13.3 小结 326 第14章 效果和可视化对象 327 14.1 可视化对象 327 14.1.1 绘制可视化对象 328 14.1.2 在元素中封装可视化对象 329 14.1.3 命中测试 332 14.1.4 复杂的命中测试 334 14.2 效果 338 14.2.1 BlurEffect类 338 14.2.2 DropShadowEffect类 339 14.2.3 ShaderEffect类 340 14.3 WriteableBitmap类 342 14.3.1 生成位图 342 14.3.2 写入WriteableBitmap对象 343 14.3.3 更高效的像素写入 345 14.4 小结 347 第15章 动画基础 349 15.1 理解WPF动画 349 15.1.1 基于时间的动画 349 15.1.2 基于属性的动画 350 15.2 基本动画 351 15.2.1 Animation类 351 15.2.2 使用代码创建动画 353 15.2.3 同时发生的动画 358 15.2.4 动画的生命周期 358 15.2.5 Timeline类 359 15.3 故事板 362 15.3.1 故事板 363 15.3.2 事件触发器 363 15.3.3 重叠动画 366 15.3.4 同步的动画 367 15.3.5 控制播放 367 15.3.6 监视动画进度 371 15.4 动画缓动 373 15.4.1 使用缓动函数 373 15.4.2 在动画开始时应用缓动与在动画 结束时应用缓动 374 15.4.3 缓动函数类 375 15.4.4 创建自定义缓动函数 377 15.5 动画性能 379 15.5.1 期望的帧率 380 15.5.2 位图缓存 382 15.6 小结 384 第16章 高级动画 385 16.1 动画类型回顾 385 16.1.1 动态变换 386 16.1.2 动态改变画刷 390 16.1.3 动态改变像素着色器 392 16.2 关键帧动画 393 16.2.1 离散的关键帧动画 395 16.2.2 缓动关键帧 395 16.2.3 样条关键帧动画 396 16.3 基于路径的动画 397 16.4 基于帧的动画 399 16.5 使用代码创建故事板 402 16.5.1 创建主窗口 403 16.5.2 创建Bomb用户控件 405 16.5.3 投弹 406 16.5.4 拦截炸弹 409 16.5.5 统计炸弹和清理工作 410 16.6 小结 412 第Ⅳ部分 模板和自定义元素 第17章 控件模板 417 17.1 理解逻辑树和可视化树 417 17.2 理解模板 422 17.2.1 修饰类 424 17.2.2 剖析控件 426 17.3 创建控件模板 428 17.3.1 简单按钮 429 17.3.2 模板绑定 430 17.3.3 改变属性的触发器 431 17.3.4 使用动画的触发器 434 17.4 组织模板资源 435 17.4.1 分解按钮控件模板 436 17.4.2 通过样式应用模板 438 17.4.3 自动应用模板 439 17.4.4 由用户选择的皮肤 440 17.5 构建更复杂的模板 442 17.5.1 嵌套的模板 443 17.5.2 修改滚动条 445 17.5.3 控件模板示例 450 17.6 可视化状态 451 17.7 小结 452 第18章 自定义元素 453 18.1 理解WPF中的自定义元素 454 18.2 构建基本的用户控件 456 18.2.1 定义依赖项属性 456 18.2.2 定义路由事件 459 18.2.3 添加标记 460 18.2.4 使用控件 462 18.2.5 命令支持 462 18.2.6 深入分析用户控件 465 18.3 创建无外观控件 466 18.3.1 修改颜色拾取器的代码 466 18.3.2 修改颜色拾取器的标记 467 18.3.3 精简控件模板 469 18.4 支持可视化状态 472 18.4.1 开始编写FlipPanel类 473 18.4.2 选择部件和状态 475 18.4.3 默认控件模板 476 18.4.4 使用FlipPanel控件 482 18.4.5 使用不同的控件模板 483 18.5 创建自定义面板 485 18.5.1 两步布局过程 485 18.5.2 Canvas面板的副本 488 18.5.3 更好的WrapPanel面板 489 18.6 自定义绘图元素 492 18.6.1 OnRender( )方法 493 18.6.2 评估自定义绘图 494 18.6.3 自定义绘图元素 495 18.6.4 创建自定义装饰元素 497 18.7 小结 498 第Ⅴ部分 数据 第19章 数据绑定 501 19.1 使用自定义对象绑定到 数据库 501 19.1.1 构建数据访问组件 502 19.1.2 构建数据对象 504 19.1.3 显示绑定对象 505 19.1.4 更新数据库 508 19.1.5 更改通知 508 19.2 绑定到对象集合 510 19.2.1 显示和编辑集合项 510 19.2.2 插入和移除集合项 513 19.2.3 绑定到ADO.NET对象 514 19.2.4 绑定到LINQ表达式 515 19.3 提高大列表的性能 518 19.3.1 虚拟化 518 19.3.2 项容器再循环 519 19.3.3 缓存长度 519 19.3.4 延迟滚动 520 19.4 验证 521 19.4.1 在数据对象中进行验证 521 19.4.2 自定义验证规则 526 19.4.3 响应验证错误 528 19.4.4 获取错误列表 529 19.4.5 显示不同的错误指示符号 530 19.4.6 验证多个值 533 19.5 数据提供者 535 19.5.1 ObjectDataProvider 536 19.5.2 XmlDataProvider 539 19.6 小结 541 第20章 格式化绑定的数据 543 20.1 数据绑定回顾 543 20.2 数据转换 544 20.2.1 使用StringFormat属性 545 20.2.2 值转换器简介 546 20.2.3 使用值转换器设置字符串 的格式 547 20.2.4 使用值转换器创建对象 549 20.2.5 应用条件格式化 551 20.2.6 评估多个属性 552 20.3 列表控件 554 20.4 列表样式 555 20.4.1 ItemContainerStyle 556 20.4.2 包含复选框或单选按钮的ListBox 控件 557 20.4.3 交替条目样式 559 20.4.4 样式选择器 561 20.5 数据模板 564 20.5.1 分离和重用模板 566 20.5.2 使用更高级的模板 567 20.5.3 改变模板 569 20.5.4 模板选择器 570 20.5.5 模板与选择 573 20.5.6 改变项的布局 577 20.6 ComboBox控件 578 20.7 小结 581 第21章 数据视图 583 21.1 View对象 583 21.1.1 检索视图对象 584 21.1.2 视图导航 584 21.1.3 以声明方式创建视图 587 21.2 过滤、排序与分组 588 21.2.1 过滤集合 588 21.2.2 过滤DataTable对象 591 21.2.3 排序 592 21.2.4 分组 593 21.2.5 实时成型 598 21.3 小结 599 第22章 列表、树和网格 601 22.1 ListView控件 601 22.1.1 使用GirdView创建列 602 22.1.2 创建自定义视图 606 22.2 TreeView控件 613 22.2.1 创建数据绑定的TreeView 控件 614 22.2.2 将DataSet对象绑定到TreeView 控件 617 22.2.3 即时创建节点 618 22.3 DataGrid控件 621 22.3.1 改变列的尺寸与重新安排列 622 22.3.2 定义列 623 22.3.3 设置列的格式和样式 628 22.3.4 设置行的格式 629 22.3.5 显示行细节 630 22.3.6 冻结列 631 22.3.7 选择 632 22.3.8 排序 632 22.3.9 编辑 633 22.4 小结 635 第Ⅵ 窗口、页面和富控件 第23章 窗口 639 23.1 Window类 639 23.1.1 显示窗口 641 23.1.2 定位窗口 642 23.1.3 保存和还原窗口位置 642 23.2 窗口交互 644 23.2.1 窗口所有权 646 23.2.2 对话框模型 647 23.2.3 通用对话框 648 23.3 非矩形窗口 649 23.3.1 简单形状窗口 649 23.3.2 具有形状内容的透明窗口 651 23.3.3 移动形状窗口 653 23.3.4 改变形状窗口的尺寸 653 23.3.5 组合到一起:窗口的自定义控件 模板 655 23.4 Windows 7任务栏编程 658 23.4.1 使用跳转列表 659 23.4.2 改变任务栏图标和预览 663 23.5 小结 667 第24章 页面和导航 669 24.1 基于页面的导航 669 24.2 基于页面的界面 670 24.2.1 创建一个具有导航窗口的基于 页面的简单应用程序 670 24.2.2 Page类 672 24.2.3 超链接 673 24.2.4 在框架中驻留页面 675 24.2.5 在另一个页面中驻留页面 677 24.2.6 在Web浏览器中驻留页面 678 24.3 页面历史 678 24.3.1 深入分析WPF中的URI 678 24.3.2 导航历史 679 24.3.3 维护自定义的属性 681 24.4 导航服务 682 24.4.1 通过编程进行导航 682 24.4.2 导航事件 683 24.4.3 管理日志 684 24.4.4 向日志添加自定义项 685 24.4.5 使用页函数 689 24.5 XAML浏览器应用程序 692 24.5.1 创建XBAP应用程序 692 24.5.2 部署XBAP应用程序 693 24.5.3 更新XBAP应用程序 695 24.5.4 XBAP应用程序的安全性 695 24.5.5 完全信任的XBAP应用程序 696 24.5.6 组合XBAP/独立应用程序 697 24.5.7 为不同的安全级别编写代码 697 24.5.8 在网页中嵌入XBAP 应用程序 702 24.6 WebBrowser控件 702 24.6.1 导航到页面 703 24.6.2 构建DOM树 704 24.6.3 使用.NET代码为网页添加 脚本 706 24.7 小结 708 第25章 菜单、工具栏和功能区 709 25.1 菜单 709 25.1.1 Menu类 710 25.1.2 菜单项 710 25.1.3 ContextMenu类 712 25.1.4 菜单分隔条 713 25.2 工具栏和状态栏 714 25.2.1 ToolBar控件 714 25.2.2 StatusBar控件 717 25.3 功能区 718 25.3.1 添加功能区 719 25.3.2 应用程序菜单 720 25.3.3 选项卡、组与按钮 722 25.3.4 富工具提示 724 25.3.5 带有快捷键提示的键盘访问 725 25.3.6 改变功能区的大小 726 25.3.7 快速访问工具栏 729 25.4 小结 730 第26章 声音和视频 731 26.1 播放WAV音频 731 26.1.1 SoundPlayer类 731 26.1.2 SoundPlayerAction类 733 26.1.3 系统声音 733 26.2 MediaPlayer类 734 26.3 MediaElement类 735 26.3.1 使用代码播放音频 736 26.3.2 处理错误 737 26.3.3 使用触发器播放音频 737 26.3.4 播放多个声音 739 26.3.5 改变音量、平衡、速度以及 位置 740 26.3.6 将动画同步到音频 742 26.3.7 播放视频 744 26.3.8 视频效果 744 26.4 语音 747 26.4.1 语音合成 747 26.4.2 语音识别 749 26.5 小结 751 第27章 3D绘图 753 27.1 3D绘图基础 753 27.1.1 视口 754 27.1.2 3D对象 754 27.1.3 摄像机 761 27.2 深入研究3D绘图 765 27.2.1 着色和法线 766 27.2.2 更复杂的形状 769 27.2.3 Model3DGroup集合 769 27.2.4 使用材质 771 27.2.5 纹理映射 773 27.3 交互和动画 777 27.3.1 变换 777 27.3.2 旋转 778 27.3.3 飞过 779 27.3.4 跟踪球 781 27.3.5 命中测试 782 27.3.6 3D表面上的2D元素 786 27.4 小结 789 第Ⅶ部分 文档和打印 第28章 文档 793 28.1 理解文档 793 28.2 流文档 794 28.2.1 流内容元素 795 28.2.2 设置内容元素的格式 796 28.2.3 创建简单的流文档 797 28.2.4 块元素 799 28.2.5 内联元素 804 28.2.6 通过代码与元素进行交互 809 28.2.7 文本对齐 812 28.3 只读流文档容器 813 28.3.1 缩放 814 28.3.2 创建页面和列 815 28.3.3 从文件加载文档 817 28.3.4 打印 818 28.4 编辑流文档 818 28.4.1 加载文件 819 28.4.2 保存文件 821 28.4.3 设置所选文本的格式 822 28.4.4 获取单个单词 824 28.5 固定文档 825 28.6 批注 826 28.6.1 批注类 827 28.6.2 启用批注服务 828 28.6.3 创建批注 829 28.6.4 检查批注 832 28.6.5 响应批注更改 835 28.6.6 在固定文档中保存批注 835 28.6.7 自定义便签的外观 836 28.7 小结 837 第29章 打印 839 29.1 基本打印 839 29.1.1 打印元素 840 29.1.2 变换打印输出 842 29.1.3 打印不显示的元素 844 29.1.4 打印文档 845 29.1.5 在文档打印输出中控制页面 848 29.2 自定义打印 851 29.2.1 使用可视化层中的类 进行打印 851 29.2.2 自定义多页打印 854 29.3 打印设置和管理 859 29.3.1 保存打印设置 859 29.3.2 打印页面范围 859 29.3.3 管理打印队列 860 29.4 通过XPS进行打印 863 29.4.1 为打印预览创建XPS文档 863 29.4.2 写入内存的XPS文档 864 29.4.3 通过XPS直接打印到 打印机 865 29.4.4 异步打印 866 29.5 小结 866 第Ⅷ部分 其他主题 第30章 与Windows窗体进行交互 869 30.1 访问互操作性 869 30.2 混合窗口和窗体 870 30.2.1 为WPF应用程序添加窗体 870 30.2.2 为Windows窗体应用程序 添加WPF窗口 870 30.2.3 显示模态窗口和窗体 871 30.2.4 显示非模态窗口和窗体 871 30.2.5 启用Windows窗体控件的 可视化风格 872 30.3 创建具有混合内容的窗口 872 30.3.1 WPF和Windows窗体 “空域” 873 30.3.2 在WPF中驻留Windows 窗体控件 874 30.3.3 使用WPF和Windows窗体 用户控件 876 30.3.4 在Windows窗体中驻留WPF 控件 877 30.3.5 访问键、助记码和焦点 879 30.3.6 属性映射 880 30.4 小结 882 第31章 多线程 883 31.1 了解多线程模型 883 31.1.1 Dispatcher类 884 31.1.2 DispatcherObject类 884 31.2 BackgroundWorker类 887 31.2.1 简单的异步操作 887 31.2.2 创建BackgroundWorker 对象 888 31.2.3 运行BackgroundWorker 对象 889 31.2.4 跟踪进度 891 31.2.5 支持取消 893 31.3 小结 894 第32章 插件模型 895 32.1 在MAF和MEF两者间 进行选择 895 32.2 了解插件管道 896 32.2.1 管道的工作原理 897 32.2.2 插件文件夹结构 898 32.2.3 为使用插件模型准备 解决方案 899 32.3 创建使用插件模型的 应用程序 900 32.3.1 协定 901 32.3.2 插件视图 901 32.3.3 插件 902 32.3.4 插件适配器 902 32.3.5 宿主视图 903 32.3.6 宿主适配器 904 32.3.7 宿主 904 32.3.8 更多插件 907 32.4 与宿主进行交互 908 32.5 可视化插件 912 32.6 小结 915 第33章 ClickOnce部署 917 33.1 理解应用程序部署 917 33.1.1 ClickOnce安装模型 918 33.1.2 ClickOnce部署的局限性 919 33.2 简单的ClickOnce发布 920 33.2.1 设置发布者和产品 920 33.2.2 启动发布向导 922 33.2.3 理解部署文件的结构 926 33.2.4 安装ClickOnce应用程序 926 33.2.5 更新ClickOnce应用程序 928 33.3 ClickOnce附加选项 928 33.3.1 发布版本 928 33.3.2 更新 929 33.3.3 文件关联 930 33.3.4 发布选项 931 33.4 小结 932
31.89MB
一款非常好的WPF编程宝典2010 源代码
2019-12-14第1章 WPF概述 1 1.1 理解Windows图形 1 1.1.1 DirectX:新的图形引擎 1 1.1.2 硬件加速与WPF 2 1.2 WPF:高级API 4 1.2.1 分辨率无关性 5 1.2.2 WPF的演化 9 1.2.3 Windows窗体将继续保留 11 1.2.4 DirectX也将继续保留 12 1.2.5 Silverlight 12 1.3 WPF体系结构 13 1.4 结束语 17 第2章 XAML 19 2.1 理解XAML 20 2.1.1 WPF之前的图形用户界面 20 2.1.2 XAML变体 21 2.1.3 XAML编译 22 2.2 XAML基础 22 2.2.1 XAML名称空间 23 2.2.2 后台代码类 24 2.3 XAML中的属性和事件 26 2.3.1 简单属性与类型转换器 27 2.3.2 复杂属性 29 2.3.3 标记扩展 30 2.3.4 附加属性 31 2.3.5 嵌套元素 32 2.3.6 特殊字符与空白字符 35 2.3.7 事件 36 2.3.8 完整的Eight Ball示例程序 38 2.4 使用其他名称空间中的类型 38 2.5 加载和编译XAML 40 2.5.1 只使用代码 41 2.5.2 使用代码和未编译的XAML 43 2.5.3 使用代码和编译过的XAML 44 2.5.4 只使用XAML 46 2.6 结束语 47 第3章 Application类 48 3.1 应用程序的生命周期 48 3.1.1 创建Application对象 48 3.1.2 派生一个自定义的 Application类 49 3.1.3 应用程序的关闭方式 51 3.1.4 应用程序事件 51 3.2 Application类的任务 53 3.2.1 处理命令行参数 54 3.2.2 访问当前Application对象 55 3.2.3 在窗口之间进行交互 56 3.2.4 单实例应用程序 57 3.3 结束语 63 第4章 布局 64 4.1 理解WPF中的布局 64 4.1.1 WPF布局原则 65 4.1.2 布局过程 66 4.1.3 布局包容器 66 4.2 使用StackPanel面板 进行简单布局 68 4.2.1 布局属性 69 4.2.2 对齐方式 70 4.2.3 外边距 71 4.2.4 最小尺寸、最大尺寸以及 显式地设置尺寸 72 4.3 WrapPanel面板和DockPanel 面板 74 4.3.1 WrapPanel面板 74 4.3.2 DockPanel面板 75 4.3.3 嵌套布局包容器 77 4.4 Grid面板 78 4.4.1 调整行和列 80 4.4.2 跨越行和列 82 4.4.3 分割窗口 83 4.4.4 共享尺寸组 86 4.4.5 UniformGrid面板 88 4.5 使用Canvas面板进行 基于坐标的布局 89 4.5.1 Z顺序 90 4.5.2 lnkCanvas元素 91 4.6 布局示例 93 4.6.1 列设置 93 4.6.2 动态内容 94 4.6.3 组合式用户界面 96 4.7 结束语 97 第5章 内容 99 5.1 理解内容控件 99 5.1.1 Content属性 101 5.1.2 对齐内容 102 5.1.3 WPF内容原则 103 5.2 特殊包容器控件 104 5.2.1 ScrollViewer包容器控件 104 5.2.2 GroupBox和TabItem: 带标题的内容控件 107 5.2.3 Expander控件 109 5.3 装饰控件 112 5.3.1 Border控件 112 5.3.2 Viewbox控件 113 5.4 结束语 115 第6章 依赖项属性和路由事件 116 6.1 理解依赖项属性 116 6.1.1 定义和注册依赖项属性 117 6.1.2 WPF使用依赖项属性的方式 124 6.2 理解路由事件 126 6.2.1 定义和注册路由事件 126 6.2.2 关联事件处理程序 128 6.2.3 事件路由 129 6.3 WPF事件 137 6.3.1 生命周期事件 137 6.3.2 输入事件 139 6.3.3 键盘输入 140 6.3.4 鼠标输入 145 6.4 结束语 149 第7章 经典控件 151 7.1 控件类 151 7.1.1 背景画刷和前景画刷 151 7.1.2 字体 155 7.1
32KB
asp连接数据库代码实例
2009-05-09连接数据库代码实例 1,连接数据库代码 文件名称 conn.asp 所有访问数据库的文件都调用此文件<!--#include file=\"Conn.asp\"--> <% db=\"data/data.mdb\" \'数据库存放目录 on error resume next set conn=server.createobject(\"adodb.connection\") conn.open \"driver={microsoft access driver (*.mdb)};dbq=\"&server.mappath(db) if err then err.clear set conn = Nothing response.write \"数据库连接出错,请检查conn.asp中的连接字符串。\" response.end end if function CloseDB Conn.Close set Conn=Nothing End Function %> <% dim badword badword=\"\'|and|select|update|chr|delete|%20from|;|insert|mid|master.|set|chr(37)|=\" if request.QueryString<>\"\" then chk=split(badword,\"|\") for each query_name in request.querystring for i=0 to ubound(chk) if instr(lcase(request.querystring(query_name)),chk(i))<>0 then response.write \"<script language=javascript>alert(\'传参错误!参数 \"&query_name&\" 的值中包含非法字符串!\\n\\n\');location=\'\"&request.ServerVariables(\"HTTP_REFERER\")&\"\'</Script>\" response.end end if next next end if %> ---------------------------------------------- 2。增加纪录 <% if request(\"action\")=\"add\" then name=request.form(\"name\") content=request.form(\"content\") set rs=server.createobject(\"adodb.recordset\") sql=\"select * from biao\" rs.open sql,conn,3,2 rs.addnew rs(\"name\")=name if content<>\"\" then rs(\"content\")=content else rs(\"content\")=null end if rs(\"date\")=date() rs.update rs.close set rs=nothing response.write \"<script language=javascript>alert(\'添加成功!\');location.href(\'index.asp\');</script>\" end if %> -------------------------------------- 3.显示记录 <% set rs=server.createobject(\"adodb.recordset\") sql=\"select * from biao order by id desc\" \'sql=\"select top 10 * from biao order by id desc\" rs.open sql,conn,1,1 rs.pagesize=15 \'-------设置每页显示的记录数 dim page page=request(\"page\") if page<>\"\" and IsNumeric(page) then page=clng(page) else page=1 end if n=rs.pagecount if page>n then page=clng(n) end if if rs.eof then response.write\"<font color=#FF0000>暂没有信息!</font>\" \'response.end else rs.absolutepage=page end if i=0 do while not rs.eof and i<rs.pagesize \'do while not rs.eof %> --------如果是每行显示n个纪录开始---------------------------- <% do while not rs.eof and i<rs.pagesize \'do while not rs.eof if i mod 5=0 then \'--------设置每行显示的个数 response.write \"<tr>\" end if %> --------如果是每行显示n个纪录结束----------------------------- <%=rs(\"id\")%> <% rs.movenext i=i+1 loop %> <% response.write(\"共\"&rs.recordcount&\"条信息 \") if page<>1 then response.write(\"<a href=?page=1 title=\'首页\'>首页</a> \") else response.write(\"首页 \") end if if page>1 then response.write(\"<a href=?page=\"&page-1&\" title=\'上一页\'>上一页</a> \") else response.write(\"上一页 \") end if if page<n then response.write(\"<a href=?page=\"&page+1&\" title=\'下一页\'>下一页</a> \") else response.write(\"下一页 \") end if if page<>n then response.write(\"<a href=?page=\"&n&\" title=\'尾页\'>尾页</a> \") else response.write(\"尾页 \") end if response.write(\" 当前页:\"&page&\"/\"&n&\"\") %> 转到:<select name=\"select\" onChange=\'javascript:window.open(this.options[this.selectedIndex].value,\"_top\")\'> <%for p=1 to rs.pagecount%> <option value=\"?page=<%=p%>\" <% if page=p then response.write \"selected\" end if%>>第<%=p%>页</option> <%next%> ---------------------------------------------- 4。更新纪录,删除纪录,删除所有记录 <% if request(\"action\")=\"manage\" then call manage() end if if request(\"action\")=\"edit\" then id=request(\"id\") set rs=server.createobject(\"adodb.recordset\") sql=\"select * from biao where id=\"&id&\"\" rs.open sql,conn,1,1 call edit() end if if request(\"action\")=\"del\" then conn.execute(\"delete * from biao where id=\"&request(\"id\")&\"\") conn.close response.write\"<script language=\'javascript\'>alert(\'删除成功!\');location.href(\'?action=manage\');</script>\" end if if request(\"action\")=\"delall\" then conn.execute(\"delete * from biao\") conn.close response.write\"<script language=\'javascript\'>alert(\'所有信息已成功删除!\');location.href(\'?action=manage\');</script>\" end if if request(\"action\")=\"saveedit\" then name=request.form(\"name\") hits=request.form(\"hits\") content=request.form(\"content\") set rs=server.createobject(\"adodb.recordset\") sql=\"select * from biao where id=\"&request(\"id\")&\"\" rs.open sql,conn,3,2 rs(\"name\")=name rs(\"content\")=content rs(\"hits\")=hits rs.update conn.close set rs=nothing response.write \"<script language=javascript>alert(\'编辑成功!\');location.href(\'?id=\"&request(\"id\")&\"&action=edit\');</script>\" end if %> --------------------------------- 5。查询纪录 <form name="form1" method="post" action="search.asp"> <input name="keyword" type="text" id="keyword" size="25"> <select name="select" size="1"> <option value="name" selected>名称</option> <option value="content">说明</option> <option value="id">id</option> </select> <input type="submit" name="Submit" value="查询"> </form> ------search.asp--------------- <% if request("keyword")<>"" and request("select")<>"" then sql="select * from biao where "&request("select")&" like '%"&request("keyword")&"%'" elseif request("keyword")<>"" and request("select")="all" then sql="select * from biao where name like '%"&request("keyword")&"%' or id like '%"&request("keyword")&"%' or content like '%"&request("keyword")&"%'" else response.redirect("index.asp") end if set rs=server.createobject("adodb.recordset") rs.open sql,conn,1,1 rs.pagesize=15 '-------设置每页显示的记录数 dim page page=request("page") if page<>"" and IsNumeric(page) then page=clng(page) else page=1 end if n=rs.pagecount if page>n then page=clng(n) end if if rs.eof then response.write"<font color=#FF0000>查询的信息不存在或者已经删除!</font>" 'response.end else rs.absolutepage=page end if i=0 do while not rs.eof and i<rs.pagesize 'do while not rs.eof %> <%=rs("id")%> <% rs.movenext i=i+1 loop %> ----------------------------------------- 6.有分类的纪录代码 ---------------显示分类开始--------------------------------- <% set rs=server.createobject("adodb.recordset") sql="select all * from class order by id desc" rs.open sql,conn,1,1 do while not rs.eof %> <a href="class.asp?classname=<%=rs("classname")%>"><b><%=rs("classname")%></b></a> <% rs.movenext i=i+1 loop %> ---------------显示分类结束-------------------------- -------------显示现在所在分类开始------------------- <% set rs=server.createobject("adodb.recordset") sql="select top 1 * from class where classname='"&request("classname")&"'" rs.open sql,conn,1,1 do while not rs.eof %> <%=rs("classname")%> <% rs.movenext i=i+1 loop %> -----------显示现在所在分类结束---------------------- -----------显示此分类的纪录开始------------ <% set rs=server.createobject("adodb.recordset") sql="select * from biao where fenlei='"&request("classname")&"'" rs.open sql,conn,1,1 rs.pagesize=10 '-------设置每页显示的记录数 dim page page=request("page") if page<>"" and IsNumeric(page) then page=clng(page) else page=1 end if n=rs.pagecount if page>n then page=clng(n) end if if rs.bof or rs.eof then response.write"<font color=#ff0000>暂没有任何数据!</font>" 'response.end else rs.absolutepage=page end if i=0 do while not rs.eof and i<rs.pagesize %> <%=rs("id")%> <% rs.movenext i=i+1 loop %> --------------显示此分类的纪录结束---------------- ---------删除所在分类纪录开始------------ <% if request("classname")<>"" then%> <a href="?action=del_fenlei&classname=<%=request("classname")%>" title="删除所有本类信息?" onClick="{if (confirm('您确定要删除所有信息吗?')){return true;}return false;}"><font color=FF0000>清空所有本类信息</font></a> <%end if%> if request("action")="del_fenlei" then classname=request("classname") conn.execute("delete * from biao where fenlei='"&classname&"'") CloseDB response.write"<script language='javascript'>alert('删除本类成功!');location.href('?action=manage');</script>" end if ---------删除所在分类纪录结束-------------------------------- ------------------------------- 7。上传文件或者图片 删除文件代码 (请在同一目录建立文件夹upfile/softpic) 上传文件的页面(调用upsoftpic.asp) <form name="form" method="post" action="?action=add" onsubmit="return chkform(this)"> <input name="picurl" type="text" id="picurl" size="20"> <iframe name="I1" width="155" height="25" src="upsoftpic.asp" scrolling="no" border="0" frameborder="0">浏览器不支持嵌入式框架,或被配置为不显示嵌入式框架。</iframe> </form> upsoftpic.asp <form action="Upfile.asp?action=upsoftpic" method="POST" enctype="multipart/form-data" class="fontmenu2" onsubmit="up.disabled=true;up.value='上传中,请稍候……'"> <input name="softpic" type="file" class="fontmenu2" size="1"> <input type="submit" value="上传" name="up" > </form> upfile.asp <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <%Server.ScriptTimeout=999%> <!--#include file="Conn.asp"--> <!--#include file="Upload.asp" --> <!-- 上传软件或者图片开始 --> <% if request("action")="upsoftpic" then set upload=new upload_5xsoft set file=upload.file("softpic") fileExt=lcase(right(file.filename,4)) if fileEXT<>".jpg" and fileEXT<>".gif" and fileEXT<>".rar" then '---设置上传类型 ++++fileEXT<>".***"++++++++ response.write"<script>alert('格式不对,请重新上传!');location='"&request.ServerVariables("HTTP_REFERER")&"'</script>" response.end end if if file.fileSize>0 then formPath="upfile/softpic" '-------上传路径 'formPath="../upfile/softpic" if right(formPath,1)<>"/" then formPath=formPath&"/" end if vfname = filename(now()) fname = vfname & "." & GetExtendName(file.FileName) file.SaveAs Server.mappath(formPath&fname) ''保存文件 %> <script> parent.form.picurl.value+='upfile/softpic/<%=fname%>' //-上传路径 //parent.frmadd.dreamcontent.value+='[img]upload/<%=ufp%>[/img]' location.replace('Upsoftpic.asp') //---返回文件 </script> <% '------文件名 end if set file=nothing set upload=nothing function filename(fname) fname = now() fname = replace(fname,"-","") fname = replace(fname," ","") fname = replace(fname,":","") fname = replace(fname,"PM","") fname = replace(fname,"AM","") fname = replace(fname,"上午","") fname = replace(fname,"下午","") filename=fname end function function GetExtendName(FileName) dim ExtName ExtName = LCase(FileName) ExtName = right(ExtName,3) ExtName = right(ExtName,3-Instr(ExtName,".")) GetExtendName = ExtName end function end if %> <!-- 上传软件或者图片结束 --> upload.asp <SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT> dim Data_5xsoft Class upload_5xsoft dim objForm,objFile,Version Public function Form(strForm) strForm=lcase(strForm) if not objForm.exists(strForm) then Form="" else Form=objForm(strForm) end if end function Public function File(strFile) strFile=lcase(strFile) if not objFile.exists(strFile) then set File=new FileInfo else set File=objFile(strFile) end if end function Private Sub Class_Initialize dim RequestData,sStart,vbCrlf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,theFile dim iFileSize,sFilePath,sFileType,sFormValue,sFileName dim iFindStart,iFindEnd dim iFormStart,iFormEnd,sFormName Version="化境HTTP上传程序 Version 2.0" set objForm=Server.CreateObject("Scripting.Dictionary") set objFile=Server.CreateObject("Scripting.Dictionary") if Request.TotalBytes<1 then Exit Sub set tStream = Server.CreateObject("adodb.stream") set Data_5xsoft = Server.CreateObject("adodb.stream") Data_5xsoft.Type = 1 Data_5xsoft.Mode =3 Data_5xsoft.Open Data_5xsoft.Write Request.BinaryRead(Request.TotalBytes) Data_5xsoft.Position=0 RequestData =Data_5xsoft.Read iFormStart = 1 iFormEnd = LenB(RequestData) vbCrlf = chrB(13) & chrB(10) sStart = MidB(RequestData,1, InStrB(iFormStart,RequestData,vbCrlf)-1) iStart = LenB (sStart) iFormStart=iFormStart+iStart+1 while (iFormStart + 10) < iFormEnd iInfoEnd = InStrB(iFormStart,RequestData,vbCrlf & vbCrlf)+3 tStream.Type = 1 tStream.Mode =3 tStream.Open Data_5xsoft.Position = iFormStart Data_5xsoft.CopyTo tStream,iInfoEnd-iFormStart tStream.Position = 0 tStream.Type = 2 tStream.Charset ="gb2312" sInfo = tStream.ReadText tStream.Close '取得表单项目名称 iFormStart = InStrB(iInfoEnd,RequestData,sStart) iFindStart = InStr(22,sInfo,"name=""",1)+6 iFindEnd = InStr(iFindStart,sInfo,"""",1) sFormName = lcase(Mid (sinfo,iFindStart,iFindEnd-iFindStart)) '如果是文件 if InStr (45,sInfo,"filename=""",1) > 0 then set theFile=new FileInfo '取得文件名 iFindStart = InStr(iFindEnd,sInfo,"filename=""",1)+10 iFindEnd = InStr(iFindStart,sInfo,"""",1) sFileName = Mid (sinfo,iFindStart,iFindEnd-iFindStart) theFile.FileName=getFileName(sFileName) theFile.FilePath=getFilePath(sFileName) '取得文件类型 iFindStart = InStr(iFindEnd,sInfo,"Content-Type: ",1)+14 iFindEnd = InStr(iFindStart,sInfo,vbCr) theFile.FileType =Mid (sinfo,iFindStart,iFindEnd-iFindStart) theFile.FileStart =iInfoEnd theFile.FileSize = iFormStart -iInfoEnd -3 theFile.FormName=sFormName if not objFile.Exists(sFormName) then objFile.add sFormName,theFile end if else '如果是表单项目 tStream.Type =1 tStream.Mode =3 tStream.Open Data_5xsoft.Position = iInfoEnd Data_5xsoft.CopyTo tStream,iFormStart-iInfoEnd-3 tStream.Position = 0 tStream.Type = 2 tStream.Charset ="gb2312" sFormValue = tStream.ReadText tStream.Close if objForm.Exists(sFormName) then objForm(sFormName)=objForm(sFormName)&", "&sFormValue else objForm.Add sFormName,sFormValue end if end if iFormStart=iFormStart+iStart+1 wend RequestData="" set tStream =nothing End Sub Private Sub Class_Terminate if Request.TotalBytes>0 then objForm.RemoveAll objFile.RemoveAll set objForm=nothing set objFile=nothing Data_5xsoft.Close set Data_5xsoft =nothing end if End Sub Private function GetFilePath(FullPath) If FullPath <> "" Then GetFilePath = left(FullPath,InStrRev(FullPath, "")) Else GetFilePath = "" End If End function Private function GetFileName(FullPath) If FullPath <> "" Then GetFileName = mid(FullPath,InStrRev(FullPath, "")+1) Else GetFileName = "" End If End function End Class Class FileInfo dim FormName,FileName,FilePath,FileSize,FileType,FileStart Private Sub Class_Initialize FileName = "" FilePath = "" FileSize = 0 FileStart= 0 FormName = "" FileType = "" End Sub Public function SaveAs(FullPath) dim dr,ErrorChar,i SaveAs=true if trim(fullpath)="" or FileStart=0 or FileName="" or right(fullpath,1)="/" then exit function set dr=CreateObject("Adodb.Stream") dr.Mode=3 dr.Type=1 dr.Open Data_5xsoft.position=FileStart Data_5xsoft.copyto dr,FileSize dr.SaveToFile FullPath,2 dr.Close set dr=nothing SaveAs=false end function End Class </SCRIPT> 删除文件和记录 <% if request("action")="manage" then call manage() end if if request("action")="edit" then id=request("id") set rs=server.createobject("adodb.recordset") sql="select * from biao where id="&id&"" rs.open sql,conn,1,1 call edit() end if if request("action")="del" then set rs=server.createobject("adodb.recordset") sql="select * from biao where id="&request("id")&"" rs.open sql,conn,3,2 set fileobj=server.createobject("scripting.filesystemobject") if fileobj.FileExists(server.mappath(""&rs("picurl"))) then fileobj.DeleteFile server.mappath(""&rs("picurl")) end if rs.delete conn.close response.write"<script language='javascript'>alert('删除成功!');location.href('?action=manage');</script>" end if if request("action")="delall" then set rs=server.createobject("adodb.recordset") sql="select * from biao" rs.open sql,conn,3,2 set fileobj=server.createobject("scripting.filesystemobject") i=0 do while not(rs.bof or rs.eof) and i<rs.recordcount if fileobj.FileExists(server.mappath(""&rs("picurl"))) then'-----------("../" &rs("picurl"))) then fileobj.DeleteFile server.mappath(""&rs("picurl")) end if rs.movenext i=i+1 loop conn.execute("delete * from biao") conn.close response.write"<script language='javascript'>alert('所有已成功删除!');location.href('?action=manage');</script>" end if if request("action")="saveedit" then name=request.form("name") picurl=request.form("picurl") hits=request.form("hits") content=request.form("content") set rs=server.createobject("adodb.recordset") sql="select * from biao where id="&request("id")&"" rs.open sql,conn,3,2 rs("name")=name rs("content")=content rs("picurl")=picurl rs("hits")=hits rs.update conn.close set rs=nothing response.write "<script language=javascript>alert('编辑成功!');location.href('?id="&request("id")&"&action=edit');</script>" end if %> 删除文件 <a title="删除这个?" href="delfile.asp?id=<%=rs("id")%>&struploadfiles=<%=rs("picurl")%>&action=delsoftpic" onClick="{if (confirm('您确定要删除这个吗?')){return true;}return false;}"><font color="#FF0000">删除</font></a> -------------------------------- --*delfile.asp内容*--- <%if request("action")="delsoftpic" then picurl=request.form("picurl") set rs=server.createobject("adodb.recordset") sql="select * from biao where id="&request("id")&"" rs.open sql,conn,3,2 rs("picurl")=null struploadfiles=trim(request.querystring("struploadfiles")) action=trim(request.querystring("action")) dim fso,arruploadfiles,i set fso = createobject("scripting.filesystemobject") fso.deletefile(server.mappath("" & struploadfiles)) set fso = nothing rs.update conn.close set rs=nothing response.write"<script language='javascript'>alert('删除成功!');location.href('edit.asp?id="&request("id")&"&action=edit');</script>" end if %> <a href="javascript:history.back();">[返回] </a> 8。有关ubb ----------ubbcode.asp-------------- <% const ImagePath="images/emot/" function UBBCode(strContent) strContent= FilterJS(strContent) dim re dim po,ii dim reContent Set re=new RegExp re.IgnoreCase =true re.Global=True po=0 ii=0 re.Pattern="[UPLOAD=(gif|jpg|jpeg|bmp|png)](.[^[]*)(gif|jpg|jpeg|bmp)[/UPLOAD]" strContent=re.replace(strContent,"<br><IMG SRC=""pic/$1.gif"" border=0> 此主题相关图片如下:<br><SPAN style='CURSOR: hand'><IMG SRC=""upload/$2$1"" border=0 alt=转动滚轮可缩放图片 按此在新窗口浏览图片 onload=""imgload(this)"" onclick=""window.open(this.src,null,'')"" onmousewheel=""return bbimg(this)""></span>") re.Pattern="[IMG](http|https|ftp)://(.[^[]*)[/IMG]" strContent=re.replace(strContent,"<img src=$1://$2 border=0 style='cursor:hand' alt=转动滚轮可缩放图片;按此在新窗口浏览图片 onload=""imgload(this)"" onclick=""window.open(this.src,null,'')"" onmousewheel=""return bbimg(this)"">") re.Pattern="[DIR=*([0-9]*),*([0-9]*)](.[^[]*)[/DIR]" strContent=re.Replace(strContent,"<object classid=clsid:166B1BCA-3F9C-11CF-8075-444553540000 codebase=http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=7,0,2,0 width=$1 height=$2><param name=src value=$3><embed src=$3 pluginspage=http://www.macromedia.com/shockwave/download/ width=$1 height=$2></embed></object>") re.Pattern="[QT=*([0-9]*),*([0-9]*)](.[^[]*)[/QT]" strContent=re.Replace(strContent,"<embed src=$3 width=$1 height=$2 autoplay=true loop=false controller=true playeveryframe=false cache=false scale=TOFIT bgcolor=#000000 kioskmode=false targetcache=false pluginspage=http://www.apple.com/quicktime/>") re.Pattern="[MP=*([0-9]*),*([0-9]*)](.[^[]*)[/MP]" strContent=re.Replace(strContent,"<object align=middle classid=CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95 class=OBJECT id=MediaPlayer width=$1 height=$2 ><param name=ShowStatusBar value=-1><param name=Filename value=$3><embed type=application/x-oleobject codebase=http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701 flename=mp src=$3 width=$1 height=$2></embed></object>") re.Pattern="[RM=*([0-9]*),*([0-9]*)](.[^[]*)[/RM]" strContent=re.Replace(strContent,"<OBJECT classid=clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA class=OBJECT id=RAOCX width=$1 height=$2><PARAM NAME=SRC VALUE=$3><PARAM NAME=CONSOLE VALUE=Clip1><PARAM NAME=CONTROLS VALUE=imagewindow><PARAM NAME=AUTOSTART VALUE=true></OBJECT><br><OBJECT classid=CLSID:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA height=32 id=video2 width=$1><PARAM NAME=SRC VALUE=$3><PARAM NAME=AUTOSTART VALUE=-1><PARAM NAME=CONTROLS VALUE=controlpanel><PARAM NAME=CONSOLE VALUE=Clip1></OBJECT>") re.Pattern="([FLASH])(.[^[]*)([/FLASH])" strContent= re.Replace(strContent,"<a href=""$2"" TARGET=_blank><IMG SRC=" & ImagePath & "swf.gif border=0 alt=点击开新窗口欣赏该FLASH动画! height=16 width=16>[全屏欣赏]</a><br><OBJECT codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width=500 height=400><PARAM NAME=movie VALUE=""$2""><PARAM NAME=quality VALUE=high><embed src=""$2"" quality=high pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' type='application/x-shockwave-flash' width=500 height=400>$2</embed></OBJECT>") re.Pattern="([FLASH=*([0-9]*),*([0-9]*)])(.[^[]*)([/FLASH])" strContent= re.Replace(strContent,"<a href=""$4"" TARGET=_blank><IMG SRC=" & ImagePath & "swf.gif border=0 alt=点击开新窗口欣赏该FLASH动画! height=16 width=16>[全屏欣赏]</a><br><OBJECT codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width=$2 height=$3><PARAM NAME=movie VALUE=""$4""><PARAM NAME=quality VALUE=high><embed src=""$4"" quality=high pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' type='application/x-shockwave-flash' width=$2 height=$3>$4</embed></OBJECT>") re.Pattern="([URL])(.[^[]*)([/URL])" strContent= re.Replace(strContent,"<A HREF=""$2"" TARGET=_blank>$2</A>") re.Pattern="([URL=(.[^[]*)])(.[^[]*)([/URL])" strContent= re.Replace(strContent,"<A HREF=""$2"" TARGET=_blank>$3</A>") re.Pattern="([EMAIL])(S+@.[^[]*)([/EMAIL])" strContent= re.Replace(strContent,"<img align=absmiddle src=" & ImagePath & "email1.gif><A HREF=""mailto:$2"">$2</A>") re.Pattern="([EMAIL=(S+@.[^[]*)])(.[^[]*)([/EMAIL])" strContent= re.Replace(strContent,"<img align=absmiddle src=" & ImagePath & "email1.gif><A HREF=""mailto:$2"" TARGET=_blank>$3</A>") '自动识别网址 're.Pattern = "^((http|https|ftp|rtsp|mms):(//|\\)[A-Za-z0-9./=?%-&_~`@':+!]+)" 'strContent = re.Replace(strContent,"<img align=absmiddle src=pic/url.gif border=0><a target=_blank href=$1>$1</a>") 're.Pattern = "((http|https|ftp|rtsp|mms):(//|\\)[A-Za-z0-9./=?%-&_~`@':+!]+)$" 'strContent = re.Replace(strContent,"<img align=absmiddle src=pic/url.gif border=0><a target=_blank href=$1>$1</a>") 're.Pattern = "([^>=""])((http|https|ftp|rtsp|mms):(//|\\)[A-Za-z0-9./=?%-&_~`@':+!]+)" 'strContent = re.Replace(strContent,"$1<img align=absmiddle src=pic/url.gif border=0><a target=_blank href=$2>$2</a>") '自动识别www等开头的网址 're.Pattern = "([^(http://|http:\)])((www|cn)[.](w)+[.]{1,}(net|com|cn|org|cc)(((/[~]*|\[~]*)(w)+)|[.](w)+)*(((([?](w)+){1}[=]*))*((w)+){1}([&](w)+[=](w)+)*)*)" 'strContent = re.Replace(strContent,"<img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://$2>$2</a>") '自动识别Email地址,如打开本功能在浏览内容很多的帖子会引起服务器停顿 're.Pattern = "([^(=)])((w)+[@]{1}((w)+[.]){1,3}(w)+)" 'strContent = re.Replace(strContent,"<img align=absmiddle src=pic/url.gif border=0><a target=_blank href=""mailto:$2"">$2</a>") re.Pattern="[em(.[^[]*)]" strContent=re.Replace(strContent,"<img src="&ImagePath&"em$1.gif border=0 align=middle>") re.Pattern="[HTML](.[^[]*)[/HTML]" strContent=re.Replace(strContent,"<table width='100%' border='0' cellspacing='0' cellpadding='6' class=tableborder1><td><b>以下内容为程序代码:</b><br>$1</td></table>") re.Pattern="[code](.[^[]*)[/code]" strContent=re.Replace(strContent,"<table width='100%' border='0' cellspacing='0' cellpadding='6' class=tableborder1><td><b>以下内容为程序代码:</b><br>$1</td></table>") re.Pattern="[color=(.[^[]*)](.[^[]*)[/color]" strContent=re.Replace(strContent,"<font color=$1>$2</font>") re.Pattern="[face=(.[^[]*)](.[^[]*)[/face]" strContent=re.Replace(strContent,"<font face=$1>$2</font>") re.Pattern="[align=(center|left|right)](.*)[/align]" strContent=re.Replace(strContent,"<div align=$1>$2</div>") re.Pattern="[QUOTE](.*)[/QUOTE]" strContent=re.Replace(strContent,"<table style=""width:80%"" cellpadding=5 cellspacing=1 class=tableborder1><TR><TD class=tableborder1>$1</td></tr></table><br>") re.Pattern="[fly](.*)[/fly]" strContent=re.Replace(strContent,"<marquee width=90% behavior=alternate scrollamount=3>$1</marquee>") re.Pattern="[move](.*)[/move]" strContent=re.Replace(strContent,"<MARQUEE scrollamount=3>$1</marquee>") re.Pattern="[GLOW=*([0-9]*),*(#*[a-z0-9]*),*([0-9]*)](.[^[]*)[/GLOW]" strContent=re.Replace(strContent,"<table width=$1 style=""filter:glow(color=$2, strength=$3)"">$4</table>") re.Pattern="[SHADOW=*([0-9]*),*(#*[a-z0-9]*),*([0-9]*)](.[^[]*)[/SHADOW]" strContent=re.Replace(strContent,"<table width=$1 style=""filter:shadow(color=$2, strength=$3)"">$4</table>") re.Pattern="[i](.[^[]*)[/i]" strContent=re.Replace(strContent,"<i>$1</i>") re.Pattern="[u](.[^[]*)([/u])" strContent=re.Replace(strContent,"<u>$1</u>") re.Pattern="[b](.[^[]*)([/b])" strContent=re.Replace(strContent,"<b>$1</b>") re.Pattern="[size=([1-4])](.[^[]*)[/size]" strContent=re.Replace(strContent,"<font size=$1>$2</font>") strContent=replace(strContent,"<I></I>","") set re=Nothing UBBCode=strContent end function Function FilterJS(v) if not isnull(v) then dim t dim re dim reContent Set re=new RegExp re.IgnoreCase =true re.Global=True re.Pattern="(javascript)" t=re.Replace(v,"javascript") re.Pattern="(jscript:)" t=re.Replace(t,"jscript:") re.Pattern="(js:)" t=re.Replace(t,"js:") 're.Pattern="(value)" 't=re.Replace(t,"value") re.Pattern="(about:)" t=re.Replace(t,"about:") re.Pattern="(file:)" t=re.Replace(t,"file:") re.Pattern="(document.cookie)" t=re.Replace(t,"documents.cookie") re.Pattern="(vbscript:)" t=re.Replace(t,"vbscript:") re.Pattern="(vbs:)" t=re.Replace(t,"vbs:") re.Pattern="(on(mouse|exit|error|click|key))" t=re.Replace(t,"on$2") 're.Pattern="(&#)" 't=re.Replace(t,"&#") FilterJS=t set re=nothing end if End Function function HTMLEncode(fString) if not isnull(fString) then fString = replace(fString, ">", ">") fString = replace(fString, "<", "<") fString = Replace(fString, CHR(32), " ") fString = Replace(fString, CHR(9), " ") fString = Replace(fString, CHR(34), """) fString = Replace(fString, CHR(39), "'") fString = Replace(fString, CHR(13), "") fString = Replace(fString, CHR(10) & CHR(10), "</P><P> ") fString = Replace(fString, CHR(10), "<BR> ") HTMLEncode = fString end if end function function nohtml(str) dim re Set re=new RegExp re.IgnoreCase =true re.Global=True re.Pattern="(<.[^<]*>)" str=re.replace(str," ") re.Pattern="(</[^<]*>)" str=re.replace(str," ") nohtml=str set re=nothing end function function cutStr(str,strlen) dim l,t,c l=len(str) t=0 for i=1 to l c=Abs(Asc(Mid(str,i,1))) if c>255 then t=t+2 else t=t+1 end if if t>=strlen then cutStr=left(str,i)&".." exit for else cutStr=str end if next cutStr=replace(cutStr,chr(10),"") end function %> '----------ubbcode.asp结束----------------------------- <%=left(rs("name"),6)%> <%=ubbcode(rs("content"))%> <%=Server.HTMLEncode(rs("content"))%> ----------------------字符截取开始------------------------------- <% if len(rs("name"))>10 then response.write "<a href=view.asp?id="&rs("id")&" title='文章标题:"&rs("name")&_ vbcrlf&"阅读次数:"&rs("hits")&vbcrlf&"发表时间:"&rs("date")&"'>"&left(rs("name"),10)&"..</a>" else response.write "<a href=view.asp?id="&rs("id")&" title='文章标题:"&rs("name")&_ vbcrlf&"阅读次数:"&rs("hits")&vbcrlf&"发表时间:"&rs("date")&"'>"&rs("name")&"</a>" end if %> ----------------------字符截取结束--------------------------------- 9。有关后台登陆 chk.asp <% if session("admin")="" then response.redirect"index.asp" end if %> md5.asp <% Private Const BITS_TO_A_BYTE = 8 Private Const BYTES_TO_A_WORD = 4 Private Const BITS_TO_A_WORD = 32 Private m_lOnBits(30) Private m_l2Power(30) Private Function LShift(lValue, iShiftBits) If iShiftBits = 0 Then LShift = lValue Exit Function ElseIf iShiftBits = 31 Then If lValue And 1 Then LShift = &H80000000 Else LShift = 0 End If Exit Function ElseIf iShiftBits < 0 Or iShiftBits > 31 Then Err.Raise 6 End If If (lValue And m_l2Power(31 - iShiftBits)) Then LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000 Else LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits)) End If End Function Private Function RShift(lValue, iShiftBits) If iShiftBits = 0 Then RShift = lValue Exit Function ElseIf iShiftBits = 31 Then If lValue And &H80000000 Then RShift = 1 Else RShift = 0 End If Exit Function ElseIf iShiftBits < 0 Or iShiftBits > 31 Then Err.Raise 6 End If RShift = (lValue And &H7FFFFFFE) m_l2Power(iShiftBits) If (lValue And &H80000000) Then RShift = (RShift Or (&H40000000 m_l2Power(iShiftBits - 1))) End If End Function Private Function RotateLeft(lValue, iShiftBits) RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits)) End Function Private Function AddUnsigned(lX, lY) Dim lX4 Dim lY4 Dim lX8 Dim lY8 Dim lResult lX8 = lX And &H80000000 lY8 = lY And &H80000000 lX4 = lX And &H40000000 lY4 = lY And &H40000000 lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF) If lX4 And lY4 Then lResult = lResult Xor &H80000000 Xor lX8 Xor lY8 ElseIf lX4 Or lY4 Then If lResult And &H40000000 Then lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8 Else lResult = lResult Xor &H40000000 Xor lX8 Xor lY8 End If Else lResult = lResult Xor lX8 Xor lY8 End If AddUnsigned = lResult End Function Private Function md5_F(x, y, z) md5_F = (x And y) Or ((Not x) And z) End Function Private Function md5_G(x, y, z) md5_G = (x And z) Or (y And (Not z)) End Function Private Function md5_H(x, y, z) md5_H = (x Xor y Xor z) End Function Private Function md5_I(x, y, z) md5_I = (y Xor (x Or (Not z))) End Function Private Sub md5_FF(a, b, c, d, x, s, ac) a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_F(b, c, d), x), ac)) a = RotateLeft(a, s) a = AddUnsigned(a, b) End Sub Private Sub md5_GG(a, b, c, d, x, s, ac) a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_G(b, c, d), x), ac)) a = RotateLeft(a, s) a = AddUnsigned(a, b) End Sub Private Sub md5_HH(a, b, c, d, x, s, ac) a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_H(b, c, d), x), ac)) a = RotateLeft(a, s) a = AddUnsigned(a, b) End Sub Private Sub md5_II(a, b, c, d, x, s, ac) a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_I(b, c, d), x), ac)) a = RotateLeft(a, s) a = AddUnsigned(a, b) End Sub Private Function ConvertToWordArray(sMessage) Dim lMessageLength Dim lNumberOfWords Dim lWordArray() Dim lBytePosition Dim lByteCount Dim lWordCount Const MODULUS_BITS = 512 Const CONGRUENT_BITS = 448 lMessageLength = Len(sMessage) lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) BITS_TO_A_BYTE)) (MODULUS_BITS BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS BITS_TO_A_WORD) ReDim lWordArray(lNumberOfWords - 1) lBytePosition = 0 lByteCount = 0 Do Until lByteCount >= lMessageLength lWordCount = lByteCount BYTES_TO_A_WORD lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition) lByteCount = lByteCount + 1 Loop lWordCount = lByteCount BYTES_TO_A_WORD lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition) lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3) lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29) ConvertToWordArray = lWordArray End Function Private Function WordToHex(lValue) Dim lByte Dim lCount For lCount = 0 To 3 lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1) WordToHex = WordToHex & Right("0" & Hex(lByte), 2) Next End Function Public Function MD5(sMessage) m_lOnBits(0) = CLng(1) m_lOnBits(1) = CLng(3) m_lOnBits(2) = CLng(7) m_lOnBits(3) = CLng(15) m_lOnBits(4) = CLng(31) m_lOnBits(5) = CLng(63) m_lOnBits(6) = CLng(127) m_lOnBits(7) = CLng(255) m_lOnBits(8) = CLng(511) m_lOnBits(9) = CLng(1023) m_lOnBits(10) = CLng(2047) m_lOnBits(11) = CLng(4095) m_lOnBits(12) = CLng(8191) m_lOnBits(13) = CLng(16383) m_lOnBits(14) = CLng(32767) m_lOnBits(15) = CLng(65535) m_lOnBits(16) = CLng(131071) m_lOnBits(17) = CLng(262143) m_lOnBits(18) = CLng(524287) m_lOnBits(19) = CLng(1048575) m_lOnBits(20) = CLng(2097151) m_lOnBits(21) = CLng(4194303) m_lOnBits(22) = CLng(8388607) m_lOnBits(23) = CLng(16777215) m_lOnBits(24) = CLng(33554431) m_lOnBits(25) = CLng(67108863) m_lOnBits(26) = CLng(134217727) m_lOnBits(27) = CLng(268435455) m_lOnBits(28) = CLng(536870911) m_lOnBits(29) = CLng(1073741823) m_lOnBits(30) = CLng(2147483647) m_l2Power(0) = CLng(1) m_l2Power(1) = CLng(2) m_l2Power(2) = CLng(4) m_l2Power(3) = CLng(8) m_l2Power(4) = CLng(16) m_l2Power(5) = CLng(32) m_l2Power(6) = CLng(64) m_l2Power(7) = CLng(128) m_l2Power(8) = CLng(256) m_l2Power(9) = CLng(512) m_l2Power(10) = CLng(1024) m_l2Power(11) = CLng(2048) m_l2Power(12) = CLng(4096) m_l2Power(13) = CLng(8192) m_l2Power(14) = CLng(16384) m_l2Power(15) = CLng(32768) m_l2Power(16) = CLng(65536) m_l2Power(17) = CLng(131072) m_l2Power(18) = CLng(262144) m_l2Power(19) = CLng(524288) m_l2Power(20) = CLng(1048576) m_l2Power(21) = CLng(2097152) m_l2Power(22) = CLng(4194304) m_l2Power(23) = CLng(8388608) m_l2Power(24) = CLng(16777216) m_l2Power(25) = CLng(33554432) m_l2Power(26) = CLng(67108864) m_l2Power(27) = CLng(134217728) m_l2Power(28) = CLng(268435456) m_l2Power(29) = CLng(536870912) m_l2Power(30) = CLng(1073741824) Dim x Dim k Dim AA Dim BB Dim CC Dim DD Dim a Dim b Dim c Dim d Const S11 = 7 Const S12 = 12 Const S13 = 17 Const S14 = 22 Const S21 = 5 Const S22 = 9 Const S23 = 14 Const S24 = 20 Const S31 = 4 Const S32 = 11 Const S33 = 16 Const S34 = 23 Const S41 = 6 Const S42 = 10 Const S43 = 15 Const S44 = 21 x = ConvertToWordArray(sMessage) a = &H67452301 b = &HEFCDAB89 c = &H98BADCFE d = &H10325476 For k = 0 To UBound(x) Step 16 AA = a BB = b CC = c DD = d md5_FF a, b, c, d, x(k + 0), S11, &HD76AA478 md5_FF d, a, b, c, x(k + 1), S12, &HE8C7B756 md5_FF c, d, a, b, x(k + 2), S13, &H242070DB md5_FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE md5_FF a, b, c, d, x(k + 4), S11, &HF57C0FAF md5_FF d, a, b, c, x(k + 5), S12, &H4787C62A md5_FF c, d, a, b, x(k + 6), S13, &HA8304613 md5_FF b, c, d, a, x(k + 7), S14, &HFD469501 md5_FF a, b, c, d, x(k + 8), S11, &H698098D8 md5_FF d, a, b, c, x(k + 9), S12, &H8B44F7AF md5_FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1 md5_FF b, c, d, a, x(k + 11), S14, &H895CD7BE md5_FF a, b, c, d, x(k + 12), S11, &H6B901122 md5_FF d, a, b, c, x(k + 13), S12, &HFD987193 md5_FF c, d, a, b, x(k + 14), S13, &HA679438E md5_FF b, c, d, a, x(k + 15), S14, &H49B40821 md5_GG a, b, c, d, x(k + 1), S21, &HF61E2562 md5_GG d, a, b, c, x(k + 6), S22, &HC040B340 md5_GG c, d, a, b, x(k + 11), S23, &H265E5A51 md5_GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA md5_GG a, b, c, d, x(k + 5), S21, &HD62F105D md5_GG d, a, b, c, x(k + 10), S22, &H2441453 md5_GG c, d, a, b, x(k + 15), S23, &HD8A1E681 md5_GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8 md5_GG a, b, c, d, x(k + 9), S21, &H21E1CDE6 md5_GG d, a, b, c, x(k + 14), S22, &HC33707D6 md5_GG c, d, a, b, x(k + 3), S23, &HF4D50D87 md5_GG b, c, d, a, x(k + 8), S24, &H455A14ED md5_GG a, b, c, d, x(k + 13), S21, &HA9E3E905 md5_GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8 md5_GG c, d, a, b, x(k + 7), S23, &H676F02D9 md5_GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A md5_HH a, b, c, d, x(k + 5), S31, &HFFFA3942 md5_HH d, a, b, c, x(k + 8), S32, &H8771F681 md5_HH c, d, a, b, x(k + 11), S33, &H6D9D6122 md5_HH b, c, d, a, x(k + 14), S34, &HFDE5380C md5_HH a, b, c, d, x(k + 1), S31, &HA4BEEA44 md5_HH d, a, b, c, x(k + 4), S32, &H4BDECFA9 md5_HH c, d, a, b, x(k + 7), S33, &HF6BB4B60 md5_HH b, c, d, a, x(k + 10), S34, &HBEBFBC70 md5_HH a, b, c, d, x(k + 13), S31, &H289B7EC6 md5_HH d, a, b, c, x(k + 0), S32, &HEAA127FA md5_HH c, d, a, b, x(k + 3), S33, &HD4EF3085 md5_HH b, c, d, a, x(k + 6), S34, &H4881D05 md5_HH a, b, c, d, x(k + 9), S31, &HD9D4D039 md5_HH d, a, b, c, x(k + 12), S32, &HE6DB99E5 md5_HH c, d, a, b, x(k + 15), S33, &H1FA27CF8 md5_HH b, c, d, a, x(k + 2), S34, &HC4AC5665 md5_II a, b, c, d, x(k + 0), S41, &HF4292244 md5_II d, a, b, c, x(k + 7), S42, &H432AFF97 md5_II c, d, a, b, x(k + 14), S43, &HAB9423A7 md5_II b, c, d, a, x(k + 5), S44, &HFC93A039 md5_II a, b, c, d, x(k + 12), S41, &H655B59C3 md5_II d, a, b, c, x(k + 3), S42, &H8F0CCC92 md5_II c, d, a, b, x(k + 10), S43, &HFFEFF47D md5_II b, c, d, a, x(k + 1), S44, &H85845DD1 md5_II a, b, c, d, x(k + 8), S41, &H6FA87E4F md5_II d, a, b, c, x(k + 15), S42, &HFE2CE6E0 md5_II c, d, a, b, x(k + 6), S43, &HA3014314 md5_II b, c, d, a, x(k + 13), S44, &H4E0811A1 md5_II a, b, c, d, x(k + 4), S41, &HF7537E82 md5_II d, a, b, c, x(k + 11), S42, &HBD3AF235 md5_II c, d, a, b, x(k + 2), S43, &H2AD7D2BB md5_II b, c, d, a, x(k + 9), S44, &HEB86D391 a = AddUnsigned(a, AA) b = AddUnsigned(b, BB) c = AddUnsigned(c, CC) d = AddUnsigned(d, DD) Next 'MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d)) MD5=LCase(WordToHex(b) & WordToHex(c)) 'I crop this to fit 16byte database password :D End Function %> index.asp(登陆页面) <form method="post" action="Log.asp?action=login" onsubmit="return chklogin(this)"> <input name="admin" type="text" id="admin"> <input name="pwd" type="text" id="pwd"> <input type="submit" name="Submit" value="登陆"> </form> log.asp <!--#include file="conn.asp"--> <!--#include file="Md5.asp"--> <% Session.TimeOut=30 if request("action")="login" then admin=trim(request.form("admin")) for i=1 to len(admin) '用MID函数读出变量admin中i 位置的一个字符 manage=mid(admin,i,1) if manage="'" or manage="%" or manage="<" or manage=">" or manage="&" then '如果admin中含有' % < > &字符就转到出错页面 response.redirect "Error.asp" response.end end if next pwd=trim(request.form("pwd")) for i=1 to len(pwd) '用MID函数读出变量pwd中i 位置的一个字符 pass=mid(pwd,i,1) if pass="'" or pass="%" or pass="<" or pass=">" or pass="&" then '如果pass中含有' % < > &字符就转到出错页面 response.redirect "Error.asp" response.end end if next pwd=md5(pwd) if admin="" or pwd="" then Response.Redirect ("Index.asp") end if set rs=server.createobject("adodb.recordset") sql="select * from admin where admin='"&admin&"'and pwd='"&pwd&"'" rs.open sql,conn,1,1 if not rs.eof then session("admin")=admin response.redirect"main.asp" else response.redirect"Error.asp" response.end end if end if if request("action")="logout" then session("admin")="" response.redirect"../index.asp" end if %> error.asp <meta http-equiv="refresh" content="3;URL=index.asp"> 登陆出错,三秒钟自动返回 其它想加密的页面调用chk.asp <!--#include file="chk.asp"--> pwd.asp修改密码 <% if request("action")="edit" then admin=trim(request.form("admin")) pwd=md5(trim(request.form("pwd"))) set rs=server.createobject("adodb.recordset") sql="select * from admin" rs.open sql,conn,3,2 rs("admin")=admin rs("pwd")=pwd rs.update set rs=nothing set conn=nothing response.write"<script language='javascript'>alert('修改成功!');location.href('Admin_Admin.asp');</script>" end if set rs=server.createobject("adodb.recordset") sql="select * from admin" rs.open sql,conn,1,1 %> ------------------------ <form method="POST" action="?action=edit"> <input name="admin" type="text" class="fontmenu2" value="<%=rs("admin")%>" size="20"> <input name="pwd" type="password" class="fontmenu2" value="<%=rs("pwd")%>" size="20"> </form> info.asp(读取服务器基本参数) <!--#include file="chk.asp"--> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>无标题文档</title> </head> <body><table width="100%" border="0" cellpadding=0 cellspacing=1 class="k1" style="border-collapse: collapse"> <tr align="center" bgcolor="#eeeeee" class="fontmenu2"> <td height=25 colspan="2"><font color="#FF0000">恭喜:你已成功登陆后台管理!</font></td> </tr> <tr bgcolor="#eeeeee" class="fontmenu2"> <td width="24%" height=25> 服务器名:</td> <td width='76%'> <%=Request.ServerVariables("SERVER_NAME")%></td> </tr> <tr bgcolor="#eeeeee" class="fontmenu2"> <td height=25> 服务器IP:</td> <td> <%=Request.ServerVariables("LOCAL_ADDR")%></td> </tr> <tr bgcolor="#eeeeee" class="fontmenu2"> <td height=25> 服务器端口:</td> <td> <%=Request.ServerVariables("SERVER_PORT")%></td> </tr> <tr bgcolor="#eeeeee" class="fontmenu2"> <td height=25> 服务器时间:</td> <td> <%=now%></td> </tr> <tr bgcolor="#eeeeee" class="fontmenu2"> <td height=25> IIS版本:</td> <td> <%=Request.ServerVariables("SERVER_SOFTWARE")%></td> </tr> <tr bgcolor="#eeeeee" class="fontmenu2"> <td height=25> 服务器操作系统:</td> <td> <%=Request.ServerVariables("OS")%></td> </tr> <tr bgcolor="#eeeeee" class="fontmenu2"> <td height=25> 脚本超时时间:</td> <td> <%=Server.ScriptTimeout%> 秒</td> </tr> <tr bgcolor="#eeeeee" class="fontmenu2"> <td height=25> 站点物理路径:</td> <td> <%=request.ServerVariables("APPL_PHYSICAL_PATH")%></td> </tr> <tr bgcolor="#eeeeee" class="fontmenu2"> <td height=25> 服务器CPU数量:</td> <td> <%=Request.ServerVariables("NUMBER_OF_PROCESSORS")%> 个</td> </tr> <tr bgcolor="#eeeeee" class="fontmenu2"> <td height=25> 服务器解译引擎:</td> <td> <%=ScriptEngine & "/"& ScriptEngineMajorVersion &"."&ScriptEngineMinorVersion&"."& ScriptEngineBuildVersion %></td> </tr> <tr bgcolor="#eeeeee" class="fontmenu2"> <td height=25> 本文件路径:</td> <td> <%=Request.ServerVariables("PATH_TRANSLATED")%></td> </tr> </table> <!--#include file="food.asp"--> </body> </html>
JavaEE+大数据+2个实战项目终极套餐震撼来袭
2017-05-19该套视频教程共包含16门课程,分别是Linux入门到精通、大型ERP项目实战教程、solr教程、Lucene教学视频、Java反射与注解开发、Hadoop大数据入门教程、Activiti工作流教程、redis高并发由浅入深、webservice入门教程、hibernate4入门教程、大型分布式redis+solr+Linux+nginx+springmvc+mybatis电商项目、struts2深入浅出、oracle入门到大神、springmvc深入浅出、spring 3.2教程、mybatis入门到精通教程、Java EE教程、Mysql教程。
C/C++程序员实战基础
2019-08-20<p style="text-align:left;"> <img alt="" src="https://img-bss.csdn.net/201908230135456454.jpg" /> </p> <span style="font-size:24px;"></span>
Java面试:核心考点突击大串讲
2020-07-09<p style="text-align:left;"> <span style="font-size:medium;">如何让简历成为你的大厂敲门砖?</span><span style="font-size:medium;">如何应对各种角度刁钻的问题?</span><span style="font-size:medium;">如何让不懂技术的HR快速get你的亮点?</span> </p> <p style="text-align:center;"> <img src="https://img-bss.csdnimg.cn/202101081015365047.png" alt="" /> </p>
Python自动化测试九章经
2019-09-28<p> <strong><span style="font-size:16px;color:#003399;">手工测试中遇到的坑 你踩过几个?</span></strong><strong><span style="font-size:16px;color:#003399;"></span></strong> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdnimg.cn/202012171208356126.png" alt="" /> </p> <p> <br /> </p> <p> <br /> </p> <p> <strong><span style="font-size:16px;color:#003399;">解锁自动化测试技能 打破手工测试局限</span></strong> </p> <p> <br /> </p> <p> <span style="font-size:14px;">自动化测试是测试工作的一部分,是对手工测试的一种补充。自动化测试是相对手工测试而存在的,通过所开发</span><span style="font-size:14px;">的软件测试工具、脚本等来实现,具有良好的可操作性、可重复使用和高效率等特点。</span> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <span style="font-size:14px;"><img src="https://img-bss.csdnimg.cn/202012171212024924.png" alt="" /><br /> </span> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <br /> </p> <p> <br /> </p> <p> <span style="font-size:16px;color:#003399;"><strong>Python自动化测试</strong></span> </p> <p> <span style="font-size:14px;"><strong><span style="font-size:16px;color:#003399;">系统教学+实战分析 简单易上手</span></strong><strong><span style="font-size:16px;color:#003399;"></span></strong><strong><span style="font-size:16px;color:#003399;"></span></strong><br /> </span> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <span style="font-size:14px;">课程使用的是语法简洁、提供丰富的测试库和框架的Python语言,并从测试人员的角度,梳理当前最热门的自动化测试框架和常用库,并通过实战,带你快速建立自动化测试技术体系,让测试工作更高效!<br /> </span> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <span style="font-size:14px;"><img src="https://img-bss.csdnimg.cn/202012171223546601.png" alt="" /><br /> </span> </p> <p> <br /> </p> <p> <br /> </p> <p> <strong><span style="font-size:16px;color:#003399;">3个项目实战</span></strong> </p> <p> <strong><span style="font-size:16px;color:#003399;">全程手敲代码演示 听得懂 更要会用</span></strong><strong><span style="font-size:16px;color:#003399;"></span></strong> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdnimg.cn/202012171224069333.png" alt="" /> </p> <p> <br /> </p> <p> <br /> </p> <p> <strong><span style="font-size:16px;color:#003399;">3大购课福利</span></strong> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdnimg.cn/202012180149359103.png" alt="" /> </p>
C语言入门--必须基础17讲
2017-07-28适合没有基础的人群学习C语言,简单的入门教程。帮助小白理解什么是开发,什么是编程。做的很简单,很多细节没有详细讲解,不适合用来深入研究。学了这个,你能理解什么是编程,什么是C语言。
- 一万字一篇文20分钟学会C语言和Python,十四年编程经验老鸟传授经验之道 241682021-04-14前言 昨天在直播中有粉丝问我如何快速的对编程语言入门,我想这个问题是有必要让大家知道的,相必也有很多新手对于如何快速完成编程语言的入门学习很感兴趣,本篇文将会使用 C 语言以及 Python 为例,做出对比,让大家对编程语言的共同基础知识点得以了解,方便大家的学习。 在此我做了一张图,红色标注为 Python 与 C 语言之间的知识点细微差异(指使用上),蓝色标注为较大差异。 从上图中我们可以发现,Python 与 C 语言两者差异并不明显,80% 内容较为类似;我们接下来将会同时学习这些有共同点的知识点
Linux系统编程:入门篇视频教程
2018-10-16Linux系统编程视频课程为《Linux系统编程》入门篇,主要针对零基础的Linux开发学员科普Linux系统编程的概念以及需要掌握的各种技能,掌握Linux命令编写、Linux学习路线并熟悉嵌入式设备编程的方法。为后续的Linux系统编程深入学习打下良好的基础。
企业员工角色权限管理平台(SpringBoot2.0+Mybatis+Shiro+Vue)
2019-08-07<p> <strong><span style="font-size:24px;">课程简介:</span></strong><br /> <span style="font-size:18px;">历经半个多月的时间,</span><span style="font-size:18px;">Debug</span><span style="font-size:18px;">亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库表。</span><span></span> </p> <p> <span style="font-size:18px;">其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,</span><span style="font-size:18px;">Debug</span><span style="font-size:18px;">还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程!</span><span></span> </p> <p> <br /> </p> <p> <span style="font-size:24px;"><strong>核心技术栈列表</strong></span><span style="font-size:24px;"><strong>:</strong></span> </p> <p> <br /> </p> <p> <span style="font-size:18px;">值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括</span><span style="font-size:18px;">Spring Boot</span><span style="font-size:18px;">、</span><span style="font-size:18px;">Spring MVC</span><span style="font-size:18px;">、</span><span style="font-size:18px;">Mybatis</span><span style="font-size:18px;">、</span><span style="font-size:18px;">Mybatis-Plus</span><span style="font-size:18px;">、</span><span style="font-size:18px;">Shiro(</span><span style="font-size:18px;">身份认证与资源授权跟会话等等</span><span style="font-size:18px;">)</span><span style="font-size:18px;">、</span><span style="font-size:18px;">Spring AOP</span><span style="font-size:18px;">、防止</span><span style="font-size:18px;">XSS</span><span style="font-size:18px;">攻击、防止</span><span style="font-size:18px;">SQL</span><span style="font-size:18px;">注入攻击、过滤器</span><span style="font-size:18px;">Filter</span><span style="font-size:18px;">、验证码</span><span style="font-size:18px;">Kaptcha</span><span style="font-size:18px;">、热部署插件</span><span style="font-size:18px;">Devtools</span><span style="font-size:18px;">、</span><span style="font-size:18px;">POI</span><span style="font-size:18px;">、</span><span style="font-size:18px;">Vue</span><span style="font-size:18px;">、</span><span style="font-size:18px;">LayUI</span><span style="font-size:18px;">、</span><span style="font-size:18px;">ElementUI</span><span style="font-size:18px;">、</span><span style="font-size:18px;">JQuery</span><span style="font-size:18px;">、</span><span style="font-size:18px;">HTML</span><span style="font-size:18px;">、</span><span style="font-size:18px;">Bootstrap</span><span style="font-size:18px;">、</span><span style="font-size:18px;">Freemarker</span><span style="font-size:18px;">、一键打包部署运行工具</span><span style="font-size:18px;">Wagon</span><span style="font-size:18px;">等等,如下图所示:</span><span></span> </p> <img src="https://img-bss.csdn.net/201908070402564453.png" alt="" /> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p> <p> <span style="font-size:24px;">课程内容与收益</span><span style="font-size:24px;">:</span><span></span> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/201908070403452052.png" alt="" /> </p> <p> <span style="font-size:18px;">总的来说,</span><span style="font-size:18px;">本课程是一门具有很强实践性质的“项目实战”课程,即“</span><span style="font-size:18px;">企业应用员工角色权限管理平台</span><span style="font-size:18px;">”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于</span><span style="font-size:18px;">Shiro</span><span style="font-size:18px;">的资源授权实现员工</span><span style="font-size:18px;">-</span><span style="font-size:18px;">角色</span><span style="font-size:18px;">-</span><span style="font-size:18px;">操作权限、员工</span><span style="font-size:18px;">-</span><span style="font-size:18px;">角色</span><span style="font-size:18px;">-</span><span style="font-size:18px;">数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图:</span> </p> <p> <span></span> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/201908070404285736.png" alt="" /> </p> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p> <p> <span style="font-size:18px;"><strong>以下为项目整体的运行效果截图:</strong></span> <span></span> </p> <img src="https://img-bss.csdn.net/201908070404538119.png" alt="" /> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/201908070405002904.png" alt="" /> </p> <p> <br /> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/201908070405078322.png" alt="" /> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/201908070405172638.png" alt="" /> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/201908070405289855.png" alt="" /> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/201908070405404509.png" alt="" /> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/201908070405523495.png" alt="" /> </p> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p> <p style="text-align:left;"> <span style="font-size:18px;">值得一提的是,在本课程中,</span><span style="font-size:18px;">Debug</span><span style="font-size:18px;">也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下图所示:</span><span></span> </p> <img src="https://img-bss.csdn.net/201908070406328884.png" alt="" /> <p> <br /> </p>
Mysql数据库基础入门视频教程
2018-10-24Mysql数据库基础入门视频课程:属于零基础Mysql数据库教程,从数据库的基本专业术语介绍到数据库软件的下载使用 一步一步带你安装MySql。SQL阶段你将学会如果使用数据定义语言DDL,数据操作语言DML,数据查询语言DQL 在学会各中查询语句之后,会带你学习数据的完整性, 掌握如果正确的向数据库中添加数据 以上掌握技能之后,将会带你学习如何进行多表操作,关系的建立,各种连接查询等. 常用函数,事务的学习,您将学到什么是事务的提交,回滚,并发操作及脏读,幻读. 最后视图,存储过程,索引的学习,将会带你掌握更高级的数据库技术.
-
下载
四川省仁寿一中北校区等四校2020-2021学年高一下学期第一次月考英语试题 Word版含答案.docx
四川省仁寿一中北校区等四校2020-2021学年高一下学期第一次月考英语试题 Word版含答案.docx
-
下载
江西省莲花中学2020-2021学年高二下学期第一次周考生物试卷 Word版含答案.doc
江西省莲花中学2020-2021学年高二下学期第一次周考生物试卷 Word版含答案.doc
-
下载
辽宁省沈阳市郊联体2021届高三下学期一模考试 语文 Word版含答案bychun.doc
辽宁省沈阳市郊联体2021届高三下学期一模考试 语文 Word版含答案bychun.doc
-
下载
福建省南安市侨光中学2020-2021学年高一下学期第一次阶段考试化学试题 Word版含答案.docx
福建省南安市侨光中学2020-2021学年高一下学期第一次阶段考试化学试题 Word版含答案.docx
-
下载
江西省萍乡市莲花中学2020-2021学年高二下学期第一次月考数学(理)试卷 Word版含答案.doc
江西省萍乡市莲花中学2020-2021学年高二下学期第一次月考数学(理)试卷 Word版含答案.doc
-
下载
浙江省山河联盟学校2020-2021学年高一下学期4月月考历史试卷 Word版含答案.docx
浙江省山河联盟学校2020-2021学年高一下学期4月月考历史试卷 Word版含答案.docx
-
下载
上海市上海交通大学附属中学2021届高三下学期摸底考英语试卷 Word版含答案.docx
上海市上海交通大学附属中学2021届高三下学期摸底考英语试卷 Word版含答案.docx
-
下载
宁夏中卫市2021届高三下学期第二次模拟考试地理试题 Word版含答案.docx
宁夏中卫市2021届高三下学期第二次模拟考试地理试题 Word版含答案.docx
-
下载
四川省成都市高新区2021届高三上学期第二次阶段质量检测文综历史试题 Word版含答案.doc
四川省成都市高新区2021届高三上学期第二次阶段质量检测文综历史试题 Word版含答案.doc
-
下载
浙江省山河联盟学校2020-2021学年高二下学期4月月考物理试题 Word版含答案.doc
浙江省山河联盟学校2020-2021学年高二下学期4月月考物理试题 Word版含答案.doc
