2,4,12,68之后下一个数是什么?

2=1^0+1

4=2^1+2

12=3^2+3

68=4^3+4  

630=5^4+5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 该资料是《C语言入门经典(第4版)》的源代码及课后练习答案 对应的书籍资料见: C语言入门经典(第4版) 基本信息 原书名: Beginning C: From Novice to Professional, Fourth Edition 原出版社: Apress 作者: (美)Ivor Horton 译者: 杨浩 出版社:清华大学出版社 ISBN:9787302170839 上架时间:2008-4-15 出版日期:2008 年4月 开本:16开 页码:571 版次:4-1 编辑推荐    本书是编程语言先驱者Ivor Horton的经典之作,是C语言方面最畅销的图书品种之一,在世界范围内广受欢迎,口碑极佳。    本书的目标是使你在C语言程序设计方面由一位初学者成为一位称职的程序员。 内容简介   本书是编程语言先驱者Ivor Horton的经典之作,是C语言方面最畅销的图书品种之一。本书集综合性、实用性为一体,是学习C语言的优秀入门教材,在世界范围内广受欢迎,口碑极佳。书中除了讲解C程序设计语言,还广泛介绍了作为一名C程序设计人员应该掌握的必要知识,并提供了大量的实用性很强的编程实例。本书的目标是使你在C语言程序设计方面由一位初学者成为一位称职的程序员。读者基本不需要具备任何编程知识,即可通过本书从头开始编写自己的C程序。 作译者 作者   Ivor Horton是世界著名的计算机图书作家,主要从事与编程相关的咨询及撰写工作,曾帮助无程序员步入编程的殿堂。他曾在IBM工作多年,能使用多种语言进行编程(在多种机器上使用汇编语言和高级语言),设计和实现了实时闭环工业控制系统。Horton拥有丰富的教学经验(教学内容包括C、C++、Fortran、PL/1、APL等),同时还是机械、加工和电子CAD系统、机械CAM系统和DNC/CNC系统方面的专家。IvorHorton还著有关于C、C++和Java的多部入门级好书,如《C语言入门经典(第4版)》和《C++入门经典(第3版)》。 译者   杨浩,知名译者,大学讲师,从事机械和计算机方面的教学和研究多年,发表论文篇,参编和翻译的图书多达20余部,还曾多次获得市部级奖项。近几年一直在跟踪.NET技术的发展,积极从事.NET技术文档和图书的翻译工作。 目录 封面 -12 封底 572 前言 -9 目录 -6 第1章 C语言编程 1 1.1 创建C程序 1 1.1.1 编辑 1 1.1.2 编译 2 1.1.3 链接 2 1.1.4 执行 3 1.2 创建第一个程序 4 1.3 编辑第一个程序 4 1.4 处理错误 5 1.5 剖析一个简单的程序 6 1.5.1 注释 6 1.5.2 预处理指令 7 1.5.3 定义main()函 7 1.5.4 关键字 8 1.5.5 函体 8 1.5.6 输出信息 9 1.5.7 参 10 1.5.8 控制符 10 1.6 用C语言开发程序 12 1.6.1 了解问题 12 1.6.2 详细设计 12 1.6.3 实施 13 1.6.4 测试 13 1.7 函及模块化编程 13 1.8 常见错误 17 1.9 要点 17 1.10 小结 18 1.11 习题 18 第2章 编程初步 19 2.1 计算机的内存 19 2.2 什么是变量 21 2.3 存储值的变量 21 2.3.1 整变量 21 2.3.2 变量的命名 25 2.3.3 变量的使用 26 2.3.4 变量的初始化 28 2.3.5 算术语句 28 2.4 变量与内存 34 2.5 整变量类型 35 2.5.1 无符号的整类型 35 2.5.2 使用整类型 36 2.5.3 指定整常量 37 2.6 浮点 38 2.7 浮点变量 38 2.8 使用浮点完成除法运算 39 2.8.1 控制小 40 2.8.2 控制输出的字段宽度 41 2.9 较复杂的表达式 41 2.10 定义常量 44 2.10.1 极限值 46 2.10.2 sizeof运算符 49 2.11 选择正确的类型 50 2.12 强制类型转换 53 2.12.1 自动转换类型 53 2.12.2 隐式类型转换的规则 54 2.12.3 赋值语句中的隐式类型转换 54 2.13 再谈据类型 55 2.13.1 字符类型 56 2.13.2 字符的输入输出 57 2.13.3 宽字符类型 60 2.13.4 枚举 60 2.13.5 存储布尔值的变量 63 2.13.6 复类型 63 2.14 赋值操作的op=形式 66 2.15 学函 68 2.16 设计一个程序 69 2.16.1 问题 69 2.16.2 分析 69 2.16.3 解决方案 71 2.17 小结 75 2.18 练习 76 第3章 条件判断 79 3.1 判断过程 79 3.1.1 算术比较 80 3.1.2 涉及关系运算符的表达式 80 3.1.3 基本的if语句 81 3.1.4 扩展if语句:if-else 84 3.1.5 在if语句中使用代码块 86 3.1.6 嵌套的if语句 87 3.1.7 更多的关系运算符 90 3.1.8 逻辑运算符 93 3.1.9 条件运算符 97 3.1.10 运算符的优先级 99 3.2 多项选择问题 103 3.2.1 给多项选择使用else-if语句 104 3.2.2 switch语句 104 3.2.3 goto语句 113 3.3 按位运算符 114 3.3.1 按位运算符的op=用法 116 3.3.2 使用按位运算符 117 3.4 设计程序 120 3.4.1 问题 120 3.4.2 分析 120 3.4.3 解决方案 121 3.5 小结 124 3.6 练习 124 第4章 循环 127 4.1 循环 127 4.2 递增和递减运算符 128 4.3 for循环 129 4.4 for循环的一般语法 132 4.5 再谈递增和递减运算符 133 4.5.1 递增运算符 133 4.5.2 递增运算符的前置和后置形式 134 4.5.3 递减运算符 134 4.6 再论for循环 135 4.6.1 修改for循环变量 137 4.6.2 没有参的for循环 138 4.6.3 循环内的break语句 138 4.6.4 使用for循环限制输入 141 4.6.5 生成伪随机整 143 4.6.6 再谈循环控制选项 145 4.6.7 浮点类型的循环控制变量 146 4.7 while循环 147 4.8 嵌套循环 150 4.9 嵌套循环和goto语句 153 4.10 do-while循环 154 4.11 continue语句 157 4.12 设计程序 157 4.12.1 问题 157 4.12.2 分析 157 4.12.3 解决方案 158 4.13 小结 170 4.14 习题 170 第5章 组 173 5.1 组简介 173 5.1.1 不用组的程序 173 5.1.2 什么是组 175 5.1.3 使用组 176 5.2 内存 179 5.3 组和地址 182 5.4 组的初始化 184 5.5 确定组的大小 184 5.6 多维组 185 5.7 多维组的初始化 187 5.8 设计一个程序 191 5.8.1 问题 192 5.8.2 分析 192 5.8.3 解决方案 193 5.9 小结 200 5.10 习题 200 第6章 字符串和文本的应用 201 6.1 什么是字符串 201 6.2 处理字符串和文本的方法 203 6.3 字符串操作 206 6.3.1 连接字符串 206 6.3.2 字符串组 208 6.4 字符串库函 210 6.4.1 使用库函复制字符串 210 6.4.2 使用库函确定字符串的长度 211 6.4.3 使用库函连接字符串 212 6.4.4 比较字符串 213 6.4.5 搜索字符串 216 6.5 分析和转换字符串 219 6.5.1 转换字符 222 6.5.2 将字符串转换成值 225 6.7 使用宽字符串 225 6.8 设计一个程序 228 6.8.1 问题 229 6.8.2 分析 229 6.8.3 解决方案 229 6.9 小结 237 6.10 习题 237 第7章 指针 239 7.1 指针初探 239 7.1.1 声明指针 240 7.1.2 通过指针访问值 241 7.1.3 使用指针 244 7.1.4 指向常量的指针 248 7.1.5 常量指针 248 7.1.6 指针的命名 249 7.2 组和指针 249 7.3 多维组 252 7.3.1 多维组和指针 255 7.3.2 访问组元素 257 7.4 内存的使用 260 7.4.1 动态内存分配:malloc()函 260 7.4.2 分配内存时使用sizeof运算符 261 7.4.3 用calloc()函分配内存 265 7.4.4 释放动态分配的内存 265 7.4.5 重新分配内存 267 7.5 使用指针处理字符串 268 7.5.1 更多地控制字符串输入 268 7.5.2 使用指针组 269 7.6 设计程序 280 7.6.1 问题 280 7.6.2 分析 281 7.6.3 解决方案 281 7.7 小结 291 7.8 习题 291 第8章 程序的结构 293 8.1 程序的结构 293 8.1.1 变量的作用域和生存期 294 8.1.2 变量的作用域和函 297 8.2 函 297 8.2.1 定义函 298 8.2.2 return语句 301 8.3 按值传递机制 304 8.4 函声明 305 8.5 指针用作参和返回值 307 8.5.1 常量参 310 8.5.2 从函中返回指针值 318 8.5.3 在函中递增指针 322 8.6 小结 322 8.7 习题 323 第9章 函再探 325 9.1 函指针 325 9.1.1 声明函指针 325 9.1.2 通过函指针调用函 326 9.1.3 函指针组 329 9.1.4 作为变元的函指针 331 9.2 函中的变量 334 9.2.1 静态变量:函内部的追踪 334 9.2.2 在函之间共享变量 336 9.3 调用自己的函:递归 338 9.4 变元个可变的函 341 9.4.1 复制va_list 344 9.4.2 长度可变的变元列表的基本规则 344 9.5 main()函 345 9.6 结束程序 346 9.7 函库:头文件 347 9.8 提高性能 348 9.8.1 内联声明函 348 9.8.2 使用restrict关键字 348 9.9 设计程序 349 9.9.1 问题 349 9.9.2 分析 349 9.9.3 解决方案 351 9.10 小结 367 9.11 习题 368 第10章 基本输入和输出操作 369 10.1 输入和输出流 369 10.2 标准流 370 10.3 键盘输入 371 10.3.1 格式化键盘输入 371 10.3.2 输入格式控制字符串 372 10.3.3 输入格式字符串中的字符 377 10.3.4 输入浮点的各种变化 378 10.3.5 读取十六进制和八进制值 379 10.3.6 用scanf()读取字符 381 10.3.7 scanf()的陷阱 383 10.3.8 从键盘上输入字符串 383 10.3.9 键盘的非格式化输入 384 10.4 屏幕输出 389 10.4.1 使用printf()格式输出到屏幕 389 10.4.2 转义序列 391 10.4.3 整输出 392 10.4.4 输出浮点 394 10.4.5 字符输出 395 10.5 其他输出函 398 10.5.1 屏幕的非格式化输出 398 10.5.2 组的格式化输出 399 10.5.3 组的格式化输入 400 10.6 打印机输出 400 10.7 小结 401 10.8 习题 401 第11章 结构化据 403 11.1 据结构:使用struct 403 11.1.1 定义结构类型和结构变量 405 11.1.2 访问结构成员 405 11.1.3 未命名的结构 408 11.1.4 结构组 408 11.1.5 表达式中的结构 411 11.1.6 结构指针 411 11.1.7 为结构动态分配内存 412 11.2 再探结构成员 414 11.2.1 将一个结构作为另一个结构的成员 414 11.2.2 声明结构中的结构 415 11.2.3 将结构指针用作结构成员 416 11.2.4 双向链表 420 11.2.5 结构中的位字段 423 11.3 结构与函 424 11.3.1 结构作为函的变元 424 11.3.2 结构指针作为函变元 425 11.3.3 作为函返回值的结构 426 11.3.4 修改程序 430 11.3.5 二叉树 433 11.4 共享内存 442 11.4.1 联合 442 11.4.2 联合指针 444 11.4.3 联合的初始化 444 11.4.4 联合中的结构成员 444 11.5 定义自己的据类型 446 11.5.1 结构与类型定义(typedef)功能 446 11.5.2 使用typedef简化代码 447 11.6 设计程序 448 11.6.1 问题 448 11.6.2 分析 448 11.6.3 解决方案 448 11.7 小结 459 11.8 习题 459 第12章 处理文件 461 12.1 文件的概念 461 12.1.1 文件中的位置 462 12.1.2 文件流 462 12.2 文件访问 462 12.2.1 打开文件 463 12.2.2 文件重命名 465 12.2.3 关闭文件 465 12.2.4 删除文件 466 12.3 写入文本文件 466 12.4 读取文本文件 467 12.5 将字符串写入文本文件 470 12.6 从文本文件中读入字符串 471 12.7 格式化文件的输入输出 474 12.7.1 格式化文件输出 474 12.7.2 格式化文件输入 475 12.8 错误处理 477 12.9 再探文本文件操作模式 478 12.10 二进制文件的输入输出 479 12.10.1 指定二进制模式 479 12.10.2 写入二进制文件 480 12.10.3 读取二进制文件 480 12.11 在文件中移动 488 12.11.1 文件定位操作 489 12.11.2 找出我们在文件中的位置 489 12.11.3 在文件中设定位置 490 12.12 使用临时文件 496 12.12.1 创建临时文件 496 12.12.2 创建唯一的文件名 496 12.13 更新二进制文件 497 12.13.1 修改文件的内容 502 12.13.2 从键盘读取记录 503 12.13.3 将记录写入文件 504 12.13.4 从文件中读取记录 505 12.13.5 写入文件 506 12.13.6 列出文件内容 507 12.13.7 更新已有的文件内容 508 12.14 文件打开模式小结 515 12.15 设计程序 516 12.15.1 问题 516 12.15.2 分析 516 12.15.3 解决方案 516 12.16 小结 522 12.17 习题 522 第13章 支持功能 523 13.1 预处理 523 13.1.1 在程序中包含头文件 523 13.1.2 外部变量及函 524 13.1.3 替换程序源代码 525 13.1.4 宏替换 526 13.1.5 看起来像函的宏 526 13.1.6 多行上的预处理指令 528 13.1.7 字符串作为宏参 528 13.1.8 结合两个宏展开式的结果 529 13.2 预处理器逻辑指令 530 13.2.1 条件编译 530 13.2.2 测试指定值的指令 531 13.2.3 多项选择 531 13.2.4 标准预处理宏 532 13.3 调试方法 533 13.3.1 集成的调试器 533 13.3.2 调试阶段的预处理器 533 13.3.3 使用assert()宏 537 13.4 其他库函 539 13.4.1 日期和时间函库 539 13.4.2 获取日期 543 13.5 小结 549 13.6 习题 549 附录A 计算机中的学知识 551 附录B ASCII字符代码定义 559 附录C C语言中的保留字 565 附录D 输入输出格式指定符 567 前言   欢迎使用《C语言入门经典(第4版)》。研读本书,你就可以成为一位称职的C语言程序员。从许多方面来说,C语言都是学习程序设计的理想起步语言。C语言很简洁,因此无须学习大量的语法,就能够开始编写真正的应用程序。除了简明易学外,它还是一种功能非常强大的语言,至今仍被专业人士广泛使用。C语言的强大之处主要体现在,它能够进行各种层次的程序设计,从硬件设备驱动程序和操作系统组件到大规模的应用程序,都能胜任。事实上,任何计算机都支持C语言编译器,因此,当我们学会了C语言,就可以在任何环境下进行程序设计。最后一点,掌握了C语言,就为理解面向对象的C++语言奠定了良好的基础。.   积极热情的程序员都必将面对三大障碍,即掌握适用于所有程序设计语言的术语,理解如何使用一种语言的元素(而不仅仅只知道它们的概念)以及领会如何在实际环境中应用这种语言,本书的目的就是将这些障碍降到最低。   术语是专业人士与优秀的业余人士们进行交流时必不可少的,因此掌握它们是必需的。本书会让你理解这些术语,并自如地在各种环境下使用它们。这样才能更有效地使用大多软件产品附带的文档,且能轻松地阅读和学习大多程序设计语言的相关文献。   显然,理解语言元素的语法和作用是学习一门语言的关键,不过认识语言的特性如何发挥作用和如何应用它们,也同等重要。在说明每种语言特性与特定问题的关系时,本书采用实际应用的程序示例,而不只是代码片断。这些示例提供了实践的基础,你可以任意改动它们,研究改动后的效果。   要理解在特定背景中的程序设计方法,需要理解应用独立语言元素的机理。为了帮助理解它们,本书每章最后都给出一个较复杂的程序,该程序应用了本章前面已经学习的知识。这些程序可帮助你获得开发程序的能力和信心,了解如何综合运用各种语言元素。最重要的是,它们能让你了解设计真实程序时会遇到的问题以及如何管理实际的代码。   学习任何程序设计语言,都要认识几件事情。首先,要学的东西很多,但是掌握了它们之后,你会有极大的成就感。其次,学习的过程很有趣,你将体会到这一点。第三,你只有通过动手实践才能学会程序设计。最后,学习程序设计语言比你想象的容易得多,所以你肯定能掌握它。   如何使用本书   作者认为动手实践是最好的方法,你应当立刻开始编写自己的第一个程序。每一章都有几个把理论应用于实践的程序,这些示例是学习本书的关键。建议读者输入并运行文中的示例,因为输入程序对记住语言元素有极大的帮助。此外,你还应该做每章后面的练习。当你第一次使一个程序运行起来,尤其是在试图解决自己的问题时,快速的进展会使你有很大的成就感。..   刚开始,学习的进展不会太快,不过随着逐渐深入,我们会加快学习的速度。每一章都会涉及很多基础知识,因此在学习新的内容之前,需要花些时间,确保理解了前面学过的所有知识。实践各部分的代码,并尝试实现自己的想法,这是学习程序设计语言的一个重要部分。尝试修改书中的程序,看看还能让它们做什么,这是很有趣的。不要害怕尝试,如果不明白某一点如何使用,输入几种变体,看看会出现哪些情况。好的学习方法是先通读整章,全面了解其中介绍的内容,然后再实践其中的所有程序示例。   你可能会觉得某些章末尾的程序非常难。如果第一次读这样的程序没有完全理解,不必担心。第一次难免会觉得难以理解,因为它们通常都是把你所学的知识应用到了相当复杂的问题中。如果你真的不能理解,可以略过那些章末尾的程序,继续学习下一章,然后再回头研究这些程序。甚至可以在学完全书之后再来研究它们。之所以演示这些程序是因为即使读完了本书,它们对你来说仍是非常有用的资源。   本书读者对象   本书的目的是教你如何尽可能简单快速地编写有用的程序,如果你属于下列情况之一,那么本书就非常适合你:   ●刚接触程序设计,但想直接深入了解C语言,从头开始学习程序设计及编写C语言程序。   ●以前有一点程序设计经历,对其基本概念有一定了解,也许曾经使用过BASIC或PASCAL。现在想学习C语言,进一步提高自己的程序设计技能。   本书并未假设此前你对程序设计的知识有所了解,不过本书会很快地从基本概念转入到实际应用。学完了本书,你就为自己的C语言程序设计奠定了全面的基础。   使用本书的条件   要使用本书,需要一台安装了C语言编译器和库的计算机,这样才能执行书中的示例,还需要一个程序文本编辑器,用于创建源代码文件。你使用的编译器要很好地支持C语言国际标准:ISO/IEC 9899。你还需要一个用于创建和修改代码的编辑器,可以采用任何纯文本编辑器创建源程序文件,如Notepad或vi。不过,采用专为编辑C语言代码设计的编辑器更有帮助。   要最大限度地发挥本书的功效,你需要有学习的意愿、成功的渴望,当学习不顺利,觉得前途渺茫时,还要有坚持下去的决心。几乎每个人在初次学习程序设计时都会在某处觉得迷茫。当你发现自己艰难地掌握了C语言的某个方面时,要坚持下去,迷雾一定会消散,你会觉得为什么当初我不明白这一点呢?也许你明白要做到这些将会很难,不过相信你一定会惊讶自己能在较短的时间内取得很大进步。本书会帮助你开始自己的实践之旅,使你成为成功的程序设计员。   本书采用的约定   本书的文本和布局采用了许多不同的样式,以便区分各种不同的信息。大多样式表达的含义都很明显,其中程序代码以类似下面的样子出现: .  int main(void)   {   printf("\nBeginning C");   return 0;   }   如果代码片段是从前面的实例修改而来的,修改过的代码行就用粗体显示,如下所示:   int main(void)   {   printf("\nBeginning C by Ivor Horton");   return 0;   }   程序代码中还使用了各种“括号”。它们之间的差别非常重要,不能互换。本书中称( )为圆括号,{ }为大括号,[ ]为方括号。   本书源代码下载   从Apress的站点可以下载本书中的所有代码和练习的解决方案:http://www.apress.com。也可以访问www.tupwk.com.cn/downpage下载本书中的所有代码和解决方案。...   
目录 1. DB2 1.1. 创建一个返回结果集的存储过程\自定义函 12 1.2. DB2 高级应用 14 1.3. 删除表据时候出现日志已满的解决方法 24 1.4. DB2快照函全解析 25 1.5. DB2中的22个命令小技巧 26 1.6. DB2实现类型ORACLE的一些功能 29 1.7. 字符据类型转换的时候需要注意的问题(原) 30 1.8. 本地谓词的使用注意(原) 31 1.9. windows/Linux或Unix下查看DB2端口号 31 1.10. 尽量让fetch first n row only或者分页的时候结合optimize for n rows使用(原) 32 1.11. 格式化字符串(原) 33 1.12. 10大DB2优化技巧 33 1.13. 使用DB2的整转换浮点小时注意(原) 41 1.14. 使用递归制造测试据(原) 42 1.15. 尽量使用自定义函来代替存储过程 42 1.16. VALUES(…) 与 VALUES …的区别(原) 44 1.17. DB2的表锁和行锁 45 1.18. 修改表结构后不允许对表进行任何操作(原) 57 1.19. 解决暂挂表(原) 58 1.20. DB2LOOK语法及使用 58 导出表结构的表结构脚本 59 1.21. DB2的函大全 64 1.22. DB2据库为单个会话锁定技巧 64 1.23. EXISTS和COUNT(*)的使用(原) 68 1.24. 如果表比较大,进行COUNT的时候,可选择COUNT_BIG(*) 69 1.25. 序列(SEQUENCE) (原) 69 1.26. 据的导入和导出 69 1 加载据: 69 2 卸载据: 70 3 在Load过程中使用的Exception 表有何作用,该如何创建?(原) 70 4如何导出(EXPORT),导入(LOAD)包含由公式生成字段的表 70 5 LOAD命令和自生成列值 72 6 用load命令和identityoverride参向有identity列的表中装载据后的注意事项 74 1.27. 利用快照函查询据库服务器本地以及远程的连接 74 1.28. 查看SQL的执行计划 74 1.29. 如何查看据库ABC的配置文件的内容? 75 1.30. 查看是哪张表挂起(原) 75 1.31. 导出(导入)据库的所有表据(db2move) 75 1.32. 备份据库,恢复据库 75 1.33. 建立据库、缓冲池、表空间、表案例 77 1.34. 建立别名 78 1.35. 建立视图 78 1.36. 建立唯一性索引 78 1.37. 查看表的索引 79 1.38. 查看表 79 1.39. 建立触发器 79 1.40. 查看存储过程 79 1.41. view application 79 1.42. kill application 79 1.43. lock table(x) 79 1.44. lock table(s) 80 1.45. 列出所有的系统表 80 1.46. 列出系统据库目录 80 1.47. 显示当前活动据库 80 1.48. 查看命令选项 80 1.49. 表空间 80 1.50. 表空间容器 80 1.51. 如何知道SEQUENCE的状况 81 1.52. 如何知道SCHEMA的状况 81 1.53. 如何知道INDEX的状况 81 1.54. 查看装载据库的instance 81 1.55. 创建据库的instance 81 1.56. 创建据库的catalog 81 1.57. 如何在命令行下执行DB2脚本(script) 82 1.58. 怎么样获取表结构以及索引的信息 82 1.59. 如果怀疑应用程序有死锁现象,如何确认是否死锁,并判断是哪些程序引起的死锁? 84 1.60. 据库创建以后相关的目录和文件都有哪一些? 85 1.61. 自增列(IDENTITY) 86 1.62. 修改表结构的注意事项(原) 86 1.63. 可使用VALUES 来代替多个[not] in的条件语句 87 1.64. 计算据库缓冲池的命中率公式 87 1.65. 查看表空间状态 88 1.66. UPDATE的N种用法 88 Examples 88 1.67. 查看表状态的快照命令 90 1.68. RUNSTATS的使用案例 91 1.69. Bufferpool设置过大导致据库无法启动的解决方案 98 1.70. 查看DB2是否存在僵尸进程 98 1.71. 监控执行成本最高的SQL语句 99 1.72. 监控运行最长的SQL语句 99 1.73. 给表增加generated al
ExtAspNet v2.2.1 ExtAspNet是一组专业的Asp.net控件库,拥有原生的AJAX支持和丰富的UI效果, 目标是创建没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。 支持的浏览器: IE 7.0+, Firefox 3.0+, Chrome 2.0+, Opera 9.5+, Safari 3.0+ 注:ExtAspNet基于一些开源的程序ExtJS, HtmlAgilityPack, Nii.JSON, YUICompressor。 示例: http://extasp.net/ 开源: http://extaspnet.codeplex.com/ 博客: http://sanshi.cnblogs.com/ 邮箱: [email protected] 发布历史: +2010-03-28 v2.2.1 +为TabStrip的GetAddTabReference函增加重载方法,以便指定Tab的图标(feedback:mmdcup)。 -修正此函通过PageContext.RegisterStartupScript调用时不能正确显示Icon的BUG(feedback:zhaowenke)。 -修正basic/hello.aspx示例在单独浏览器打开后,不能弹出对话框的BUG。 -隐藏示例首页最外层RegionPanel的边框ShowBorder="false"。 +集成Extjs最新版本v3.1.1。 -增加一个新的Theme - Access。 -修正了Firefox下Zoom In/Out时页面消失的BUG。 -删除Panel的EnableLightBackgroundColor属性,同时EnableBackgroundColor只支持Blue和Gray两种Theme。 +2010-01-31 v2.2.0 -使得Asp.net的控件ImageButton具有和Asp.net的Button控件类似的行为(Ajax提交)(feedback:261629698)。 +TabStrip增加GetAddTabReference和GetRemoveTabReference两个函,用来向TabStrip控件动态增加删除Tab。 -增加示例tabstrip/tabstrip_addtab.aspx。 -重构了示例网站的架构,目前只有一层IFrame结构。 -为TabStrip增加EnableTabCloseMenu属性,是否启用右键菜单,可用来关闭当前Tab和所有其他Tab。 -为NumberBox增加DecimalPrecision属性,用来控制小点后的位(需要设置NoDecimal="false")(feedback:zqmars)。 -Window控件更新。 -关闭按钮默认直接关闭,不会弹出确认对话框。 -GetConfirmFormModifiedHideReference的函中的ConfirmFormModified简化为Confirm,所以此函更名为GetConfirmHideReference。 -增加两个属性EnableConfirmOnClose(默认false),CloseAction(Hide, HideRefresh, HidePostBack)。 -修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。 -删除Button控件的SystemIcon属性,比如以前这样定义SystemIcon="Close",现在需要这样定义Icon="SystemClose"。 -WindowPosition默认居中,而不是黄金分割位置。 +Button, Window等控件弹出位置属性的变化。 -Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target="_self" -> Target="Self", Target="_parent" -> Target="Parent"。 -MenuButton, LinkButton, Button, LinkButtonField的ConfirmTarget属性由字符串变为枚举类型,可以取三个枚举值Self, Parent, Top。 -Confirm.GetShowReference的最后一个target变为枚举类型。 -Alert.GetShowReference中的showInParent参也变为Target枚举类型。 -MenuButton, LinkButton, Button, LinkButtonField增加ValidateTarget用来控制表单验证失败时提示对话框的显示位置。 +2010-01-06 v2.1.9 -集成Extjs最新版本v3.1.0。 -修正灰色皮肤的CSS问题。 -修正Grid的列名中不能包含中文字符的BUG(feedback:davidwen)。 -为Web.config和PageManager增加属性AjaxTimeout(单位秒,默认30秒)。 -修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(feedback:Violet)。 -Button控件将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle="float:left;"属性。 -修正了弹出菜单的位置在Firefox下不正确的BUG(feedback:eroach)。 -为TriggerBox和TwinTriggerBox增加EnableEdit属性。 -使用Hidden来显示隐藏ExtAspNet控件,而不是使用Visible属性(Visible目前设置为只读属性)。 -使用Hidden控制Window控件的显示隐藏,Popup已经标记为Obsolete属性。 -Window的实例方法GetCloseReference等以及ActiveWindow的静态方法GetCloseReference等,其中的Close全部改为Hide。 -增加TabStrip中Tab控件可关闭属性EnableClose(默认为false)以及两个方法GetShowReference和GetHideReference(feedback:anson)。 -修正绑定到Tree的XMLDocument中Icon属性映射错误(feedback:nopnop9)。 -修正HtmlEditor不能编辑的BUG(feedback:TheBox)。 -修正IE下有时会出现空白页面的情况(feedback:olivia919)。 +2009-12-06 v2.1.8 -修正了使用IFrame的Window关闭后不能再次打开的BUG(feedback:alexa99)。 -修正了IE下Grid中的一个JS问题(feedback:lqm4108)。 -修正Alert消息中引号未编码导致的JS错误(feedback:sun1299shine)。 +集成extjs3.0.3。 -修正弹出对话框的宽度计算错误(会保持最小的状态)。 -增加新的皮肤Gray。 -为示例工程添加改变语言和皮肤的下拉列表。 -为PageContext增加静态函Refresh,在切换语言和皮肤时使用。 +2009-12-01 v2.1.7 -增加示例(iframe/parent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(feedback:eroach)。 -修正一些书写错误(feedback:bmck)。 -从Region控件中删除SplitColor属性,增加CollapseMode, EnableSplitTip, SplitTip, CollapsibleSplitTip属性(feedback:bmck)。 -BorderPanel更名为RegionPanel。 -DropDownList拥有MarkInvalid方法(feedback:sun1299shine)。 -增加中国的省市县三级联动示例(data/shengshixian.aspx)(feedback:Blues T)。 -修正了使用IFrameUrl的Tab在切换过程中会重复加载的问题,这是一个在v2.1.6引入的问题(feedback:eroach)。 -修正了启用AutoPostBack的Grid,其RowClick会覆盖LinkButtonField, HyperLinkField, CheckBoxField的点击事件(feedback:yymaoji)。 +2009-11-26 v2.1.6 +修正动态创建Grid列的BUG(feedback:gxpan)。 -增加示例(data/grid_dynamic_columns.aspx)。 -修正Form不能自适应浏览器大小的改变(feedback:kaywood)(WorkItem#6309)。 -增加重载方法Alert.Show(message, title, icon)(feedback:TheBox)(WorkItem#6353)。 -为容器控件(比如Panel,Region,Tab等)增加AJAX属性IFrameUrl(feedback:BluesT)。 -重新设计模拟树的下拉列表的实现,避免选中某项后的闪烁。 +2009-11-21 v2.1.5 +Tree优化。 -修正Expanded项和Checked项的状态在回发改变后不能保持的BUG。 -GetNodeById更名为FindNode,保持和FindControl一致命名。 -删除CheckedNodeIDArray属性,增加GetCheckedNodes和GetCheckedNodeIDs函。 -删除ExpandedNodeIDArray属性,增加GetExpandedNodes和GetExpandedNodeIDs函。 -增加示例(data/tree_select_run.aspx),如何选中当前节点的所有子节点(feedback:wjl_wjl520)。 +TreeNode的属性NodeId被重命名为NodeID,这是ExtAspNet中的一个命名约定。 -同时更名的还有GridColumn的ColumnId->ColumnID,GetColumnId->GetColumnID。 -Grid1.Columns.FindColumnById函被Grid1.FindColumn所替代。 -为TreeCheckEventArgs,TreeExpandEventArgs,TreeCommandEventArgs增加Node属性。 -为所有控件增加Focus(覆盖Control默认的Focus函)和GetFocusReference函。 -增加示例(other/custom_postback.aspx)(feedback:thebox)。 -如何自定义Javascript脚本和C#处理函来响应键盘事件。 -为Tree增加AutoLeafIdentification属性。 -增加示例(tree_auto_leaf_identification.aspx)(feedback:wdrabbit)。 +2009-11-17 v2.1.4 -修正Window的关闭按钮提示信息一直是中文的BUG(feedback:thebox)。 -部分ExtAspNet控件的设计时支持(会在后续版本中逐步完善)。 -v0.2beta2版本中关于PersistChildren(true)的描述有误,这个是设计时属性,和运行时是否保持状态没有关系。 -修正CheckBox控件的CheckedChanged事件会被触发两次的BUG(Data PostBack->AutoPostBack, Event PostBack->EnablePostBack)。 -为TextBox,TextArea,DatePicker,NumberBox,TriggerBox等控件增加AutoPostBack属性(feedback:dk3214)。 +为表单字段增加RequiredMessage,MaxLengthMessage,MinLengthMessage属性,用于指定验证失败时提示信息。 -为空则使用默认的提示信息,默认的提示信息支持多语言,建议一般情况下使用默认信息。 +为表单字段增加MarkInvalid和GetMarkInvalidReference函(feedback:sun1299shine)。 -增加示例:form/form_validate.aspx +2009-10-19 v2.1.3 +增加支持在AJAX时改变的控件属性列表(/ajax.aspx)。 -ExtAspNet支持原生的AJAX,也就是说控件的属性改变在AJAX过程中会反映到页面中,但并不是所有的控件属性都支持AJAX改变。 -加载s.gif图片在本机进行,不会请求extjs.com远程资源(feedback:efrigate43,abaocoole)。 -在AJAX回发后确保Asp.net的按钮控件仍然具有AJAX的特性。 -更新/basic/login.aspx示例,使用验证图片(feedback:kedee)。 -为Grid增加AutoPostBack属性和RowClick事件,示例在/data/grid_autopostback.aspx(feedback:chenguizhu2006)。 -为所有的表单字段增加AJAX属性ReadOnly(feedback:skydb)。 -Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。 +2009-09-27 v2.1.2 -为Tree控件增加GetExpandAllNodesReference和GetCollapseAllNodesReference两个函。 -修正RELEASE版本下多语言加载的BUG(feedback:yigehaoren)。 -增加pt_BR语言,由Ujvari提供。 +为所有Panel(包括Grid,Tree,Form等)增加枚举类型Icon,其中包含1700多个小图标。 -如果Panel具有IconUrl属性,则IconUrl优先于Icon。 -所有Icon的列表在icon.aspx。 -为Button,MenuItem(MenuButton,MenuHyperLink),AccordionLink,TreeNode,Image(如果ImageUrl为空,则取Icon的值)增加Icon属性。 +2009-09-15 v2.1.1 -修正不能动态修改AccordionPane属性Items的BUG。 +为Button, MenuButton, LinkButton, LinkButtonField增加ConfirmTarget。 -如果需要在父页面弹出确认对话框,需要设置ConfirmTarget="_parent"(类似Window控件的Target="_parent")。 +为ExtAspNet.Alert.Show增加点击确定的JavaScript回调函。 -一个典型应用,在Window控件中打开新页面,如果传递的参不正确,则首先提示参不对然后关闭此弹出窗口。 -ExtAspNet.Alert.Show("参错误!", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference()); +TreeNode的前面的多选框可以自动回发了。 -为TreeNode增加AutoPostBack属性,增加事件据类TreeCheckEventArgs,为Tree增加事件NodeCheck。 -示例在:http://extasp.net/data/tree_run.aspx -Grid增加GetNoSelectionAlertInParentReference函,用来表示没有选中任何一项时在父页面弹出对话框的JS代码。 -修正IE7下不能以下划线作为CSS中类名的前缀的BUG(feedback:Steve.Wei)。 -添加定时器控件Timer,用来定时发起AJAX请求。 +2009-09-06 v2.1.0 -Button的Pressed属性值能够正确的反映客户端的变化。 -优化Tree控件的AJAX实现。 +为页面的Form添加autocomplete="off"属性。 -参考http://www.cnblogs.com/sanshi/archive/2009/09/04/1560146.html#1635830 +添加对extjs3.0中所有语言的支持。 -ExtAspNet扩展的多语言包在js\languages\extaspnet目录下,目前只有en,zh_CN,zh_TW三种实现 -你可以向其中添加自己的语言版本,并执行js\languages下的pack.bat打包,最后编译工程。 +2009-09-01 v2.0.9 -为ExtAspNet.Alert添加两个静态方法ShowInParent和GetShowInParentReference,用于在父页面弹出窗口。 +在aspx页面中必须显示的声明控件的集合属性(比如Tabs(TabStrip), Items(PanelBase), Nodes(TreeNode))。 -这将会影响所有的aspx页面,所以要特别关注。 -重命名AccordionPanel为AccordionPane (这也是在Asp.net AJAX中使用的名称). +所有的面板默认有两个集合属性(Toolbars和Items). -尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置(此时Items是只读的). -这将会影响所有的aspx页面,一定要将工具条(Toolbars)和Items区分开来。 -祝你生日快乐 - 小师妹妹。 +2009-08-29 v2.0.8 -ExtAspNet支持多语言(en,zh_CN,zh_TW),可以在Web.config中修改。 -将所有的示例转化为英语版本。 -修正Tree控件的一个BUG(定义Mappings属性时)。 +PageManager.Instance应该存在于HttpContext.Current,而不是一个全局变量。 -这个BUG导致Asp.net compatibility中的示例无法完成,现在已经修正。 +去除PageManager中方法AddAjaxAspnetControls,增加属性AjaxAspnetControls。 -这个属性和Button得ValidateForms属性类似,可以查看Asp.net compatibility中的示例。 +2009-08-25 v2.0.7 -为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。 -Grid的Values属性访问限制由internal改为public,这就意味这可以自由改变Grid中每个单元格的值了。 -增加示例-如何将Grid控件导出为Excel(data\grid_excel_run.aspx)(feedback:503684912)。 -如果TreeNode的属性Enabled="false",则此项变灰并且不会被选中(feedback:your568)。 -修正TreeNode的属性NavigateUrl不接受服务器端URL(以~/开头)的BUG。 -增加Accordion和Tree配合使用的示例(other\accordion_tree_run.aspx)。 -修正Panel图标不能显示的BUG(CSS中class名不能有$字符)。 +去除PageLayout控件,此控件可以使用BorderLayout和指定PageManager的AutoSizePanelID属性来代替。 -这样所有需要占据全屏的Panel(不管你是Accordion,Panel,ContentPanel,Form,GroupPanel,SimpleForm,Tree还是Grid,TabStrip)都可以通过这种方式全屏。 -简单方便,示例可以参考 default.aspx 或者 other\accordion_tree_run.aspx。 +2009-08-14 v2.0.6 -动态生成菜单实例(other\menu_dynamic_run.aspx和other\menu_dynamic2_run.aspx)(feedback:shguo)。 -优化AJAX的内部实现,每个页面保存的ViewState现在减少1/3左右(重要更新)。 -优化Tree节点的NodeId自动生成,减少ViewState占用。 +2009-08-09 v2.0 beta5 +ExtAspNet和Asp.net的提交按钮兼容问题(feedback:千帆)。 -在2009-03-03 v1.3.0曾经提到这个兼容问题,并有这样的规则,如果Asp.net的按钮AJAX提交,必须设置UseSubmitBehavior="false" --也就是说生成的input的type不能是"submit",而这个限制在有些情况下是不可原谅的。 --我们做了优化,现在要使一个Asp.net的按钮能够AJAX提交,你不需要做任何设置(PageManager的属性EnableAjax为true即可,这是默认属性)。 +PageManager的实例方法AddAjaxUpdateControl改名为AddAjaxAspnetControls,现在可以在Page_Load中设置需要在AJAX中需要更新的Asp.net控件了。 -在Page_Load中设置了哪些需要在AJAX中更新的Asp.net控件会在回发时保持状态,可以通过RemoveAjaxAspnetControls来去除不需要更新的控件。 -示例在aspnet\fckeditor_run.aspx和aspnet\aspnet_run.aspx。 -FCKEditor和上传控件兼容。示例在aspnet\fileupload_run.aspx。 -修正ToolbarText的文本在AJAX下更新的BUG。 -Button的Pressed属性在AJAX可更新(feedback:mgzhenhong)。 -更新所有示例。在IE7.0,IE8.0,Firefox3.5,Chrome2.0下测试通过。 +2009-08-02 v2.0 beta4 +和Asp.Net的Forms Authentication兼容[feedback:mgzhenhong]。 -采用和Asp.Net Ajax类似的处理方式,需要在配置文件Web.config增加一个httpModules。 -现在支持Response.Redirect,你可以选择Response.Redirect或者ExtAspNet.PageContext.Redirect重定向页面,两者效果一样。 -支持FormsAuthentication.RedirectFromLoginPage(accountID, false);这样的方法。 -Button增加Type属性(button,reset,submit)[feedback:mgzhenhong]。 -修正Alert.Show方法不能指定文本前图片的BUG[feedback:xmq&mgzhenhong]。 -修正IE下某些弹出窗口的IFrame第一次不能加载的BUG。 -增加Menu和Accordion的示例。 -修正Window控件的IconUrl有时不显示(Target="_parent")的BUG[feedback:xmq&mgzhenhong]。 +2009-07-22 v2.0 beta3 -兼容FCKEditor。 -在IE8.0,Firefox3.5下测试通过。以后ExtAspNet将不会对IE6.0提供支持。 +2009-07-13 v2.0 beta2 -集成extjs最新版本v3.0。 +兼容IE6.0-7.0-8.0。 -这应该是Extjs3.0的一个BUG,在IE6.0-7.0下面设置Ext.QuickTips.init();会导致button的click事件无法响应(IE8下无此问题)。 -目前先禁用IE6.0-7.0的QuickTips。 -优化底层JavaScript。 +2009-07-05 v2.0 beta1 -更新extjs库到最新版本v3.0 RC2; 目前只有一个缺省皮肤(Theme)。 -使用YUI Compressor压缩JavaScript和CSS文件。 -Release版本每个页面只包含一个JavaScript文件(语言文件除外)和一个CSS文件。 -ExtAspNet自身的CSS会紧挨着页面<title>标签引入,这样在<head>中自定义的样式可以覆盖ExtAspNet缺省样式。 +Alert对话框会遮挡所有的Window窗口。 -使用一个变通的方法解决,因为无法改变Ext.Message的默认z-index(9000)所以将box.window_default_group的zseed调整为6000。 -为所有按钮的左右增加5px的空白边距:.x-btn button { margin: 0 5px !important; }。 -因为下拉列表不可编辑,所以不能为空,如果不设置SelectedIndex或SelectedValue,则默认选中第一项。 -重新绑定模拟树的下拉列表后,选中项的前面有图片的HTML标签的BUG。 -更新自定义JavaScript组件Ext.ux.SimplePagingToolbar。 -更新示例工程。 +2009-03-25 v1.3.1 -Tree在AJAX回发展开节点时JS错误[feedback:xlli]。[fixed] -Window中的EnableIFrame==false,则点击关闭按钮时报JS错误。[fixed] -页面包含FileUpload控件,需要点击按钮回发并上传文件,则不能采用原生AJAX方式。(参见示例aspnet/fileupload.aspx)[fixed] -HtmlEditor显示隐藏工具栏按钮不起作用,HtmlEditor目前不支持Enabled和Readonly两个属性。[fixed] +2009-03-03 v1.3.0 -如果弹出的窗口(Ext-Window)含有ASP.NET控件FileUpload,则此弹出窗口在关闭时出现JS错误(http://extjs.com/forum/showthread.php?t=8129)[feedback:xlli]。[fixed] -如果页面中存在ASP.NET控件(TextBox),则第二次提交表单就会报错(视图状态不对,其实时没有更新EventValidation隐藏字段导致的问题)。[fixed] -页面上放置ExtAspNet-Button和ASP.NET-Button,则点击ExtAspNet-Button时激发的是ASP.NET-Button的事件,这个BUG和Extjs2.2.1中Ext.Ajax.serializeForm的实现有关。[fixed] -ExtAspNet内部包含HtmlAgilityPack和Nii.JSON两个开源的第三方类库。[added] +如果以前你听过不要在ExtAspNet工程中使用ASP.NET标准控件的忠告,那么从v1.3.0版本开始,你可以忘掉这个说法,现在ExtAspNet控件和ASP.NET标准控件和平共处了。[fixed] -如果一个ASP.NET按钮控件要使用ExtAspNet的原生AJAX,只需要设置属性 UseSubmitBehavior="false" 即可。 -如果要在一次ExtAspNet的原生AJAX回发时更新ASP.NET控件的值,只需要调用PageManager的公共方法AddAjaxUpdateControl即可(示例:aspnet/aspnet.aspx)。 +2009-02-27 v1.2 beta9 -网络连接出错时的“Ajax Error”改成更加友好的提示信息“本次连接失败!可能是网络连接出错,请刷新页面重试。”。[fixed] -自动测试功能会在以后版本中逐步完善。这个版本完成测试框架,采用Extjs中JS函进行大部分的测试,对于一些难以测试的地方借助jQuery完成。[fixed] +系统底层代码优化(主要是Javascript的封装和BUG修复)。[fixed] -底层使用Javascript创建一个Window控件的代码由原来的2000字符减少为500个字符。 -PageContext静态类中的GetPageStateChangedFunction改名为GetConfirmFormModifiedReference,底层代码优化。表示“获取当前页面中表单修改的确认提示框的脚本”。 ---[updated]删除PageContext中的GetConfirmFormModifiedReference,使用CurrentActiveWindow中的GetConfirmFormModifiedCloseReference/GetConfirmFormModifiedCloseRefreshReference/GetConfirmFormModifiedClosePostBackReference三个方法代替。 -不会修改弹出页面的URL(Ext-Window中的IFrame),以前为了实现功能为每个弹出页面添加box_parent_client_id查询字符串 -去除PageManager的RegisterPageStateChangedScript属性,现在已经将这个功能实现为静态的JS方法。可以通过PageContext.GetFormModifiedConfirmReference获取此方法的客户端脚本。 ---注意:以前的项目需要在所有的ASPX页面中查找RegisterPageStateChangedScript属性,并删除,否则会运行错误! -A页面有Ext-Window控件弹出B页面,B页面有Ext-Window控件弹出C页面,B页面的Ext-Window控件设置Target='_parent',则弹出的Ext-Window(C页面)会覆盖整个A页面,这是正确的。 ---当时如果用户直接访问B页面,就会报JS错误,因为此时找不到B页面的父页面A了。现在的版本修正为如果找不到父页面,则就在当前页面弹出窗口,这样用户直接访问B页面也不会出错了。 -Window控件的GetIFramePageStateChangedFunction函改名为GetConfirmFormModifiedCloseReference,表示“获取先确认IFrame的页面中表单改变,然后关闭弹出窗口的客户端脚本”。 ---为Window控件增加如下两个方法GetConfirmFormModifiedCloseRefreshReference和GetConfirmFormModifiedClosePostBackReference,表示“先确认表单改变,然后关闭弹出Ext-Window,再然后刷新父页面或回发父页面”。 ---Window控件的OnClientCloseButtonClick属性如果不设置,则默认采用GetConfirmFormModifiedCloseReference,也即是先判断表单是否更新,然后在关闭窗口。 ---现在可以很方便的为Window控件的关闭按钮添加关闭后刷新父页面或者关闭后回发父页面的行为。 -如果弹出窗口(Window控件)中IFrame的页面不能正常加载(网络暂时出错或页面抛出异常),则此时点击右上角的关闭按钮会报JS错误,因为此时页面尚未加载完毕。 ---此版本修正了这个BUG,即时页面不能加载完全,也能通过右上角的关闭按钮关闭弹出含IFrame的窗体。 -Window控件的IFrameName属性是自动生成的,只读属性。(因为有可能所有的Ext-Window最终都渲染到最外层的页面,为了保证这些IFrame的name不同,IFrameName使用的是GUID,内部处理)。 -CurrentActiveWindow改名为ActiveWindow。 -[特别注意]GetWriteBackValueReference(string controlClientIds, string value, params string[] values)函现在的定义是GetWriteBackValueReference(params string[] values) ---所有调用GetWriteBackValueReference的地方,需要删除第一个(一般是ActiveWindow.GetLoadStateReference())。 +2009-02-23 v1.2 beta8 -ContentPanel中内容不能自动扩展高度的BUG[feedback:huihuang]。[fixed] -DropDownList在Ajax回发时不能计算模拟树的据[feedback:huihuang]。[fixed] -DropDownList在页面第一次加载时没有不可选择项,则回发时也不会有不可选择项的BUG。[fixed] -升级底层ExtJS类库为v2.2.1(此版本主要是Chrome的支持和部分内存泄漏问题的修正)。[fixed] -页面加载过程中的时间信息保存在Javascript变量window.box.timeInfo中。[added] +增加部分自动测试支持(使用WatiN和NUnit),下个版本将会提供完整的自动测试支持。[fixed] +2008-10-28 v1.2 beta7 -DropDownList没有选中任何一项,回发时报错[feedback:huihuang]。[fixed] -Window显示位置不对,以及不能拖动的BUG[feedback:huihuang]。[fixed] +PageContext优化。[fixed] -去除RegisterExclusiveScript静态函(这是没有原生ajax之前的产物),使用RegisterStartupScript替代。 -去除RegisterStartupScript的重载函,只保留最简单的PageContext.RegisterStartupScript(string script)函。 -Resirect增加重载函Redirect(string url, string target),其中target可能的取值为_self,_parent,_top,分别表示在当前窗口,父窗口,顶级窗口重定向[feedback:jqpeng]。 -Image控件增加ImageWidth/ImageHeight/ImageCssStyle/ImageCssClass/ImageAlt属性[feedback:jqpeng]。[fixed] -发布包中增加一个Web.config.txt,这是一个空的Web.config文件,包含BOX基本的配置信息。[fixed] -ContentPanel的ShowHeader和ShowBorder属性默认也是true(注意更新以前的应用)。[fixed] -Row和Column布局时,修正IE下设置RowHeight="100%"时显示不正确的BUG。[fixed] -AccordionLink当鼠标移上和移开时,有背景色的变化效果[feedback:huihuang]。[fixed] +TabStrip的Tab控件的EnablePostBack属性会在回发时保持(也即是说如果EnablePostBack=true,回发时没改变EnablePostBack的值,则每次切换到此Tab都会回发)。[fixed] -有这样一个效果,如果Tab1默认显示,Tab1的EnablePostBack=true,则页面加载完毕后会回发Tab1一次。 +2008-10-20 v1.2 beta6 +使用控件的站点必须建立虚拟目录,否则会报JS错误(即是脚本资源没有加载),却原来是HTTPCompress组件的问题。[fixed] -需要替换新的blowery.Web.HttpCompress.dll,解决方案见http://pohee.com/it/http-compression-in-aspnet-20/。 +DropDownList优化。[fixed] -去除EnableFirstItem/FirstItemText/FirstItemValue,这个并不能带来很大的好处,反而容易让开发人员困惑。 现在可以方便的在后台DropDownList1.Items.Insert(0, new ExtAspNet.ListItem("全部", "-1"));来达到同样的效果。 +如果某项(ListItem)的Value为空字符串,则通过SelectedIndex和SelectedValue不能选中[feedback:jqpeng]。 -和Asp.net中的保持一致,ListItem的Value值可以为空字符串。 也就是可以这样写DropDownList1.SelectedValue = ""; -ListItemCollection增加重载函Add(string text, string value),这样方便后台添加列表项。 -处于布局内的容器控件(Layout!=LayoutType.Container),AutoHeight会自动设置为false(避免开发人员发生此类错误)。[fixed] -注意,控件的高度指的是整个控件的高度,包含BodyPadding(这和CSS中的height不同,CSS中的height是指内容的高度,除去padding/border-width/margin)。[fixed] +为所有控件属性增加在VS中的智能提示。[fixed] -需要将ExtAspNet.XML和ExtAspNet.dll放在一起,这样引用dll时xml会被拷贝到bin目录下,提供VS的智能提示。 +控件的属性如果是枚举类型,如果此属性可以不取值,则默认为None。[fixed] -TriggerIconType.Default -> TriggerIconType.None -SystemIconType.Empty -> SystemIconType.None -RegexPattern.USER_DEFINED -> RegexPattern.None -表单验证属性名称变化(ValueToCompare->CompareValue,ControlToCompare->CompareControl)。[fixed] +注意:一个属性可以拥有多个值的情况。[fixed] -属性和CSS相关则用空格分隔(比如ColumnWidths,BodyPadding)。 -其他的都是逗号分隔(比如ValidateForms,DataKeyNames,DataNavigateUrlFields)。 +AccordionLink实现为控件。[fixed] -可以方便的在子页面(iframe)中通过js切换父页面中选中的菜单项(Accordion->AccordionLink)(示例在other/accordion_links_run.aspx,other/accordion_links_run_iframe_htm)[feedback:jima]。 +确认:可以方便的动态添加控件,并且可以给控件添加服务器端事件(示例在form/form_dynamic_run.aspx)。[fixed] +2008-10-15 v1.2 beta5 -验证表单字段的ValueToCompare属性,为字符串时会出错的BUG。[fixed] +优化下拉列表。[fixed] -验证下拉列表时,应该取ListItem的Value属性进行验证,而不是Text属性。 -DropDownList的Items增加Insert方法(可方便的下拉列表选项添加“全部”)。 -DropDownList不支持EmptyText属性。 -ListItem启用EnableSelect和SimulateTreeLevel属性,这样就可以直接在前台(ASPX)中设置哪些项不可选择,以及创建模拟下拉树。 -DropDownList增加EnableSimulateTree属性(默认为false),如果设置了DataSimulateTreeLevelField,则自动将EnableSimulateTree设置为true。 +2008-09-27 v1.2 beta4 +EnableLargeHeader属性对所有容器的效果一样,Accordion的属性EnableLargeHeader只会改变Accordion的标题大小,而不会对AccordionPanel起作用(示例见other/accordion_run.aspx)。[fixed] -Accordion去除EnableHightlight属性,AccordionPanel增加EnableHightlight属性。 -影响以前使用Box的应用,需要将Accordion的属性去掉,然后为每个AccordionPanel增加EnableLargeHeader和EnableHightlight属性。 -AccordionPanel鼠标移上去的样式调整(现在没有下面的一条白线了)。[fixed] +AccordionPanel增加Links属性,可以绑定列表据到AccordionPanel,呈现的是链接的列表(示例在other/accordion_links_run.aspx)。[fixed] -原来放置在AccordionPanel中的容器,比如ContentPanel需要在外层加上<Items>标签。 -适当增大AccordionPanel中链接的高度20px->22px,同时对链接的样式也做了微调。 -通过BodyPadding控制链接列表的边距。 -这样能大大减少ASPX中HTML代码和Javascript代码的书写,可以在后台动态添加链接,效果很赞,此需求由马季提出。 +2008-09-25 v1.2 beta3 +代码优化与设计时支持(尚需要不断完善,目前可以在ASPX页切换到“设计时”,方便属性的更改和事件处理函的添加)。[fixed] -Panel/GroupPanel/ContentPanel/Tree/HiddenField/PageLoading -TabStrip/Toolbar -TabStrip去除Plain属性,增加EnableTitleBackgroundColor(默认为true)。[fixed] -向Form中动态添加控件的BUG,现在form/form_dynamic_run.aspx示例已经能正确运行。[fixed] +大部分容器的子控件集合更正为Items(以前有些是Rows)。[fixed] -影响的控件包括Toolbar/Accordion/AccordionPanel/GroupPanel/Panel/SimpleForm/Window等。 -保留Form的Rows(FormRowCollection)属性和Grid的Rows属性(GridRowCollection)。 -保留TabStrip的Tabs(TabCollection)属性。 -保留PageLayout/BorderLayout的Regions(RegionCollection)属性。 -预祝今晚神七发射成功。 +2008-09-22 v1.2 beta2 +Grid选中项(SelectedRowIndexArray)在ajax回发过程中存在BUG [feedback:xmzhu]。[fixed] -表现为对Grid进行多次删除添加操作后,SelectedRowIndexArray选中项中会存在当前不存在的行序号,导致服务器端遍历选中项时组越界。所有使用box控件的应用程序都受到此BUG的影响,需尽快更新到新版本。 +代码优化与设计时支持(示例中表单控件都已支持设计)。[fixed] -PageManager/SimpleForm/Button/HyperLink/Label/Image/LinkButton/TextBox -TriggerBox/TwinTriggerBox/Window/TextArea/HtmlEditor/DatePicker/NumberBox -CheckBox/RadioButton/RadioButtonList/DropDownList -Grid +2008-09-19 v1.2 beta1 -Image/LinkButton/HyperLink增加一些Ajax可更新属性。[fixed] +隐藏的方式由HideMode属性控制Visibility/Offsets/Display。[fixed] -修正Form/SimpleForm中隐藏一个表单字段(Hidden=false)会占据页面空间的BUG。 -ToolbarText/ToolbarFill/ToolbarSeparator在ASPX中设置Hidden=true不起作用的BUG [feedback:jbzhang]。[fixed] -Button去除MarginRight属性(可以通过CssStyle="margin-right:5px;"达到相同的效果)[fixed] +2008-09-09 v1.1 +Toolbar去除IsPageMenu属性,在网报中可以用自定义样式实现,而不应该写在控件中。[fixed] -网报:CssClass="toolbar-pagemenu" CssStyle="border:0px;",同时定义样式:.toolbar-pagemenu{ background: rgb(208, 222, 240) url(../images/pagemenu_toolbar_background.gif) repeat-x left top;}。 -Region去除默认的Layout=Fit,如果希望Region使用Fit/Anchor/Column/Row等布局的话,需要手工指定。[fixed] -ToolbarSeparator/ToolbarFill在Ajax更新Hidden属性的BUG。[fixed] +布局整理。[fixed] -新增Column/Absolute/Row三种布局,加上以前的Container/Fit/Anchor/Accordion/Border/Form六种布局,总共有9中布局可供使用。 -其中一些控件默认使用一种布局:SimpleForm(Form)/Form(Form)/Panel-GroupPanel(Container)/Accordion(Accordion)/PageLayout(Border)/BorderLayout(Border)/TabStrip(Card),所有布局控件默认的布局是Container。 -经常用到的布局控件:SimpleForm/Form/Accordion/TabStrip/BorderLayout,经常用到的布局:Fit/Row/Anchor +2008-09-08 v1.1 beta7 -MenuButton/MenuHyperLink增加HideOnClick属性,如果一个菜单项的作用仅仅为了弹出下级菜单,点击没反应,则可以这样设置HideOnClick="false" CssStyle="cursor:default;" [feedback:huayu]。[fixed] -MenuButton/MenuHyperLink/MenuSeparator/MenuText增加Hidden属性(此属性是Ajax可更新属性,如果需要在Ajax时显示隐藏菜单,请使用此属性而不是Visible属性)。[fixed] +大部分的ExtAspNet控件增加Hidden属性(少几个控件没有此属性:Menu),这样在Ajax时可以显示隐藏控件。[fixed] -注意Visible和Hidden的区别:Visible=false的属性不会渲染到客户端,Hidden=true的控件渲染到客户端但是隐藏。 -US的ExtAspNet改造强烈依赖于此属性,这个版本发布后可以继续。 -网报中唯一没有用到ExtAspNetAjax的地方就是显示隐藏表单字段,现在也可以使用Ajax了。 +2008-09-04 v1.1 beta6 -PageContext.Redirect支持普通页面转向和ExtAspNetAjax下页面转向。[fixed] +模拟树的下拉列表的BUG(会使一些可选项变成不可选项)[feedback:xmzhu]。[fixed] -因为if("0,2,9,11,".indexOf('1,')>=0){ok},这显然是不对的,此BUG涉及很多控件(Grid,DropDownList,TabStrip)。 -解决方法:testValue += '';if(domValue.split(',').indexOf(testValue) >= 0){ok}。 -DropDownList在Ajax时应该先更新据再设置选定项 [feedback:xmzhu]。[fixed] -Button/MenuButton增加Ajax可更新属性OnClientClick [feedback:xmzhu]。[fixed] -Tree的Ajax支持(尚需优化)。[fixed] +2008-09-02 v1.1 beta5 -DropDownList如果第一次没有绑定值,应该绑定到[[]](二维组),而不是[](一维组)。[fixed] -模拟树的DropDownList,在Ajax重新绑定DataSource后,保持项是否可选状态是最新的(页面第一次加载时,即使没有据也需要设置DataTextField/DataValueField/DataSimulateTreeLevelField/DataEnableSelectField等属性的值,否则Ajax回发时会出错)。[fixed] -UserControlConnector导致的Ajax错误,去除UpdatePanelConnector控件(以后不会用AspnetAjax,这个控件已经完成使命)。[fixed] -不要使用Asp.net的控件HiddenField,而是使用ExtAspNet的HiddenField,因为Asp.net的控件在Ajax不会被更新,所以会导致视图状态不一致的错误。[fixed] -网报Ajax整合基本完成(除了待审批->下一步[审核/归档/出纳]操作,由于需要显示隐藏表单字段,目前Ajax不支持,使用的还是普通的PostBack)。[fixed] -IE下,RadioButtonList中项如果存在汉字,则会换行的BUG。[fixed] -增加两个Theme[Slate/Black](样式尚需完善)。[fixed] +2008-09-01 v1.1 beta4 -非当前Tab中如果有ContentPanel,则在页面上方会有空白(可以通过设置EnableDeferredRender=false解决,但会减慢页面的加载速度),现在已经解决这个问题。[fixed] -RadioButtonList去除EnableBackgroundColor/EnableLightBackgroundColor属性,背景色是透明的,也就是和父控件(SimpleForm/Form)的背景色一致。[fixed] -TwinTriggerBox的第一个Trigger图标不会先显示再隐藏,而是直接隐藏掉(如果用户设置ShowTrigger1=false)。[fixed] -Web.config中增加配置项FormLabelWidth="80"(默认为80),同时PageManager增加FormLabelWidth属性用来控制页面上所有SimpleForm/Form的表单字段标题的宽度。[fixed] +完善Ajax。[fixed] -RadioButtonList增加Ajax可更新属性SelectedIndex(SelectedValue/SelectedItem)。 -DropDownList增加Ajax可更新属性Enable/SelectedIndex(SelectedValue/SelectedItem)/DataSource。 -Grid增加Ajax可更新属性Columns(也就是说Grid列在回发时隐藏显示了一些,也能正确的Ajax)。 -ToolbarText增加Ajax可更新属性Text。 +2008-08-31 v1.1 beta3 -TabStrip增加EnableDeferredRender属性(是否启用延迟加载Tab,默认启用)。[fixed] -重定向页面,使用系统的方法 PageContext.Redirect(string url),使用Response.Redirect方法会出错。[fixed] +安全的Ajax设计。[fixed] -这个版本Ajax和上个版本(v1.1beta1)在设计思路上有很大区别,同时在速度上会有进一步的提升。 -基本思想:安全的Ajax交互,明确Ajax回发时支持控件哪些属性的改变,这将适合90%的应用场景(并且具有极快的反应速度),对于需要UI大改动的可采用常规回发,系统提供控件级别的EnableAjax属性。 -整理支持Ajax的控件属性改变列表(所有被支持的属性改变都是安全的、快速的,所有不被支持的属性改变不会对UI起作用,同时是安全的,不会有js错误)。 -网报Ajax整合(目前只支持所有的列表页面)(v0.8.1)。[fixed] +2008-08-29 v1.1 beta1 +Window控件是否弹出的状态在回发时维持。[fixed] -控件设计的一个原则,凡是可以在客户端改变的属性都应该在回发时保持属性的状态。 +完全抛弃Asp.NetAjax,ExtAspNet控件内置Ajax支持。[fixed] -这是一个值得骄傲的设计,可以明显提高页面回发的速度(相比普通的回发和Asp.netAjax的回发),对于IFrame框架的交互也起到很好的加速效果。 -不需要做任何配置,所有的回发都是Ajax(在Web.config和PageManager中有设置启用Ajax回发的属性-EnableAjax-默认为true)。 +在这种设计下,其实可以完全抛弃Javascript。 -比如简单的点击一个按钮弹出窗口,可以在Button的OnClick事件中设置Window1.Popup=true,也可以注册Button的OnClientClick=Window1.GetShowReference()。 -第一种方法需要回发,但是我们内置的Ajax支持能很快的返回需要的结果并解析,在网络速度很快的情况下和第二种方法差别不是很大。 -推荐的做法是尽量用客户端实现,客户端实现复杂的直接用服务器端实现。 +目前ExtAspNetAjax的限制。 -只对ExtAspNet控件起作用,对Asp.net控件不起作用。 -对容器控件(有子控件的控件)不起作用,只对最底层的控件起作用。 -对改变控件的Visible属性会有错误。 -Window控件的属性改变只有少几个起作用(Popup,IFrameUrl)。 -PageManager增加属性EnablePageLoading和EnableAjaxLoading(启用页面第一次加载标示和Ajax加载标示,默认都为true),所以如果使用系统默认的加载标示就不必每个页面都添加PageLoading控件。[fixed] -Grid中的回发事件(主要是LinkButtonField和CheckBoxField(RenderAsStaticField=false))要延迟0ms执行,这样当前行被选中的状态在回发后会得到保持。[fixed] -Grid选中行的状态在第一次回发时不能保持的BUG。[fixed] +2008-08-26 v1.0 +已知问题:IE的ActiveX插件IE Developer Toolbar会对IFrame的加载造成0.5m左右的延迟。 -主要是父页面加载一个比较大的css文件(~100k),则每次打开iframe页面,onload事件的调用都会有500ms左右的延迟,在测试IE性能时要禁用此插件。 +优化弹出窗口中IFrame的显示速度。[fixed] -在当前页面弹出窗口需要~20ms,在父页面弹出窗口需要100~300ms。通过缓存弹出的窗口实例,从而第二次弹出窗口不再需要创建时间。 -PageLayout的Region增加SplitColor属性,默认的背景色是透明的。(在网报中需要设置SplitColor="#CADDF7",以便分隔符的颜色和Toolbar的颜色一致)[fixed] +PageManager增加属性Theme、Language、FormMessageTarget、FormOffsetRight等属性,这些属性可以在Web.config中设置(推荐方法),也可以为每个页面设置。[fixed] -一个典型的应用是为每个用户设置不同的皮肤(根据用户浏览器中Cookie设置的值)(示例在default.aspx)。 -TreeNode增加属性SingleClickExpand,表示点击可切换节点的折叠展开状态。[fixed] +TabStrip中非当前Tab会延迟渲染。[fixed] -这会明显加快页面的渲染速度,网报中一个典型的费用审批页面可以减少200ms的渲染时间。 -由于非当前Tab不会在页面加载时渲染,所以那些Tab中的节点在页面加载后也是不可见的,需要将相关的脚本移动到控件的render事件中。 -不能比较两个DataPicker大小的BUG。[fixed] -TabStrip延迟加载引起的BUG(非当前Tab中的ContentPanel会占据页面空间,已修正)。[fixed] -全新的ExtAspNet.Examples(基础知识/表单控件/据绑定/容器布局/IFrame框架)。[fixed] +2008-08-19 v0.4 beta6 +PageManager增加两个属性(EnableInlineStyleJavascript/ApplyParentStyleJavascript),可以在IFrame页面中使用父页面的脚本和样式(示例在iframe/default.aspx和iframe/page3.aspx)。[fixed] -测试发现,IFrame页面的加载速度并没有明显加快,可以先不使用此属性。 -RadioButtonList放在在BorderLayout中显示不了的BUG [feedback:zgjiang2]。[fixed] +extjs的BUG,当页面中含有iframe时,Ext.onReady会被调用两次(IE6/IE7)(http://www.extjs.net/forum/showthread.php?t=43246)(示例在test.aspx)[fixed] -现在的解决方法是在初始化时:if(this.initialized){return;}this.initialized=true; +需要先回发页面再弹出IFrame窗口。[fixed] -在回发时设置窗口的Popup和IFrameUrl属性,因为这些属性是可以保持状态的,所以在关闭窗口时要注意设置Popup=false。 -另一种做法(推荐):PageContext.RegisterStartupScript(Window99.GetShowReference("./simpleform.aspx"));。 +2008-08-15 v0.4 beta5 -点击关闭窗口的按钮,在IE6下会有JS错误。[fixed] -增加BorderLayout控件,示例在iframe/borderlayout.aspx。[fixed] +Radiobuttonlist显示有重影(示例在radio.aspx)。[fixed] -全新的样式。 -去除Horizontal属性,增加ColumnNumber(可以设置渲染成几列)。 -GetValueReference取得的值不正确的BUG。 -动态向Form中添加FormRow,并动态的向FormRow中添加表单字段,以及如何取得表单字段的值。(示例在form_dynamic.aspx)[fixed] +IFrame弹出窗口关闭后回发父页面,则会多加载IFrame一次,再次打开窗口会重复加载IFrame2-3次[feedback:xmzhu]。[fixed] -这是一个重要的BUG,会严重影响页面的加载速度。原因是通过脚本改变的IFrameUrl会在回发时保持状态,从而回发父页面后Window中的IFrame被添加到页面,而这是不需要的。 -现在"是否弹出窗口、窗口标题、IFrameUrl"在客户端的改变,不会影响服务器端的属性,也即是不保持状态。此问题解决。(示例在button_iframe.aspx) +2008-08-13 v0.4 beta4 -点击关闭窗口的按钮,在IE下会有JS错误。[fixed] -Window的右上角关闭图标增加提示,优化事件响应。[fixed] -Window的代码重构。[fixed] +修正一个的内存泄漏。[fixed] -IE7下测试,打开iframe/default.aspx页面,iexplorer占内存68.368M。 -内存存在泄漏时,点击iframe/page3.aspx页面8次后iexplorer占118.792M内存。 -修正后,点击iframe/page3.aspx页面8次后iexplorer占76.492M内存。 -IE窗口最小化时,IE会自动进行垃圾回收。 +2008-08-12 v0.4 beta3 -底层的javascript框架Extjs升级为v2.2,Grid的渲染速度有很大提升。[fixed] -Grid的EnableDelayRender默认为true(如果没有设置Grid的高度或通过布局间接设置高度,则行不可见,可以通过AutoHeight="true"解决)。[fixed] +页面正在加载的提示尽早的显示出来。[fixed] -首先在执行js来完成页面渲染之前延迟5ms,以便浏览器把当前页面内容显示出来。 -加载js脚本的script标签放置在页面的最后,放置加载js而阻塞PageLoading的显示。 +2008-08-08 v0.4 beta2 -TabStrip延时加载出错。[fixed] -Window的IFrameUrl处理的BUG,比如Pages_ExtAspNet目录下的页面应该为./FE_ApplyEditor.aspx或~/Pages_ExtAspNet/FE_ApplyEditor.aspx。[fixed] -Window的WindowPosition="Center"并且Target="_parent",则会JS错误。[fixed] -实现网报首页下拉菜单和左侧菜单的导航功能。[fixed] -Window的创建在页面显示后进行,不计算在js渲染时间内。[fixed] -优化费用申请页面(尽量减少不必要的层次嵌套)。[fixed] -button_iframe.aspx默认会加载form.aspx页面(Window控件的BUG)。[fixed] -Window中的保存并关闭按钮和Asp.netAjax冲突。[fixed] -优化关闭Window的js脚本,减少写到页面的js大小。[fixed] -加快“保存并关闭”按钮关闭窗口的速度,使用PageContext.RegisterExclusiveScript(CurrentActiveWindow.GetClosePostBackReference());,示例在(simpleform.aspx)。[fixed] +2008-08-05 v0.4 beta1 -DropDownList去除Traditional属性,和传统的Asp.net控件一样不可编辑。[fixed] -DropDownList增加SelectedText属性(去除了模拟树时通过SelectedItem.Text的多余html字符)。[fixed] -为了加快渲染速度,去掉一些特效(比如Panel的折叠效果,Grid的拖动列效果等)[feedback:dcding]。[fixed] -将生成的js对象的名称简单化,这样可以减少生成的js内容,加快页面加载速度(一个典型页面的js由原来的33.0k降低为21.4k)。[fixed] +弹出窗口中,点击按钮回发然后点击关闭按钮,出现js错误 [feedback:xmzhu]。[fixed] -因为在页面的Page_Load中,if (!IsPostBack){PageContext.RegisterPageStateChangedStartupScript();}通过这样方法向页面注册了一段脚本,但是这段脚本在回发时没有注册到页面,因为js调用此脚本时报错。 -一种解决方法是将向页面注册脚本的函移动到if语句的外面,即每次都向页面注册此脚本。 -另一种办法就是在PageManager控件中增加RegisterPageStateChangedScript(向页面注册监视页面中表单内容改变的脚本)的属性(会在每次页面回发(包含ajax回发)时注册脚本)(示例在button_iframe.aspx/simpleform.aspx)。 +PageManager控件增加ExecuteOnReadyWhenPostBack属性(示例在onreadyscript.aspx)。[fixed] -这个手工添加onReady函能够在每次页面回发时都注册脚本(包括Ajax局部回发),这就避免了手工去做的麻烦(已经在网报中遇到这种情况)。 -每个页面必须添加一个PageManager控件,否则会出错,同时去除DesignTimeStyle控件(作为PageManager的属性出现)。[fixed] -TextField等表单字段增加Readonly属性。[fixed] +全新设计的IFrame的架构(尽可能和基于MasterPage的架构保持兼容,和Asp.net Ajax保持兼容)。[fixed] -最大的好处是可以减少页面下载完毕后Javascript渲染时间(可以节约一般的渲染时间)。(所有示例在iframe文件夹下) +示例1,通过点击按钮弹出IFrame窗口,可直接关闭父页面,也可在关闭后刷新或回发父页面。(default.aspx/page2.aspx/simpleform.aspx) -虽然IFrame和Master两种架构差异迥然,或许你以为需要修改一堆代码来完成这种转换,起初我也是这么认为的,但是现在你所要做的仅仅是为Window控件增加一个属性(Target="_parent"),就完成了两种框架的转换,是不是很酷。 -显然,控件本身封装了大量的代码,简单来看现在有三个页面(default.aspx(A)/page2.aspx(B)/simpleform.aspx(C)),其中A包含B页面,当你在B中打开包含有页面C的窗口时,窗口不是在B中打开,而是在A中打开,这样才能保证窗口覆盖整个页面,当你从C中返回需要回发页面B时,却发现取得的是A页面,因为我们窗口是在A页面中创建的。我会通过一篇文章来揭示这一过程,敬请期待。 -示例2,Grid中弹出窗口。(default.aspx/page3.aspx/simpleform.aspx) +示例3,TriggerBox弹出窗口。(default.aspx/triggerbox.aspx/simpleform.aspx) -在整个页面弹出窗口或者在当前页面弹出窗口,仅仅设置Window的Target属性即可。 -示例4,弹出窗口中的弹出窗口。 -对整个Examples更新测试。[fixed] +2008-07-31 v0.3 beta12 -IE下TabStrip在Ajax回发后不会去掉x-hide-display样式,导致Tab显示为空的BUG。[fixed] -对TabStrip/Panel/Window中的IFrame重新设计,如果设置IFrameUrl="#"或者"about:blank",则不渲染iframe到页面节点,同时第二次打开Window中的IFrame不会有残影出现。[fixed] -如果TabStrip的Tab不是激活Tab并且设置了IFrameUrl,则会延迟加载(示例在tabstrip_iframe.aspx)。[fixed] -Tree控件,点击一个节点自动回发,则当前点击的那个节点的选中状态不会保持的BUG [feedback:zgjiang2]。[fixed] +规范关闭窗口时提示用户保存已经修改的内容提示的调用方式(包含iframe中关闭按钮和window右上角关闭图标的调用方式)(示例在grid_iframe.aspx/simpleform.aspx)。[fixed] -内部实现上,点击“保存并关闭按钮”,可以将关闭窗口的脚本更早的执行(在simpleform.aspx,PageContext.RegisterStartupScript增加重载函),而不是原来的先创建整个页面UI,再关闭窗口。 -参照Yslow的评分规则,将JS文件引用由head移动到body中。[fixed] -Firefox下,如果页面太长会出滚动条,原来在ViewPort样式中有body{overflow:hidden;}。[fixed] +IFrame内的页面宽度和高度会自动设置(是不是还在为1px/2px的白边而烦恼,现在不用了:-)(示例在iframe_autosize.aspx/simpleform.aspx/simpleform2.aspx)[fixed] -增加PageManager控件(需要指定AutoSizePanelID,即需要设置宽度和高度为整个页面的宽度和高度的Panel),HideScrollbar属性用于隐藏滚动条(IE/Firefox)。 +2008-07-24 v0.3 beta11 -web.config配置信息中MessageTarget改名为FormMessageTarget,增加FormOffsetRight配置项,用来定义全局表单字段距离右边界的宽度,同时每个表单字段都增加OffsetRight属性 [feedback:jima]。[fixed] -Window在回发时设置的Title不起作用的BUG。[fixed] -增加Image控件 [feedback:jima]。[fixed] -Tree控件,如果一个节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 [feedback:zgjiang2]。[fixed] -Image增加ToolTipTitle/ToolTipAutoHide两个属性,当提示信息特别长时,可以让用户阅读完毕之后手工关闭提示信息(示例在hyperlink.aspx)。[fixed] -去掉DropDownList控件的Text属性(强制性),可以通过设置SelectedValue来设置选中哪一项 [feedback:xmzhu]。[fixed] -过滤提示消息中的换行符(转换为<br/>),否则提示信息可能导致页面渲染错误 [feedback:dcding]。[fixed] +2008-07-23 v0.3 beta10 +完善Tree控件。[fixed] -如何将据库中的据绑定到Tree(示例在tree2_bind_database.aspx)。 -ajax加载树节点,放在UpdatePanel中才有ajax的效果(示例在tree2_ajax.aspx)。 -更改TreeNode的ID为NodeId,否则两个树中不能有相同ID的TreeNode,这是不合理的。 -Grid的GridColumn的ID改名成ColumnId,否则同一个页面放置两个Grid,它们的GridColumn的ID不能同名,这是不合理的。注意需要更新以前的代码![fixed] -Grid所有类型的列增加DataTooltipField/DataTooltipFormatString两个字段,以显示ToolTip(示例在grid.aspx)。[fixed] +2008-07-22 v0.3 beta9 +IE6下,左侧导航链接的选中样式,以及鼠标移上去和移开的样式不对。[fixed] -发现原来ie6不能正确解析li的高度,必须手工设置才行(style="height:20px;")。 +IE6/IE7下,模拟树的下拉列表如果文字长度太长,则显示的文字会换行,导致错位。[fixed] -虽然最后未能解决<div style="width: 60px; white-space: nowrap; overflow: hidden; border: solid 1px red;"><div style="width: 16px; height: 18px; float: left;">##</div>差旅交通费</div>在IE和Firefox下显示的不同效果。 -但是通过用<img src="##" />来代替<div style="background:url(##)" />,从而实现FF和IE下样式的统一。 -刚看到old9的解决方案:把“差旅交通费”改成“<span style="margin-right: -1000px;">差旅交通费</span>”,在IE下和FF下的都不换行,:-) -LinkButton增加OnClick事件 [feedback:huihuang]。[fixed] -Window通过设置IFrameUrl和Popup不起作用的BUG。[feedback:xmzhu]。[fixed] +增加树控件(Tree)(示例在tree2.aspx)。[fixed] -可以在回发时维持树的状态(选中行,折叠/展开,CheckBox)。 -可以通过Inline的方式添加树节点,也可以绑定到XmlDocument/XmlDataSource/SiteMap。 -点击树节点可以链接到页面,也可以引发PostBack事件,可以添加自定义脚本。 +2008-07-16 v0.3 beta8 +ContentPanel中放置ExtAspNet控件,则渲染时会出现各种问题,比如下拉列表显示样式出错,Grid没了滚动条等等。[fixed] -隐蔽性非常强,原来在ContentPanel中渲染ExtAspNet控件,如果容器的display='none',则会出现各种问题(主要是大小不对)。 必须设置容器为visibility='hidden',然后在渲染完成后显示容器。 -现在Grid只要显示的设置高度和宽度,或者隐式的设定宽度高度(通过Anchor或Fit布局实现),只要超过Grid容器就会显示滚动条。 +IE6下,在应用Asp.NetAjax后,Form中字段的宽度渲染不正确。[fixed] -调试相当困难,如果你有过在IE下通过alert发现问题的经历,你就能明白。 -最后发现IE6下应用Asp.NetAjax后不仅Form中列的宽度设置不正确,而且主内容区域的宽度设置也不正确,不过最终我们还是顽强的修复了IE6下的这个BUG: 在MasterPage的onReady函中,首先修正内容区域的宽度(region3.setWidth(pageLayout1.getSize().width - region2.getSize().width - 5);region3.doLayout();),然后修正页面中所有表单的宽度(box_fixFormWidthInIE6();): 示例在 Site.Master 页面。 +集成的AspNetAjax有一个很大的BUG,只要你在页面上进行过ajax操作,当改变窗口大小时你会惊讶的发现内容区域的内容全部为空了![fixed] -解决方法相当怪异,经过一个下午的不断尝试,终于用一个怪异的方法解决(box.{0}.setSize(box.{0}.getSize());box.{0}.doLayout();), 这样的代码让我想起刷新窗口时那个方法(window.location.href=window.location.href;),不管怎么说,我对能很好的解决这个重大的BUG很是欣喜。 +2008-07-14 v0.3 beta6 -增加FlashObject控件。[fixed] -PageLoading增加EnableFadeOut属性(默认false),可以启用淡出效果。[fixed] -Accordion选中样式微调。[fixed] -预加载Form表单出错时提示信息的背景图片。[fixed] +Grid增加EnableDelayRender属性(默认false),可以加快页面的渲染速度(一个典型的20个记录的页面,可提前0.7s-1s显示出来)。[fixed] -因为延迟加载据不会改变Grid的大小,所以对于非布局内或不设定高度宽度的Grid,需要设置"EnableDelayRender=false"。 -改变Grid中静态的CheckBoxField图片。[fixed] -TabStrip增加TabIndexChanged事件,同时Tab增加EnablePostBack,可以在点击一个Tab时引起回发事件。这在延迟加载Tab的内容非常有用。(示例在tabstrip.aspx)[fixed] +2008-07-12 v0.3 beta5 -页面菜单Toolbar的分割符和背景不相融合。[fixed] -表单字段之间可以比较大小,比如NumberBox可以和Label比较大小,同时增加CompareType,来指定比较的类型(示例在form_compare.aspx)。[fixed] -如果是同种类型的表单字段,不需要指定CompareType,比如两个NumberBox比较值的大小不需要指定CompareType,而一个NumberBox和TextBox比较大小需要指定CompareType。 +如果在编辑页面使用AspNetAjax,则不能在回发时关闭当前窗口[feedback:huihuang](示例在ajax_editor_main.aspx/ajax_editor.aspx)。[fixed] -这是由于ajax后执行的javascript中不能有return false语句。 +在文本框失去焦点时,执行一些Javascript脚本(示例在textbox_blur.aspx) [feedback:xmzhu]。[fixed] -在页面添加onReady函(会被系统调用),然后用javascript监视文本框值的改变。 -弹出Window默认显示的错误页面,解决方法在当前目录添加一个空的html页面,然后把Window控件的IFrameUrl指向这个页面而不是"#"。[fixed] +弹出的窗口中的弹出窗口的如果内容发生变化,则点击右上角的关闭按钮时会有提示用户先保存的对话框,但是这个对话框的被第二个弹出窗口覆盖了 [feedback:xmzhu]。[fixed] -原来的调用方法太麻烦(见示例中alert\alert_1.aspx和alert\alert_2.aspx,总计 6 行代码),现在只需要 3 行代码就OK了。 -点击提交按钮后变成灰色不可再次点击(示例在button_click_gray.aspx)[feedback:jima]。[fixed] +增加Menu、MenuText、MenuSeparator、MenuButton、MenuHyperLink控件,用于按钮的下拉菜单(示例在button_menu.aspx)。[fixed] -增加SplitButton控件。[fixed] +2008-07-09 v0.3 beta4 -DataPicker默认的日期格式为(yyyy-MM-dd)。[fixed] +Form表单字段(TextBox,DropDownList...)之间可以比较大小 [feedback:huihuang]。[fixed] -增加ControlToCompare/ValueToCompare/CompareOperator/CompareMessage四个属性,示例在form_compare.aspx。 +TabStrip中放置IFrame会出现渲染错误 (示例在tabstrip_iframe.aspx)[feedback:jima]。[fixed] -特殊处理,拥有IFrame的Tab如果不是激活Tab,则不设置Url,只有在激活时才设置Url。 -RadioButtonList增加AutoPostBack属性(示例在radio.aspx) [feedback:xmzhu]。[fixed] -FormRow可以设置各列的宽度百分比 (示例在form_columnwidths.aspx)[feedback:jima]。[fixed] +表单字段Enable=false时显示颜色太浅 [feedback:jima]。[fixed] -覆盖缺省样式的.x-item-disabled,设置不透明。 +2008-07-08 v0.3 beta3 -Grid没有据,向后翻页按钮可以点击的BUG [feedback:huihuang]。[fixed] +增加HiddenField控件。[fixed] -其实用TextBox也能模拟HiddenField的行为,只需要设置CssStyle="display:none;"即可。 +TriggerBox 如果 EnableTextBox = true,则不能将Text回发(这是html的限制)。[fixed] -最后的解决方案居然是设置 readonly=true,同时更改属性为 Readonly(示例在textbox2.aspx)。 -模拟树的下拉列表在失去焦点后显示的文字不对的BUG。[fixed] +控制下拉列表某些项不可以选择(示例在dropdownlist2.aspx)。[fixed] -增加 DataEnableSelectField 属性,不可选择的项变灰,并且鼠标经过时没有样式。 -LinkButton和Grid的LinkButtonField增加Enable属性(示例在hyperlink.aspx和grid.aspx)。[fixed] +2008-07-07 v0.3 beta2 +增加UpdatePanelConnector控件,支持在布局构建的页面使用Asp.net Ajax。[fixed] -使用UpdatePanelConnector有一个要求:ContentTemplate下只能有一个子节点,比如box:Panel。 -示例在ajax3.aspx/content_page4.aspx。 -示例content_page3.aspx中,点击“Ajax查询”按钮和关闭弹出的窗口(点击右上角的叉)都引发异步更新。 +2008-07-03 v0.3 beta1 +容器控件的AutoHeight/AutoWidth默认为false。[fixed] -使用GroupPanel的地方需要手工添加AutoHeight="true"属性。 +增加UserControlConnector,可以在其中放置用户控件(示例在page_usercontrol.aspx)。[fixed] -也可以在ContentPanel中放置用户控件,注意两者的区别。 +增加ContentPlaceHolderConnector,替换原来Region的ContentPlaceHolderId属性(示例在Site.master)。[fixed] +支持Asp.net ajax异步加载。[fixed] -有很大局限性,只能在ContentPanel中使用,示例在ajax1.aspx/content_ajax2.aspx中。 -对于使用布局构建的页面(比如content_page1.aspx)还不能使用Asp.net ajax,因为页面是整体渲染的,先放弃。 +2008-07-02 v0.2 beta12 +关闭前提示当前页面已经被修改(示例在content_page1.aspx/simpleform.aspx)[fixed] -支持Iframe内按钮和window右上角关闭按钮。 -删除CloseAction属性,可以在后台通过OnClientCloseButtonClick属性指定(为了和iframe中做法一致)。 +iframe中的alert/confirm要覆盖整个父页面,而不仅仅是iframe页面。[fixed] -在Firefox下还有问题。[fix pending] +排序时在标题栏显示排序箭头,可以排序的列标题光标为手形(示例在grid_sorting.aspx)。[fixed] -可以通过设置Grid1.CurrentSortColumnIndex = 0;来强制某列显示排序箭头。 -可以通过 Grid1.Columns[Grid1.CurrentSortColumnIndex].SortExpression 的方式取得当前Grid的排序表达式。 +HyperLinkField/WindowField的链接地址支持服务器端格式(即是~/alert.aspx)。[fixed] -TabStrip的Tab中如果放置ContentPanel,则内容渲染位置不正确。[fixed] -可以在ContentPanel中放置用户控件(示例在page_usercontrol.aspx)。[fixed] +2008-06-30 v0.2 beta11 -增加TwinTriggerBox控件(示例在twintriggerbox.aspx)。[fixed] -Grid的据库分页需要增加属性IsDatabasePaging=true,以便普通分页和据库分页,否则在添加删除记录时总记录不会变化 [feedback:zgjiang2]。[fixed] -关闭Window时PostBack事件OnClose可以指定参,来区分是哪些操作引发的PostBack事件 [feedback:zgjiang2](示例在window_postback.aspx)。[fixed] -如果表单验证不通过,则需要弹出对话框提示(第一个没通过验证的字段)(目前还不能切换到相应的tab)。[fixed] +页面中任意可输入表单字段发生变化,可提示先保存。(示例在content_page1.aspx/simpleform.aspx)[fixed] -目前还不支持Window右上角关闭按钮的提示保存功能。 -Master/Content的内容页中Grid的Sort事件不起作用的BUG [feedback:zgjiang2]。[fixed] -Grid中的LinkButtonField设置ConfirmText会出错 [feedback:huihuang]。[fixed] -增加静态类Confirm。[fixed] +2008-06-27 v0.2 beta10 +Grid完善。[fixed] -CheckBoxField在回发时不能保持状态的BUG (已经更新了grid_checkboxfield.aspx示例)。 -Grid中模拟树显示,GridColumn增加DataSimulateTreeLevelField属性(一个Grid只能有一个Column指定此属性),指定此列模拟树显示时的层次字段(0,1,2,...)(示例在grid_simulate_tree.aspx)。 -切换分页时清空选中的值 [feedback:jqpeng]。 -增加PreRowDataBound事件,可以在据绑定之前设置某列的属性 [feedback:xmzhu] (示例在grid_prerowdatabound.aspx)。 -DropDownList模拟树的方式显示,增加DataSimulateTreeLevelField属性,使用方法和Grid的类似(示例在dropdownlist_simulate_tree.aspx)。 +2008-06-25 v0.2 beta9 +Window窗体中的Iframe只让内容区域滚动,而Toolbar不滚动的规则。(示例在content_page2.aspx/simpleform.aspx)[fixed] -在simpleform.aspx中:Panel[BodyPadding=5](Toolbar,Panel[Height=450 Layout=Fit](SimpleForm[AutoScroll=true])),则外面窗口的高度=450 + 5*2 + 26 + 32,其中26是Toolbar的高度,32是窗口的标题栏和下边框的高度。 +关闭Iframe的LoadMask,所以需要Iframe页面添加PageLoading控件,这样效果统一。[fixed] +Grid完善。 -去除EnableClientPaging和EnableClientSort属性,客户端排序和客户端分页在ASP.NET应用中会有很多问题(主要是状态保持的问题)。 +EnableServerSort改名AllowSorting。(示例在grid_sorting.aspx) -使用非常简单:设置AllowSorting=true,注册OnSort事件,在事件处理函中重新绑定据。 +增加AllowPaging属性。(示例在grid_paging.aspx) -使用非常简单:设置AllowPaging=true,PageSize=3,注册OnPageIndexChange事件,在事件处理函中Grid1.PageIndex = e.NewPageIndex;OK。 +据库分页支持。(示例在grid_database_paging.aspx) -使用也非常简单:设置AllowPaging=true,PageSize=3,在绑定时设置RecordCount为总的记录,在OnPageIndexChange事件处理函中Grid1.PageIn
wpe封包的使用详细教程 现在我们开始!首先,你要知道游戏中储存据的几种格式,这几种格式是:字节(BYTE)、字(WORD)和双字(DOUBLE WORD),或者说是8位、16位和32位储存方式。字节也就是8位方式能储存0~255的字;字或说是16位储存方式能储存0~65535的;双字即32位方式能储存0~4294967295的。   为何要了解这些知识呢?在游戏中各种参的最大值是不同的,有些可能100左右就够了,比如,金庸群侠传中的角色的等级、随机遇敌个等等。而有些却需要大于255甚至大于65535,象金庸群侠传中角色的金钱值可达到百万。所以,在游戏中各种不同的据的类型是不一样的。在我们修改游戏时需要寻找准备修改的据的封包,在这种时候,正确判断据的类型是迅速找到正确地址的重要条件。   在计算机中据以字节为基本的储存单位,每个字节被赋予一个编号,以确定各自的位置。这个编号我们就称为地址。 在需要用到字或双字时,计算机用连续的两个字节来组成一个字,连续的两个字组成一个双字。而一个字或双字的地址就是它们的低位字节的地址。 现在我们常用的Windows 9x操作系统中,地址是用一个32位的二进制表示的。而在平时我们用到内存地址时,总是用一个8位的16进制来表示它。 二进制和十六进制又是怎样一回事呢?   简单说来,二进制就是一种只有0和1两个码,每满2则进一位的计进位法。同样,16进制就是每满十六就进一位的计进位法。16进制有0--F十六个字,它为表示十到十五的字采用了A、B、C、D、E、F六个字,它们和十进制的对应关系是:A对应于10,B对应于11,C对应于12,D对应于13,E对应于14,F对应于15。而且,16进制和二进制间有一个简单的对应关系,那就是;四位二进制相当于一位16进制。比如,一个四位的二进制1111就相当于16进制的F,1010就相当于A。 了解这些基础知识对修改游戏有着很大的帮助,下面我就要谈到这个问题。由于在计算机中据是以二进制的方式储存的,同时16进制和二进制间的转换关系十分简单,所以大部分的修改工具在显示计算机中的据时会显示16进制的代码,而且在你修改时也需要输入16进制的字。你清楚了吧?   在游戏中看到的据可都是十进制的,在要寻找并修改参的值时,可以使用Windows提供的计算器来进行十进制和16进制的换算,我们可以在开始菜单里的程序组中的附件中找到它。   现在要了解的知识也差不多了!不过,有个问题在游戏修改中是需要注意的。在计算机中据的储存方式一般是低位储存在低位字节,高位储存在高位字节。比如,十进制41715转换为16进制的为A2F3,但在计算机中这个被存为F3A2。 看了以上内容大家对据的存贮和据的对应关系都了解了吗? 好了,接下来我们要告诉大家在游戏中,封包到底是怎么一回事了,来!大家把袖口卷起来,让我们来干活吧! 二:什么是封包? 怎么截获一个游戏的封包? 怎么去检查游戏服务器的ip地址和端口号? Internet用户使用的各种信息服务,其通讯的信息最终均可以归结为以IP包为单位的信息传送,IP包除了包括要传送的据信息外,还包含有信息要发送到的目的IP地址、信息发送的源IP地址、以及一些相关的控制信息。当一台路由器收到一个IP据包时,它将根据据包中的目的IP地址项查找路由表,根据查找的结果将此IP据包送往对应端口。下一台IP路由器收到此据包后继续转发,直至发到目的地。路由器之间可以通过路由协议来进行路由信息的交换,从而更新路由表。 那么我们所关心的内容只是IP包中的据信息,我们可以使用许多监听网络的工具来截获客户端与服务器之间的交换据,下面就向你介绍其中的一种工具:WPE。 WPE使用方法: 执行WPE会有下列几项功能可选择: NETSTAT命令的功能是显示网络连接、路由表和网络接口信息,可以让用户得知目前都有哪些网络连接正在运作。或者你可以使用木马客星等工具来查看网络连接。工具是很多的,看你喜欢用哪一种了。 NETSTAT命令的一般格式为: NETSTAT [选项] 命令中各选项的含义如下: -a 显示所有socket,包括正在监听的。 -c 每隔1秒就重新显示一遍,直到用户中断它。 -i 显示所有网络接口的信息。 -n 以网络IP地址代替名称,显示出网络连接情形。 -r 显示核心路由表,格式同"route -e"。 -t 显示TCP协议的连接情况。 -u 显示UDP协议的连接情况。 -v 显示正在进行的工作。 三:怎么来分析我们截获的封包? 首先我们将WPE截获的封包保存为文本文件,然后打开它,这时会看到如下的据(这里我们以金庸群侠传里PK店小二客户端发送的据为例来讲解): 第一个文件: 复制内容到剪贴板 代码:SEND-> 0000 E6 56 0D 22 7E 6B E4 17 13 13 12 13 12 13 67 1B SEND-> 0010 17 12 DD 34 12 12 12 12 17 12 0E 12 12 12 9B SEND-> 0000 E6 56 1E F1 29 06 17 12 3B 0E 17 1A SEND-> 0000 E6 56 1B C0 68 12 12 12 5A SEND-> 0000 E6 56 02 C8 13 C9 7E 6B E4 17 10 35 27 13 12 12 SEND-> 0000 E6 56 17 C9 12 第二个文件: 复制内容到剪贴板 代码:SEND-> 0000 83 33 68 47 1B 0E 81 72 76 76 77 76 77 76 02 7E SEND-> 0010 72 77 07 1C 77 77 77 77 72 77 72 77 77 77 6D SEND-> 0000 83 33 7B 94 4C 63 72 77 5E 6B 72 F3 SEND-> 0000 83 33 7E A5 21 77 77 77 3F SEND-> 0000 83 33 67 AD 76 CF 1B 0E 81 72 75 50 42 76 77 77 SEND-> 0000 83 33 72 AC 77 我们发现两次PK店小二的据格式一样,但是内容却不相同,我们是PK的同一个NPC,为什么会不同呢? 原来金庸群侠传的封包是经过了加密运算才在网路上传输的,那么我们面临的问题就是如何将密文解密成明文再分析了。 因为一般的据包加密都是异或运算,所以这里先讲一下什么是异或。 简单的说,异或就是"相同为0,不同为1"(这是针对二进制按位来讲的),举个例子,0001和0010异或,我们按位对比,得到异或结果是0011,计算的方法是:0001的第4位为0,0010的第4位为0,它们相同,则异或结果的第4位按照"相同为0,不同为1"的原则得到0,0001的第3位为0,0010的第3位为0,则异或结果的第3位得到0,0001的第2位为0,0010的第2位为1,则异或结果的第2位得到1,0001的第1位为1,0010的第1位为0,则异或结果的第1位得到1,组合起来就是0011。异或运算今后会遇到很多,大家可以先熟悉熟悉,熟练了对分析很有帮助的。 下面我们继续看看上面的两个文件,按照常理,据包的据不会全部都有值的,游戏开发时会预留一些字节空间来便于日后的扩充,也就是说据包里会存在一些"00"的字节,观察上面的文件,我们会发现文件一里很多"12",文件二里很多"77",那么这是不是代表我们说的"00"呢?推理到这里,我们就开始行动吧! 我们把文件一与"12"异或,文件二与"77"异或,当然用手算很费事,我们使用"M2M 1.0 加密封包分析工具"来计算就方便多了。得到下面的结果: 第一个文件: 复制内容到剪贴板 代码:1 SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 SEND-> 0010 05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89 2 SEND-> 0000 F4 44 0C E3 3B 13 05 00 29 1C 05 08 3 SEND-> 0000 F4 44 09 D2 7A 00 00 00 48 4 SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00 5 SEND-> 0000 F4 44 05 DB 00第二个文件: 复制内容到剪贴板 代码:1 SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 SEND-> 0010 05 00 70 6B 00 00 00 00 05 00 05 00 00 00 1A 2 SEND-> 0000 F4 44 0C E3 3B 13 05 00 29 1C 05 84 3 SEND-> 0000 F4 44 09 D2 56 00 00 00 48 4 SEND-> 0000 F4 44 10 DA 01 B8 6C 79 F6 05 02 27 35 01 00 00 5 SEND-> 0000 F4 44 05 DB 00 哈,这一下两个文件大部分都一样啦,说明我们的推理是正确的,上面就是我们需要的明文! 接下来就是搞清楚一些关键的字节所代表的含义,这就需要截获大量的据来分析。 首先我们会发现每个据包都是"F4 44"开头,第3个字节是变化的,但是变化很有规律。我们来看看各个包的长度,发现什么没有?对了,第3个字节就是包的长度! 通过截获大量的据包,我们判断第4个字节代表指令,也就是说客户端告诉服务器进行的是什么操作。例如向服务器请求战斗指令为"30",战斗中移动指令为"D4"等。 接下来,我们就需要分析一下上面第一个包"F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89",在这个包里包含什么信息呢?应该有通知服务器你PK的哪个NPC吧,我们就先来找找这个店小二的代码在什么地方。 我们再PK一个小喽罗(就是大理客栈外的那个咯): 复制内容到剪贴板 代码:SEND-> 0000 F4 44 1F 30 D4 75 F6 05 01 01 00 01 00 01 75 09 SEND-> 0010 05 00 8A 19 00 00 00 00 11 00 02 00 00 00 C0 我们根据常理分析,游戏里的NPC种类虽然不会超过65535(FFFF),但开发时不会把自己限制在字的范围,那样不利于游戏的扩充,所以我们在双字里看看。通过"店小二"和"小喽罗"两个包的对比,我们把目标放在"6C 79 F6 05"和"CF 26 00 00"上。(对比一下很容易的,但你不能太迟钝咯,呵呵)我们再看看后面的包,在后面的包里应该还会出现NPC的代码,比如移动的包,游戏允许观战,服务器必然需要知道NPC的移动坐标,再广播给观战的其他玩家。在后面第4个包"SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00"里我们又看到了"6C 79 F6 05",初步断定店小二的代码就是它了! (这分析里边包含了很多工作的,大家可以用WPE截下据来自己分析分析) 第一个包的分析暂时就到这里(里面还有的信息我们暂时不需要完全清楚了) 我们看看第4个包"SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00",再截获PK黄狗的包,(狗会出来2只哦)看看包的格式: 复制内容到剪贴板 代码:SEND-> 0000 F4 44 1A DA 02 0B 4B 7D F6 05 02 27 35 01 00 00 SEND-> 0010 EB 03 F8 05 02 27 36 01 00 00 根据上面的分析,黄狗的代码为"4B 7D F6 05"(100040011),不过两只黄狗服务器怎样分辨呢?看看"EB 03 F8 05"(100140011),是上一个代码加上100000,呵呵,这样服务器就可以认出两只黄狗了。我们再通过野外遇敌截获的据包来证实,果然如此。 那么,这个包的格式应该比较清楚了:第3个字节为包的长度,"DA"为指令,第5个字节为NPC个,从第7个字节开始的10个字节代表一个NPC的信息,多一个NPC就多10个字节来表示。 大家如果玩过网金,必然知道随机遇敌有时会出现增援,我们就利用游戏这个增援来让每次战斗都会出现增援的NPC吧。 通过在战斗中出现增援截获的据包,我们会发现服务器端发送了这样一个包: 复制内容到剪贴板 代码:F4 44 12 E9 EB 03 F8 05 02 00 00 03 00 00 00 00 00 00 第5-第8个字节为增援NPC的代码(这里我们就简单的以黄狗的代码来举例)。 那么,我们就利用单机代理技术来同时欺骗客户端和服务器吧! 好了,呼叫NPC的工作到这里算是完成了一小半,接下来的事情,怎样修改封包和发送封包,我们下节继续讲解吧。 四:怎么冒充"客户端"向"服务器"发我们需要的封包? 这里我们需要使用一个工具,它位于客户端和服务器端之间,它的工作就是进行据包的接收和转发,这个工具我们称为代理。 如果代理的工作单纯就是接收和转发的话,这就毫无意义了,但是请注意:所有的据包都要通过它来传输,这里的意义就重大了。我们可以分析接收到的据包,或者直接转发,或者修改后转发,或者压住不转发,甚至伪造我们需要的封包来发送。 下面我们继续讲怎样来同时欺骗服务器和客户端,也就是修改封包和伪造封包。 通过我们上节的分析,我们已经知道了打多个NPC的封包格式,那么我们就动手吧! 首先我们要查找客户端发送的包,找到战斗的特征,就是请求战斗的第1个包,我们找"F4 44 1F 30"这个特征,这是不会改变的,当然是要解密后来查找哦。 找到后,表示客户端在向服务器请求战斗,我们不动这个包,转发。 继续向下查找,这时需要查找的特征码不太好办,我们先查找"DA",这是客户端发送NPC信息的据包的指令,那么可能其他包也有"DA",没关系,我们看前3个字节有没有"F4 44"就行了。找到后,我们的工作就开始了! 我们确定要打的NPC量。这个量不能很大,原因在于网金的封包长度用一个字节表示,那么一个包可以有255个字节,我们上面分析过,增加一个NPC要增加10个字节,所以大家算算就知道,打20个NPC比较合适。 然后我们要把客户端原来的NPC代码分析计算出来,因为增加的NPC代码要加上100000哦。再把我们增加的NPC代码计算出来,并且组合成新的封包,注意代表包长度的字节要修改啊,然后转发到服务器,这一步在编写程序的时候要注意算法,不要造成较大延迟。 上面我们欺骗服务器端完成了,欺骗客户端就简单了,^-^ 发送了上面的封包后,我们根据新增NPC代码构造封包马上发给客户端,格式就是"F4 44 12 E9 NPC代码 02 00 00 03 00 00 00 00 00 00",把每个新增的NPC都构造这样一个包,按顺序连在一起发送给客户端,客户端也就被我们骗过了,很简单吧。 以后战斗中其他的事我们就不管了,尽情地开打吧,呵呵。 本人亲身试过,特别好用,绝对无毒,好用请好评!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值