﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-happyfish</title><link>http://www.blogjava.net/happyfish/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 08:24:20 GMT</lastBuildDate><pubDate>Thu, 23 Apr 2026 08:24:20 GMT</pubDate><ttl>60</ttl><item><title>JAVA程序员面试32问------------答案</title><link>http://www.blogjava.net/happyfish/archive/2005/07/29/8761.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Fri, 29 Jul 2005 13:04:00 GMT</pubDate><guid>http://www.blogjava.net/happyfish/archive/2005/07/29/8761.html</guid><wfw:comment>http://www.blogjava.net/happyfish/comments/8761.html</wfw:comment><comments>http://www.blogjava.net/happyfish/archive/2005/07/29/8761.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/happyfish/comments/commentRss/8761.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/happyfish/services/trackbacks/8761.html</trackback:ping><description><![CDATA[第一，谈谈final, finally, finalize的区别。 <BR><BR>　　final?修饰符（关键字）如果一个类被声明为final，意味着它不能再派生出新的子类，不能作为父类被继承。因此一个类不能既被声明为 abstract的，又被声明为final的。将变量或方法声明为final，可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值，而在以后的引用中只能读取，不可修改。被声明为final的方法也同样只能使用，不能重载finally?再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常，那么相匹配的 catch 子句就会执行，然后控制就会进入 finally 块（如果有的话）。 <BR><BR>　　finalize?方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的，因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 <BR><BR>　　第二，Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类，是否可以implements(实现)interface(接口)? <BR><BR>　　匿名的内部类是没有名字的内部类。不能extends(继承) 其它类，但一个内部类可以作为一个接口，由另一个内部类实现。 <BR><BR>　　第三，Static Nested Class 和 Inner Class的不同，说得越多越好(面试题有的很笼统)。<BR><BR>　　Nested Class （一般是C++的说法），Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: //www.frontfree.net/articles/services/view.asp?id=704&amp;page=1 <BR><BR>　　注： 静态内部类（Inner Class）意味着1创建一个static内部类的对象，不需要一个外部类对象，2不能从一个static内部类的一个对象访问一个外部类对象 <BR><BR>　　第四，&amp;和&amp;&amp;的区别。<BR><BR>　　&amp;是位运算符。&amp;&amp;是布尔逻辑运算符。 <BR><BR>　　第五，HashMap和Hashtable的区别。 <BR><BR>　　都属于Map接口的类，实现了将惟一键映射到特定的值上。 <BR><BR>　　HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。 <BR><BR>　　Hashtable 类似于 HashMap，但是不允许 null 键和 null 值。它也比 HashMap 慢，因为它是同步的。 <BR><BR>　　第六，Collection 和 Collections的区别。 <BR><BR>　　Collections是个java.util下的类，它包含有各种有关集合操作的静态方法。 <BR>　　Collection是个java.util下的接口，它是各种集合结构的父接口。 <BR><BR>第七，什么时候用assert。 <BR><BR>　　断言是一个包含布尔表达式的语句，在执行这个语句时假定该表达式为 true。如果表达式计算为 false，那么系统会报告一个 AssertionError。它用于调试目的： <BR><BR>assert(a &gt; 0); // throws an AssertionError if a &lt;= 0 <BR><BR>　　断言可以有两种形式： <BR><BR>　　assert Expression1 ; <BR>　　assert Expression1 : Expression2 ; <BR><BR>　　Expression1 应该总是产生一个布尔值。 <BR>　　Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。 <BR>断言在默认情况下是禁用的。要在编译时启用断言，需要使用 source 1.4 标记： <BR><BR>　　javac -source 1.4 Test.java <BR><BR>　　要在运行时启用断言，可使用 -enableassertions 或者 -ea 标记。 <BR>　　要在运行时选择禁用断言，可使用 -da 或者 -disableassertions 标记。 <BR>　　要系统类中启用断言，可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。 <BR><BR>　　可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过，断言不应该用于验证传递给公有方法的参数，因为不管是否启用了断言，公有方法都必须检查其参数。不过，既可以在公有方法中，也可以在非公有方法中利用断言测试后置条件。另外，断言不应该以任何方式改变程序的状态。 <BR><BR><BR>　　第八，GC是什么? 为什么要有GC? (基础)。 <BR><BR>　　GC是垃圾收集器。Java 程序员不用担心内存管理，因为垃圾收集器会自动进行管理。要请求垃圾收集，可以调用下面的方法之一： <BR><BR>　　System.gc() <BR>　　Runtime.getRuntime().gc() <BR><BR>　　第九，String s = new String("xyz");创建了几个String Object? <BR><BR>　　两个对象，一个是“xyx”,一个是指向“xyx”的引用对象s。 <BR><BR>　　第十，Math.round(11.5)等於多少? Math.round(-11.5)等於多少? <BR><BR>　　Math.round(11.5)返回（long）12，Math.round(-11.5)返回（long）-11; <BR><BR>　　第十一，short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? <BR><BR>　　short s1 = 1; s1 = s1 + 1;有错，s1是short型，s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。 <BR><BR>　　第十二，sleep() 和 wait() 有什么区别? 搞线程的最爱 <BR><BR>　　sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后，线程不一定立即恢复执行。这是因为在那个时刻，其它线程可能正在运行而且没有被调度为放弃执行，除非(a)“醒来”的线程具有更高的优先级，(b)正在运行的线程因为其它原因而阻塞。 <BR><BR>　　wait()是线程交互时，如果线程对一个同步对象x 发出一个wait()调用，该线程会暂停执行，被调对象进入等待状态，直到被唤醒或等待时间到。 <BR>第十三，Java有没有goto? <BR><BR>　　Goto?java中的保留字，现在没有在java中使用。 <BR><BR>　　第十四，数组有没有length()这个方法? String有没有length()这个方法？ <BR><BR>　　数组没有length()这个方法，有length的属性。 <BR>　　String有有length()这个方法。 <BR><BR>　　第十五，Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? <BR><BR>　　方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现，重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数，我们说该方法被重写 (Overriding)。子类的对象使用这个方法时，将调用子类中的定义，对它而言，父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法，它们或有不同的参数个数或有不同的参数类型，则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 <BR><BR>　　第十六，Set里的元素是不能重复的，那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? <BR><BR>　　Set里的元素是不能重复的，那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。 <BR><BR>　　equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖，为的是当两个分离的对象的内容和类型相配的话，返回真值。 <BR><BR>　　第十七，给我一个你最常见到的runtime exception。 <BR><BR>　　ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, <BR>ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException <BR><BR>　　第十八，error和exception有什么区别? <BR><BR>　　error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。<BR><BR>　　exception 表示一种设计或实现问题。也就是说，它表示如果程序运行正常，从不会发生的情况。 <BR><BR><BR>　　第十九，List, Set, Map是否继承自Collection接口? <BR><BR>　　List，Set是 <BR><BR>　　Map不是 <BR><BR>第二十，abstract class和interface有什么区别? <BR><BR>　　声明方法的存在而不去实现它的类被叫做抽象类（abstract class），它用于要创建一个体现某些基本行为的类，并为该类声明方法，但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量，其类型是一个抽象类，并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现，否则它们也是抽象类为。取而代之，在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 <BR><BR>　　接口（interface）是抽象类的变体。在接口中，所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的，没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似，除了该实现类不能从接口定义中继承行为。当类实现特殊接口时，它定义（即将程序体给予）所有这种接口的方法。然后，它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类，它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换，instanceof 运算符可以用来决定某对象的类是否实现了接口。 <BR><BR>　　第二十一，abstract的method是否可同时是static,是否可同时是native，是否可同时是synchronized? <BR><BR>　　都不能 <BR><BR>　　第二十二，接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? <BR><BR>　　接口可以继承接口。抽象类可以实现(implements)接口，抽象类是否可继承实体类，但前提是实体类必须有明确的构造函数。 <BR><BR>　　第二十三，启动一个线程是用run()还是start()? <BR><BR>　　启动一个线程是调用start()方法，使线程所代表的虚拟处理机处于可运行状态，这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。 <BR><BR><BR><BR>　　第二十四，构造器Constructor是否可被override? <BR><BR>　　构造器Constructor不能被继承，因此不能重写Overriding，但可以被重载Overloading。 <BR><BR>　　第二十五，是否可以继承String类? <BR><BR>　　String类是final类故不可以继承。 <BR><BR>　　第二十六，当一个线程进入一个对象的一个synchronized方法后，其它线程是否可进入此对象的其它方法? <BR><BR>　　不能，一个对象的一个synchronized方法只能由一个线程访问。 <BR><BR>　　第二十七，try {}里有一个return语句，那么紧跟在这个try后的finally {}里的code会不会被执行，什么时候被执行，在return前还是后? <BR><BR>　　会执行，在return前执行。 <BR>　第二十八，编程题: 用最有效率的方法算出2乘以8等於几? <BR><BR>　　有C背景的程序员特别喜欢问这种问题。 <BR><BR>　　2 &lt;&lt; 3 <BR><BR>　　第二十九，两个对象值相同(x.equals(y) == true)，但却可有不同的hash code，这句话对不对? <BR><BR>　　不对，有相同的hash code。 <BR><BR>　　第三十，当一个对象被当作参数传递到一个方法后，此方法可改变这个对象的属性，并可返回变化后的结果，那么这里到底是值传递还是引用传递? <BR><BR>　　是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时，参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变，但对象的引用是永远不会改变的。 <BR><BR><BR>　　第三十一，swtich是否能作用在byte上，是否能作用在long上，是否能作用在String上? <BR><BR>　　switch（expr1）中，expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。 <BR><BR>　　第三十二，编程题: 写一个Singleton出来。<BR><BR>　　Singleton模式主要作用是保证在Java应用程序中，一个类Class只有一个实例存在。 <BR><BR>　　一般Singleton模式通常有几种种形式: <BR><BR>　　第一种形式: 定义一个类，它的构造函数为private的，它有一个static的private的该类变量，在类初始化时实例话，通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。 <BR><BR>public class Singleton { <BR>　　private Singleton(){} <BR>　　//在自己内部定义自己一个实例，是不是很奇怪？ <BR>　　//注意这是private 只供内部调用 <BR>　　private static Singleton instance = new Singleton(); <BR>　　//这里提供了一个供外部访问本class的静态方法，可以直接访问　　 <BR>　　public static Singleton getInstance() { <BR>　　　　return instance; 　　 <BR>　　 } <BR>} <BR><BR>　　第二种形式: <BR><BR>public class Singleton { <BR>　　private static Singleton instance = null; <BR>　　public static synchronized Singleton getInstance() { <BR>　　//这个方法比上面有所改进，不用每次都进行生成对象，只是第一次　　　 　 <BR>　　//使用时生成实例，提高了效率！ <BR>　　if (instance==null) <BR>　　　　instance＝new Singleton(); <BR>return instance; 　　} <BR>} <BR><BR>　　其他形式: <BR><BR>　　定义一个类，它的构造函数为private的，所有方法为static的。 <BR><BR>　　一般认为第一种形式要更加安全些 <BR><BR>　　第三十三 Hashtable和HashMap <BR><BR>　　Hashtable继承自Dictionary类，而HashMap是Java1.2引进的Map interface的一个实现 <BR><BR>　　HashMap允许将null作为一个entry的key或者value，而Hashtable不允许 <BR><BR>　　还有就是，HashMap把Hashtable的contains方法去掉了，改成containsvalue和containsKey。因为contains方法容易让人引起误解。 <BR><BR>　　最大的不同是，Hashtable的方法是Synchronize的，而HashMap不是，在多个线程访问Hashtable时，不需要自己为它的方法实现同步，而HashMap就必须为之提供外同步。 <BR><BR>　　Hashtable和HashMap采用的hash/rehash算法都大概一样，所以性能不会有很大的差异。<BR><img src ="http://www.blogjava.net/happyfish/aggbug/8761.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/happyfish/" target="_blank">小鱼儿</a> 2005-07-29 21:04 <a href="http://www.blogjava.net/happyfish/archive/2005/07/29/8761.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA程序员面试32问,你能回答多少题? 出处：JAVA中文站 </title><link>http://www.blogjava.net/happyfish/archive/2005/07/29/8760.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Fri, 29 Jul 2005 12:57:00 GMT</pubDate><guid>http://www.blogjava.net/happyfish/archive/2005/07/29/8760.html</guid><wfw:comment>http://www.blogjava.net/happyfish/comments/8760.html</wfw:comment><comments>http://www.blogjava.net/happyfish/archive/2005/07/29/8760.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/happyfish/comments/commentRss/8760.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/happyfish/services/trackbacks/8760.html</trackback:ping><description><![CDATA[<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第一，谈谈final, finally, finalize的区别。&nbsp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第二，Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类，是否可以implements(实现)interface(接口)? <BR><BR>　　第三，Static Nested Class 和 Inner Class的不同，说得越多越好(面试题有的很笼统)。 <BR><BR>　　第四，&amp;和&amp;&amp;的区别。 <BR><BR>　　第五，HashMap和Hashtable的区别。 <BR><BR>第六，Collection 和 Collections的区别。 <BR><BR>　　第七，什么时候用assert。 <BR><BR>　　第八，GC是什么? 为什么要有GC? <BR><BR>　　第九，String s = new String("xyz");创建了几个String Object? <BR><BR>　　第十，Math.round(11.5)等於多少? Math.round(-11.5)等於多少? <BR><BR>　　第十一，short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? <BR><BR>　　第十二，sleep() 和 wait() 有什么区别? <BR><BR>　　第十三，Java有没有goto? <BR><BR>　　第十四，数组有没有length()这个方法? String有没有length()这个方法? <BR><BR>　　第十五，Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? <BR><BR>　　第十六，Set里的元素是不能重复的，那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? <BR><BR>　　第十七，给我一个你最常见到的runtime exception。 <BR><BR>　　第十八，error和exception有什么区别? <BR><BR>　　第十九，List, Set, Map是否继承自Collection接口? <BR><BR>　　第二十，abstract class和interface有什么区别? <BR><BR>　　第二十一，abstract的method是否可同时是static,是否可同时是native，是否可同时是synchronized? <BR><BR>　　第二十二，接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? <BR><BR>　　第二十三，启动一个线程是用run()还是start()? <BR><BR>　　第二十四，构造器Constructor是否可被override? <BR><BR>　　第二十五，是否可以继承String类? <BR><BR>　　第二十六，当一个线程进入一个对象的一个synchronized方法后，其它线程是否可进入此对象的其它方法? <BR><BR>　　第二十七，try {}里有一个return语句，那么紧跟在这个try后的finally {}里的code会不会被执行，什么时候被执行，在return前还是后? <BR><BR>　　第二十八，编程题: 用最有效率的方法算出2乘以8等於几? <BR><BR>　　第二十九，两个对象值相同(x.equals(y) == true)，但却可有不同的hash code，这句话对不对? <BR><BR>　　第三十，当一个对象被当作参数传递到一个方法后，此方法可改变这个对象的属性，并可返回变化后的结果，那么这里到底是值传递还是引用传递? <BR><BR>　　第三十一，swtich是否能作用在byte上，是否能作用在long上，是否能作用在String上? <BR><BR>　　第三十二，编程题: 写一个Singleton出来。<BR><BR></P><img src ="http://www.blogjava.net/happyfish/aggbug/8760.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/happyfish/" target="_blank">小鱼儿</a> 2005-07-29 20:57 <a href="http://www.blogjava.net/happyfish/archive/2005/07/29/8760.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c/c++</title><link>http://www.blogjava.net/happyfish/archive/2005/07/25/8429.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Mon, 25 Jul 2005 10:04:00 GMT</pubDate><guid>http://www.blogjava.net/happyfish/archive/2005/07/25/8429.html</guid><wfw:comment>http://www.blogjava.net/happyfish/comments/8429.html</wfw:comment><comments>http://www.blogjava.net/happyfish/archive/2005/07/25/8429.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/happyfish/comments/commentRss/8429.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/happyfish/services/trackbacks/8429.html</trackback:ping><description><![CDATA[<P><BR>1.在进行进栈操作时,应该首先检查栈是否( 已满). <BR>2.p操作使进程( )v操作使进程( ). <BR>3.多任务操作系统的进程通讯方式有(管道)(共享内存)(发送信号)进程调度的方式有(抢夺)(非抢夺). <BR>4.int a[3][4],(*p)[4]; <BR>p=a; <BR>则*p+1指向(p[0][1]). <BR>5.在一个顺序存储结构里,LO表示第一个存储单元的地址,设每个存储单元的长度为M,则第n个存储单元的地址为(LO + (n-1)*M). <BR>6.进程死锁的条件不包括 a<BR>a抢先 b循环等待 c互斥 d动态分配资源 <BR>7.有5个进程,一个正在运行状态,则就绪的进程最多的个数. c<BR>a0 b1 c4 d5 <BR>8.写出运行结果 d<BR>#include&lt;iostream.h&gt; <BR>int fn(int a,int b) <BR>{ <BR>if(b&gt;0) <BR>&nbsp; return a*fn(a,b-1); <BR>&nbsp;else <BR>&nbsp;&nbsp; return 1; <BR>} <BR>void main() <BR>{ <BR>&nbsp;cout&lt;&lt;fn(5,3)&lt;&lt;endl; <BR>} <BR>a60&nbsp; b70&nbsp; c120 d125 </P>
<P>9 <BR>union <BR>{ <BR>&nbsp;struct <BR>&nbsp;{ <BR>&nbsp;&nbsp;&nbsp; unsigned int x1:2; <BR>&nbsp;&nbsp;&nbsp; unsigned int x2:3; <BR>&nbsp;&nbsp;&nbsp; unsigned int x3:3; <BR>&nbsp;}x; <BR>&nbsp;char y; <BR>}z; <BR>如果令z.y=100则z.x.x3为 c<BR>a 0 b 1&nbsp; c3&nbsp;&nbsp; d4 </P>
<P>10 <BR>执行操作pushi(1),pop(),pop()后,栈顶元素为 d<BR>a 0&nbsp; b1&nbsp; c2&nbsp; d不确定 </P>
<P>11 <BR>改程序中的错误 <BR>(1) <BR>unsigned int sum(unsigned int base) <BR>{ <BR>&nbsp;static unsigned int sum=0; <BR>&nbsp;unsigned int index; <BR>&nbsp;for (index=1;index&lt;=base;index++) <BR>&nbsp;sum+=index; <BR>&nbsp;return sum; <BR>} <BR>(2) <BR>unsigned char a; <BR>int*b; <BR>*b=100; <BR>a=100; <BR>while(a&gt;=0) <BR>{ <BR>&nbsp;a--; <BR>........ <BR>} <BR>1.unsigned char；无符号类型，当然a&gt;=0永远成立，就算不停a--<BR>死循环<BR>2.int* b； 野指针，指向不定地址<BR>*b=100； 改变不定地址的值，危险<BR>(3) <BR>class C <BR>{ <BR>&nbsp;... <BR>}; <BR>class B{ <BR>pribate: <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *p; <BR>public: <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B(){p=new C[100];} <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~B(){deldte p;} <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }; </P>
<P>B CreateB() <BR>{ <BR>&nbsp;B b; <BR>&nbsp;return b; <BR>} <BR>1、new [] 应该对应 delete[]<BR>2、return b;隐含调用拷贝构造。类实现中最好提供拷贝构造函数的实现，默认为bit copy不应满足实际要求，另外题目意图可能还是这里：返回 B&amp;。或者修改为<BR>B* CreateB() <BR>{ <BR>&nbsp;B* b = new B; <BR>&nbsp;return b;<BR>}<BR>12 <BR>看程序写结果! <BR>(1) <BR>#include&lt;iostream.h&gt; <BR>class A <BR>{ <BR>public: <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A(int y) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my=y; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mx=mx+my; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void display() <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;"a="&lt;&lt;my&lt;&lt;"b="&lt;&lt;mx&lt;&lt;endl; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <BR>private: <BR>&nbsp; static int mx; <BR>&nbsp; int my; <BR>}; <BR>int A::mx=2; <BR>void main() <BR>{ <BR>A a1(2); <BR>&nbsp;A a2(4); </P>
<P>&nbsp;a1.display(); <BR>&nbsp;a2.display(); <BR>} </P>
<P>(2) <BR>chat *GetMemory(viod) <BR>{ <BR>&nbsp;char p[]="hello world"; <BR>&nbsp;return p; <BR>} <BR>void Test(void) <BR>{ <BR>&nbsp;char*str=NULL; <BR>str = GetMemory(); <BR>printf(str); <BR>} </P>
<P>13 <BR>使用fmc的CCriticalSection,CEvent类或Window API函数或伪代码加注释的方式表示 <BR>1.要是下面程序的结果只是a.x=4,a.y=5或a.x=4000,a.y=5000(而不是a.x=4000,a.y=5或a.x=4,a.y=5000)应该在什么位置加入什么代码? <BR>struct A <BR>{ <BR>&nbsp;int x.y; <BR>}a; <BR>fun1() <BR>{ <BR>a.x=4; <BR>a.y=5; <BR>} <BR>fun2() <BR>{ <BR>a.x=4000; <BR>a.y=5000; <BR>} <BR>AfxBeginThread(fun1,...); <BR>AfxBeginThread(fun2,...); </P>
<P>(2) <BR>有如下代码,要使线程1执行完后线程2才开始执行,应在什么位置加入什么代码?? <BR>Thread1() <BR>{ <BR>&nbsp;程序段1 <BR>... <BR>程序段2 <BR>} <BR>Thread2() <BR>{ <BR>&nbsp; <BR>... </P>
<P>} <BR>main() <BR>{ <BR>&nbsp; AfxBeginThread(fun1,...); <BR>AfxBeginThread(fun2,...); <BR>} </P>
<P>14 <BR>构造一个类Singleton,使该类只能存在一个实例. <BR>将构造函数写为private的，然后通过一个成员静态函数来调用构造函数即可。<BR>15 <BR>编写一个函数subs(char *str)打印出str的所有子串(例如1234的子串包括:1,2,3,4,12,13,14,23,24,34,123,234,1234)不能使用系统提供的有关字符处理的类库,库函数. </P>
<P>16 <BR>编写一个先入先出缓冲区的公共函数(或类库)程序.不限c c++.不能使用明显低效的方案 <BR>缓冲区的规则是: <BR>1.缓冲区最大长度100m <BR>2.向缓冲区存入数据时放在上次存入数据的后面 <BR>3.从缓冲区取出数据时,从缓冲区未被取走到数据的头部取.取出数据的缓冲区即可认为是空.以后杂再存入. <BR>至少要为此缓冲区编写两个接口操作函数: <BR>1.存入数据函数.第一个参数是int 长度值.第二个是指向二进制字节的指针.指向存入的数据. <BR>2.取出数据函数.第一个参数是int 长度值.第二个是指字节的指针,指向取出数据后的内存位置.</P>
<P>&nbsp;</P>
<P>问题1：<BR>function_C()<BR>{<BR>&nbsp;static&nbsp; int A;<BR>&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp; B;<BR>}<BR>请问，A和B的区别<BR>PS：我只回答出了，当程序运行完function_C后，A的值将会保存，直到<BR>下一次进入function_C，A的值才会被改变；<BR>当程序运行完function_C后，B的值就会立刻发生变化了。<BR>请问：A和B各自存储在什么区域：<BR>1:数据域 2：代码域 3：堆栈<BR>A在数据域；B在栈。</P>
<P>问题2：<BR>在32位编译系统中，<BR>typedef struct<BR>{<BR>&nbsp;int&nbsp; A<BR>&nbsp;char B<BR>}T_s;<BR>请问T_s的长度为几个字节，我回答的是6个字节。<BR>有没有对齐的问题呀？？<BR>有的，8</P>
<P>问题3：<BR>*char function_C<BR>{<BR>&nbsp;char str[4]="abcd";</P>
<P>return str;<BR>}</P>
<P>function_A<BR>{<BR>&nbsp;char *ptr;</P>
<P>&nbsp;ptr=function_C;<BR>}<BR>请问这种用法对么？<BR>问题4：<BR>int *ptr;<BR>typedef struct<BR>{<BR>&nbsp;int&nbsp; A<BR>&nbsp;char B<BR>}T_s;</P>
<P>T_s&nbsp; s[4];</P>
<P>ptr指向结构数组(s[4])<BR>的第一个元素，<BR>请问<BR>ptr+1指向哪个元素，在该元素的什么位置。</P>
<P>&nbsp;</P>
<P>8086/8088的微机只有一种工作模式（即实模式）只能处理1M以下的地址（16位），这种地址被城为实地址。后来Intel为了突破1M的内存的限制，推出了386等芯片，增加了保护模式，在32位保护模式下，程序可以访问4G内存空间。但同时为了同以前的程序保持兼容，所以旧程序在实模式下运行，而32位程序可以运行在保护模式下，从而最大地发挥服务器的能力。DOS是运行在实模式的，而Windows 9x/NT都是运行在保护模式的。CPU有专门的保护模式指令。</P>
<P>void FAR* memcopy(char *dst,char *src,size_t count)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void * ret = dst;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (count--) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *(char *)dst = *(char *)src;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dst = (char *)dst + 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src = (char *)src + 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return(ret);<BR>}</P>
<P>&nbsp;</P>
<P><BR>1、完成字符串拷贝可以使用 sprintf、strcpy 及 memcpy 函数，请问这些函数<BR>&nbsp;&nbsp; 有什么区别，你喜欢使用哪个，为什么？</P>
<P>2、变量的声明和定义有什么区别？</P>
<P>3、请写出下面代码在 32 位平台上的运行结果，并说明 sizeof 的性质：</P>
<P>#include &lt;stdio.h&gt;<BR>#include &lt;stdlib.h&gt;</P>
<P>int main(void)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char a[30];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *b = (char *)malloc(20 * sizeof(char));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%d\n", sizeof(a));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%d\n", sizeof(b));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%d\n", sizeof(a[3]));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%d\n", sizeof(b+3));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%d\n", sizeof(*(b+4)));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0 ;<BR>}</P>
<P>4、请完成以下题目。注意，请勿直接调用 ANSI C 函数库中的函数实现。</P>
<P>&nbsp;&nbsp; a)请编写一个 C 函数，该函数给出一个字节中被置 1 的位的个数，并请<BR>&nbsp;&nbsp;&nbsp;&nbsp; 给出该题的至少一个不同解法。<BR>&nbsp;&nbsp; b)请编写一个 C 函数，该函数将给定的一个字符串转换成整数。<BR>&nbsp;&nbsp; c)请编写一个 C 函数，该函数将给定的一个整数转换成字符串。<BR>&nbsp;&nbsp; d)请编写一个 C 函数，该函数将一个字符串逆序。<BR>&nbsp;&nbsp; e)请编写一个 C 函数，该函数在给定的内存区域搜索给定的字符，并返回<BR>&nbsp;&nbsp;&nbsp;&nbsp; 该字符所在位置索引值。<BR>&nbsp;&nbsp; f)请编写一个 C 函数，该函数在一个字符串中找到可能的最长的子字符串，<BR>&nbsp;&nbsp;&nbsp;&nbsp; 该字符串是由同一字符组成的。</P>
<P>&nbsp;</P>
<P>有关内存的思考题<BR>1.void GetMemory(char *p)<BR>{p = (char *)malloc(100);}</P>
<P>void Test(void) <BR>&nbsp; {<BR>&nbsp;&nbsp; char *str = NULL;GetMemory(str);<BR>&nbsp;&nbsp; strcpy(str, "hello world");printf(str);<BR>&nbsp; }<BR>请问运行Test函数会有什么样的结果？<BR>GetMemory()函数获取了一段内存空间，却没有很好地返回这个空间地址。产生内存泄露。<BR>　　strcpy不申请内存，不进行地址校验，直接在内存00000000H处写入字符串，程序运行后，系统很可能崩溃。<BR>2.<BR>char *GetMemory(void)<BR>&nbsp;{<BR>&nbsp; char p[] = "hello world";<BR>&nbsp; return p;<BR>&nbsp;}<BR>&nbsp;void Test(void)<BR>&nbsp;{<BR>&nbsp;&nbsp; char *str = NULL;str = GetMemory();<BR>&nbsp;&nbsp; printf(str);<BR>&nbsp;}<BR>请问运行Test函数会有什么样的结果？<BR>　　GetMemory()返回一个无效的，仅在该函数生命期内有效的一个字符串指针。str获取到了一个“合法”（编译器、语法合法）的地址。但该地址内容不可预料。<BR>　　送显之后，程序其它部分正常工作，但不会导致系统崩溃。最多是在屏幕上写了无休止的字符而已。</P>
<P>&nbsp;</P><img src ="http://www.blogjava.net/happyfish/aggbug/8429.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/happyfish/" target="_blank">小鱼儿</a> 2005-07-25 18:04 <a href="http://www.blogjava.net/happyfish/archive/2005/07/25/8429.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java面试笔试题大汇总 及c/c++面试试题(转载 )</title><link>http://www.blogjava.net/happyfish/archive/2005/07/25/8426.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Mon, 25 Jul 2005 09:31:00 GMT</pubDate><guid>http://www.blogjava.net/happyfish/archive/2005/07/25/8426.html</guid><wfw:comment>http://www.blogjava.net/happyfish/comments/8426.html</wfw:comment><comments>http://www.blogjava.net/happyfish/archive/2005/07/25/8426.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/happyfish/comments/commentRss/8426.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/happyfish/services/trackbacks/8426.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JAVA相关基础知识1、面向对象的特征有哪些方面&nbsp;&nbsp;&nbsp;1.抽象：抽象就是忽略一个主题中与当前目标无关的那些方面，以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题，而只是选择其中的一部分，暂时不用部分细节。抽象包括两个方面，一是过程抽象，二是数据抽象。2.继承：继承是一种联结类的层次模型，并且允许和鼓励类的重用，它提供了一种明确表述共性的方法。对象的一个新...&nbsp;&nbsp;<a href='http://www.blogjava.net/happyfish/archive/2005/07/25/8426.html'>阅读全文</a><img src ="http://www.blogjava.net/happyfish/aggbug/8426.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/happyfish/" target="_blank">小鱼儿</a> 2005-07-25 17:31 <a href="http://www.blogjava.net/happyfish/archive/2005/07/25/8426.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>推荐PDF工具http://www.cnblogs.com/CPDF</title><link>http://www.blogjava.net/happyfish/archive/2005/06/27/6783.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Mon, 27 Jun 2005 13:32:00 GMT</pubDate><guid>http://www.blogjava.net/happyfish/archive/2005/06/27/6783.html</guid><wfw:comment>http://www.blogjava.net/happyfish/comments/6783.html</wfw:comment><comments>http://www.blogjava.net/happyfish/archive/2005/06/27/6783.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/happyfish/comments/commentRss/6783.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/happyfish/services/trackbacks/6783.html</trackback:ping><description><![CDATA[<A href="http://www.cnblogs.com/CPDF">http://www.cnblogs.com/CPDF</A><BR>有许多不错的DD<img src ="http://www.blogjava.net/happyfish/aggbug/6783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/happyfish/" target="_blank">小鱼儿</a> 2005-06-27 21:32 <a href="http://www.blogjava.net/happyfish/archive/2005/06/27/6783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>马化腾给比尔盖茨的回信</title><link>http://www.blogjava.net/happyfish/archive/2005/06/10/5861.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Fri, 10 Jun 2005 05:35:00 GMT</pubDate><guid>http://www.blogjava.net/happyfish/archive/2005/06/10/5861.html</guid><wfw:comment>http://www.blogjava.net/happyfish/comments/5861.html</wfw:comment><comments>http://www.blogjava.net/happyfish/archive/2005/06/10/5861.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/happyfish/comments/commentRss/5861.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/happyfish/services/trackbacks/5861.html</trackback:ping><description><![CDATA[<P>马化腾给比尔盖茨的回信<BR>发信站: 饮水思源 (2005年06月10日02:59:13 星期五), 站内信件<BR>&nbsp;<BR>发给:Bill Gates<BR>&nbsp;<BR>　　抄送:汪延，丁磊，周鸿?t，陈天桥<BR>&nbsp;<BR>　　发自:马化腾<BR>&nbsp;<BR>　　重要性:高<BR>&nbsp;<BR>　　Dear Gates<BR>&nbsp;<BR>　　感谢您的email，并对这时才个你回信至以深深的歉意。以下是我的私人观点，并不<BR>代表腾讯官方态度^_^<BR>&nbsp;<BR>　　1. 人在江湖，谁能不挨刀<BR>&nbsp;<BR>　　首先给您带来这么大的震惊我感到深深的歉意(没吓着您吧)。我的三亿注册用户其<BR>实也不算什么，至少在大陆这一块，还有10亿用户等着注册。我也很庆幸的是我们中国<BR>有这么多的网民，这么多的人喜欢聊天。感谢伟大的祖国，感谢飞快发展的网络，感谢</P>
<P><BR>我的爷爷奶奶……<BR>&nbsp;<BR>　　我承认我的这个看家本领是有点不太厚道，真的，我很理解你老弟你的心情，但是<BR>，事实太事实了，网络太真实了。人在江湖飘，谁能不挨刀啊，要挨也是你先来。<BR>&nbsp;<BR>　　2.这年头，谁的屁股都不干净<BR>&nbsp;<BR>　　说到捆绑，我还是敢不上老弟你的手段“高明”啊。看看你的OS，捆绑了IE。Netsc<BR>apy告你，AOL告你。捆绑了Media Play，欧盟告你，制裁你。捆绑了windows messenger<BR>，韩国的DAUM告你。呵呵，不知道你的官司要到什么时候才是个头呢?也许到时候你不得<BR>不把这些东西都删掉了。<BR>&nbsp;<BR>　　在看看我呢，虽然也捆绑了一些东西，可却没有任何人告我啊，他们也只是口头抱<BR>怨一下罢了，不像你，那些告你的人真的付出里行动。<BR>&nbsp;<BR>　　所以老弟也不用抱怨太多，周鸿?t同学说过，这年头，谁的屁股都不太干净，还是<BR>比较话糙理不糙的。<BR>&nbsp;<BR>　　3.你太高调，也太不酷了，有个CEO吧，代理的也不行<BR>&nbsp;<BR>　　在看看您的情况吧，昨天我花了一个晚上的时间，好不容易搜索到了60来个msn用户<BR>(服务器不是搬来了吗?)，我就把他们一一加为好友，可我却吃惊的发现，竟然是没有一</P>
<P><BR>人人在线的?D?D难道他们都隐身了?难道大家都去睡觉了?可是那是才8点多哦。在来看看<BR>我的QQ吧，随便什么时候在线人数都能达到1000万。<BR>&nbsp;<BR>　　我看是CEO不行，搞的代理也不行。其实我也明白你的压力，时间紧，任务重吗。最<BR>近的电影“心急吃不了热豆腐”不知道你看了没?我的QQ有几年的历史，你的MSN在中国<BR>才多久的历史，你还太嫩。<BR>&nbsp;<BR>　　建议你还是多向我学学，找个像我这样的，要不我给你代理也行，我们可以商量一<BR>下。<BR>&nbsp;<BR>　　4.在看看你的MSN.com.cn吧<BR>&nbsp;<BR>　　MSN服务器搬到中国来了，虽然吵的很热，报纸，电视，广播，杂志(这些我好像都<BR>没干过)。可是结果呢，却让我们大跌眼镜，说实话，主页公布的那天，我的确偷偷的去<BR>看了。看看都是些什么东西吧，简直就是大杂烩，随便找一些大网站凑在一起的。(这时<BR>候我才知道原来微软的人做网页的技术很差)，可这次却怎么搞成这样了呢?而随之而来<BR>的是什么呢?网友的一片骂声。<BR>&nbsp;<BR>　　“网友很失望，后果很严重”。<BR>&nbsp;<BR>　　5.QQ群就是社会网络<BR>&nbsp;</P>
<P><BR>没装QQ的，有些人不会开机关机，可是会玩QQ。对中国的网民来说，上网都是从QQ开始<BR>的，上网就是QQ，QQ就是上网。这已经形成了基本概念。<BR>&nbsp;<BR>　　另外，你可以看看泡泡，UC，还有个叫“圈圈”的东西，看他们不是还败在我脚下<BR>。我看你这个msn也不行。<BR>&nbsp;<BR>　　可能这些都不太中听，哥们也不要太担心，中国市场很大，让我们一起去开拓吧，<BR>与君共勉!<BR>&nbsp;<BR>　　yours,马化腾<BR>&nbsp;<BR>　　Regards<BR>&nbsp;</P>
<P>&nbsp;</P><img src ="http://www.blogjava.net/happyfish/aggbug/5861.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/happyfish/" target="_blank">小鱼儿</a> 2005-06-10 13:35 <a href="http://www.blogjava.net/happyfish/archive/2005/06/10/5861.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>比尔·盖茨给马化腾的一封信</title><link>http://www.blogjava.net/happyfish/archive/2005/06/10/5859.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Fri, 10 Jun 2005 05:31:00 GMT</pubDate><guid>http://www.blogjava.net/happyfish/archive/2005/06/10/5859.html</guid><wfw:comment>http://www.blogjava.net/happyfish/comments/5859.html</wfw:comment><comments>http://www.blogjava.net/happyfish/archive/2005/06/10/5859.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/happyfish/comments/commentRss/5859.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/happyfish/services/trackbacks/5859.html</trackback:ping><description><![CDATA[<DIV>比尔·盖茨给马化腾的一封信<BR>发信站:&nbsp;饮水思源&nbsp;(2005年06月10日02:58:36&nbsp;星期五),&nbsp;站内信件<BR>&nbsp;<BR>发给：Pony&nbsp;Ma<BR>抄送：丁丁，汪延，Charles，雷雷，鸿祎<BR>发自：Bill&nbsp;Gates<BR>重要性：高<BR>&nbsp;<BR>Dear&nbsp;Pony，<BR>　　冒昧给你写email，听说你对我有些意见，我想和你做一些私人交流，以下是我的5<BR>点意见，不代表microsoft官方态度：）<BR>&nbsp;<BR>　　1、人在江湖飘，谁能不挨刀<BR>　　听说你的注册用户数有两三亿，同时在线人数都超过1000万了，虽然我有点怀疑，<BR>不过还是很让我震惊啊，你们干得真的很不错，我很庆幸我还有windows，还有捆绑的看<BR>家本领，否则我基本上就没什么办法了，感谢伟大的IBM，感谢伟大的盗版事业，感谢我<BR>的爸爸妈妈……<BR>&nbsp;<BR>　　我承认我的这个看家本领是有点不太厚道，真的，我很理解老弟你的心情，但是，b<BR>usiness&nbsp;is&nbsp;business，网络太open了，占领终端很重要啊，当年我好不容易搞定Netsca<BR>pe，用IE占领了地址栏，才过上了几年幸福的网络生活，IM的时代，我怎么能缺席呢？<BR><FONT size=3>
<P>所以我必须捆绑MSN啊，人在江湖飘，谁能不挨刀啊，马克·安德森同学至今都很郁闷。<BR>&nbsp;<BR>　　2、这年头，谁的屁股都不干净<BR>&nbsp;<BR>　　再说捆绑，老弟你也不陌生啊，只是用得不太熟练。你还记得99年的OICQ多大嘛？1<BR>M？还是800K？小巧玲珑啊，现在呢？QQ都快50M了吧？几年膨胀了几十倍啊，那些游戏<BR>、音乐、硬盘、邮箱以及一堆乱七八糟的东西不都是捆绑嘛？搞得大家都说QQ臃肿，其<BR>实只不过因为你的根基太小，只是一个IM软件，加点东西太明显了，而我的windows可是<BR>OS，你的家当还是不够丰厚啊。<BR>&nbsp;<BR>　　所以老弟也不用抱怨太多，周鸿祎同学说过，这年头，谁的屁股都不太干净，还是<BR>比较话糙理不糙的。另外，关于Jerry要开掉周同学的传言已经很久了，我的线人说是6<BR>月份就有分晓，你有什么最新消息嘛？<BR>&nbsp;<BR>　　3、你太低调，太不酷了，找个CEO吧，代理的也行<BR>&nbsp;<BR>　　tencent上市了，不错，但上市之后都干了什么？除了QQ变得越来越大，好像什么都<BR>没干，虽然在读《老子》之余，我的朋友陈天桥把好公司都收购了，但你也别干瞪眼不<BR>动手啊，好歹有点资本运作，给投资人一个想象的空间也好啊。<BR>&nbsp;<BR>　　其实我明白你的压力，上市了嘛，每个季度都要发财报，投资人的德行大家都知道<BR>，一个季度业绩不增长就要发飙，做CEO日子难过啊。不过你其实可以过得潇洒一点，Je<BR></P></FONT><FONT size=3>
<P>rry和David（Yahoo&nbsp;创始人）有Terry&nbsp;Semel（Yahoo&nbsp;CEO）、Larry&nbsp;Page和Sergey&nbsp;Brin<BR>（Google创始人）有Schmidt打理一切，多省心啊，不光活得自在，大家还觉得他们很酷<BR>。我有Ballmer帮我打理，也才有时间去写点《the&nbsp;road&nbsp;ahead》之类的畅销书，给micr<BR>osoft接下来要干的事做点科普工作也不错。其实私下地说，我对新技术的迟钝地球人都<BR>知道……<BR>&nbsp;<BR>　　建议你向丁丁学习，找一个象Ted（孙德棣）一样CEO，你就可以象丁丁一样有时间<BR>学中医玩了：）<BR>&nbsp;<BR>　　4、你知道我为什么让他们那么折腾MSN.com.cn嘛？<BR>&nbsp;<BR>　　msn.com.cn来了，我知道你们那天也去“观摩”了，相信老弟你也看出来了，现在<BR>的MSN.com.cn看上去真是一个灾难。我让他们折腾是因为反正MSN迟早总要进来的，不如<BR>先来占个地儿，别老让中国用户觉得MSN就是MSN&nbsp;Messenger，那也很糟糕啊。<BR>&nbsp;<BR>　　新浪已经把中国的门户带入了死胡同，用近乎抢劫的方式抢夺报纸、杂志、电视的<BR>内容堆积出一个海量信息的门户，搜狐已经证明，谁也复发复制出另一个新浪，很可惜<BR>，看上去qq.com正在走这一条道路，尽管你可以用qq来推高用户数量，但价值何在？<BR>&nbsp;<BR>　　所以我让他们折腾MSN.com.cn，随便折腾，只要不太过分就行，反正N年之内，干过<BR>新浪还是比较困难的，我有充分的时间来做我的MSN服务，那时longhorn应该也会捆绑一<BR>些新东西来帮忙的，暂时保密：）<BR></P></FONT><FONT size=3>
<P><BR>　　5、QQ群不是社会网络<BR>　　现在社会网络很流行，似乎大家都很明白，实际上怎么收费心里都还没谱呢，没准<BR>就是一个bubble，所以QQ也该掺和掺和，说不定有一天大家都恍然大悟了呢，到时候再<BR>干可就来不及拉。<BR>&nbsp;<BR>　　IM软件做社会网络似乎是水到渠成，但实际上太不一样了。可能是技术难度太低了<BR>，我的那帮高薪软件工程师觉得很不适应，想了好久才弄出那个spaces的，虽然美国人<BR>不怎么喜欢，但中国用户好像反响还不错，聊胜于无吧。<BR>&nbsp;<BR>　　其实你们那个QQ群真的很好玩，尤其是有个叫“新花社”的群，真的太“胜总”了<BR>（谁想了解这个词的含义，请留言^_^），但不是社会网络，不过绝大部分的QQ用户似乎<BR>都兴趣不大，可能太年轻了。QQ该怎么弄社会网络，相信你也很困扰，但千万不要放弃<BR>啊，老弟。<BR>&nbsp;<BR>　　其实我应该感谢你，是QQ普及了中国小朋友对IM的了解，等他们长大了，工作了，<BR>有钱了，就慢慢转移到了MSN，无缝切换，配合默契啊：）<BR>&nbsp;<BR>　　可能这些都不太中听，哥们也不要太担心，中国市场很大，让我们一起去开拓吧，<BR>与君共勉！<BR>&nbsp;<BR>yours,Bill<BR></P></FONT></DIV><img src ="http://www.blogjava.net/happyfish/aggbug/5859.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/happyfish/" target="_blank">小鱼儿</a> 2005-06-10 13:31 <a href="http://www.blogjava.net/happyfish/archive/2005/06/10/5859.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重定义键盘的两种实现方法</title><link>http://www.blogjava.net/happyfish/archive/2005/05/19/4862.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Thu, 19 May 2005 03:35:00 GMT</pubDate><guid>http://www.blogjava.net/happyfish/archive/2005/05/19/4862.html</guid><wfw:comment>http://www.blogjava.net/happyfish/comments/4862.html</wfw:comment><comments>http://www.blogjava.net/happyfish/archive/2005/05/19/4862.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/happyfish/comments/commentRss/4862.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/happyfish/services/trackbacks/4862.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 重定义键盘的两种实现方法联系方式：大连理工大学电子系995班孙宇哲&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&...&nbsp;&nbsp;<a href='http://www.blogjava.net/happyfish/archive/2005/05/19/4862.html'>阅读全文</a><img src ="http://www.blogjava.net/happyfish/aggbug/4862.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/happyfish/" target="_blank">小鱼儿</a> 2005-05-19 11:35 <a href="http://www.blogjava.net/happyfish/archive/2005/05/19/4862.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>上传图片并生成略缩图   </title><link>http://www.blogjava.net/happyfish/archive/2005/05/11/4162.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Wed, 11 May 2005 02:34:00 GMT</pubDate><guid>http://www.blogjava.net/happyfish/archive/2005/05/11/4162.html</guid><wfw:comment>http://www.blogjava.net/happyfish/comments/4162.html</wfw:comment><comments>http://www.blogjava.net/happyfish/archive/2005/05/11/4162.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/happyfish/comments/commentRss/4162.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/happyfish/services/trackbacks/4162.html</trackback:ping><description><![CDATA[<TABLE id=Table1 height="100%" cellSpacing=0 cellPadding=0 width="90%" align=center border=0>
<TBODY>
<TR height=20>
<TD vAlign=bottom><FONT face=宋体><B>上传图片并生成略缩图</B></FONT></TD>
<TD>
<DIV align=right>&nbsp;</DIV></TD></TR>
<TR>
<TD class=TextClass style="HEIGHT: 378px" vAlign=top colSpan=2><FONT face=宋体><FONT color=#a65353><BR>
<P>参数说明<BR>FileBox:上传表单中的表单名<BR>SavePath:保存路径<BR>ThumbnailWidth:略缩图宽<BR>ThumbnailHeight:略缩图高<BR>FilePath:文件保存路径（输出参数）<BR>FileName:文件名称（输出参数）<BR>LastError:（输出错误）<BR>public static bool UploadImages(System.Web.UI.HtmlControls.HtmlInputFile FileBox,string SavePath,Int32 ThumbnailWidth,Int32 ThumbnailHeight,out String FilePath,out String FileName,out string LastError)<BR>{<BR>DateTime datTime=System.DateTime.Now;<BR>String strTemp;<BR>string strFileName = FileBox.PostedFile.FileName;<BR>bool blnResult;<BR>LastError="";<BR>System.Drawing.Image xImage;<BR>System.Drawing.Bitmap xBitmap;<BR>int PhotoHeight,PhotoWidth;<BR>string BasePath=System.Web.HttpContext.Current.Server.MapPath("../");<BR>Rectangle NewPhoto;<BR>System.Drawing.Imaging.ImageFormat xObject;<BR>string Extension="";<BR>FileName="";<BR>FilePath="";<BR><BR>try<BR>{<BR>if(strFileName=="")<BR>{<BR>LastError="请点击浏览选择要上传的文件!";<BR>return false;<BR>}<BR>if(Convert.ToDecimal(FileBox.PostedFile.ContentLength)&lt;= 2000000 &amp;&amp;Convert.ToDecimal(FileBox.PostedFile.ContentLength)&gt;1500)<BR>{<BR>//查看扩展名是否合法<BR>Extension=Path.GetExtension(strFileName);<BR>Extension=Extension.ToLower();<BR>if(Extension==".gif" || Extension==".jpg" || Extension==".jpeg" || Extension==".bmp")<BR>{<BR>switch(Extension)<BR>{<BR>case ".gif":<BR>xObject=System.Drawing.Imaging.ImageFormat.Gif;<BR>break;<BR>case ".bmp":<BR>xObject=System.Drawing.Imaging.ImageFormat.Bmp;<BR>break;<BR>default:<BR>xObject=System.Drawing.Imaging.ImageFormat.Jpeg;<BR><BR>break;<BR>}<BR>}<BR>else<BR>{<BR>LastError="上传的文件不是有效的图片文件，请上传格式为：.gif.jpg.bmp的文件！";<BR>return false;<BR>}<BR>//-----------------------------<BR>//生成保存的文件路径及文件名<BR>//-----------------------------<BR>strTemp = datTime.ToShortDateString().Replace( "-", "");<BR>FileName = datTime.ToLongTimeString().Replace(":","")+ Extension;<BR>FilePath = SavePath + strTemp + "/";<BR>Friendlib.Function.CreateDirectory(BasePath + FilePath);<BR>//保存大图<BR>xImage=System.Drawing.Bitmap.FromStream(FileBox.PostedFile.InputStream);<BR><BR>xImage.Save(BasePath+FilePath+FileName);<BR>xImage.Dispose();<BR>//-----------------------------<BR>//开始生成缩略图<BR>//-----------------------------<BR>xBitmap=new Bitmap(BasePath+FilePath+FileName);//------------------<BR><BR>PhotoHeight=xBitmap.Height;<BR>PhotoWidth=xBitmap.Width;<BR>// //判断图片的形状 <BR>if(Convert.ToDecimal(PhotoHeight)/Convert.ToDecimal(PhotoWidth)&gt;Convert.ToDecimal(ThumbnailHeight)/Convert.ToDecimal(ThumbnailWidth))//高有余 <BR>{ <BR>PhotoHeight=Convert.ToInt16((Convert.ToDecimal(ThumbnailHeight)/Convert.ToDecimal(ThumbnailWidth))*Convert.ToDecimal(PhotoWidth)); <BR>NewPhoto=new Rectangle(0,0,PhotoWidth,PhotoHeight); <BR>} <BR>else if(Convert.ToDecimal(PhotoHeight)/Convert.ToDecimal(PhotoWidth)&lt;Convert.ToDecimal(ThumbnailHeight)/Convert.ToDecimal(ThumbnailWidth)) <BR>{ <BR>PhotoWidth=Convert.ToInt16((Convert.ToDecimal(ThumbnailWidth)/Convert.ToDecimal(ThumbnailHeight))*Convert.ToDecimal(PhotoHeight)); <BR>NewPhoto=new <BR>Rectangle(Convert.ToInt16((Convert.ToDecimal(xBitmap.Width)-Convert.ToDecimal(PhotoWidth))/2),0,PhotoWidth,PhotoHeight); <BR>} <BR>else <BR>{ <BR>NewPhoto= newRectangle(0,0,PhotoWidth,PhotoHeight); &lt; BR&gt; } <BR>System.Drawing.Image myBitmap; <BR>myBitmap=xBitmap.Clone(NewPhoto,System.Drawing.Imaging.PixelFormat.DontCare); <BR>System.Drawing.Image.GetThumbnailImageAbort myCallback = new <BR>System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback); <BR>System.Drawing.Image myThumbnail = <BR>myBitmap.GetThumbnailImage(ThumbnailWidth,ThumbnailHeight, myCallback, <BR>IntPtr.Zero); myThumbnail.Save(BasePath + FilePath +"s"+FileName,xObject); <BR>myThumbnail.Dispose(); myBitmap.Dispose(); xBitmap.Dispose(); return true; } <BR>else <BR>{ <BR>blnResult=false; LastError="不能上传大于2M及小于1.5K的图片!"; <BR>} <BR>}&lt; BR&gt; catch (Exception ex) { <BR>throw new System.Exception((ex.Message + ("\r\n" + ex.StackTrace))); <BR>} <BR>return blnResult;<BR>}<BR>private static bool ThumbnailCallback() { return false; }<BR></P></FONT></FONT></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/happyfish/aggbug/4162.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/happyfish/" target="_blank">小鱼儿</a> 2005-05-11 10:34 <a href="http://www.blogjava.net/happyfish/archive/2005/05/11/4162.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows API函数大全</title><link>http://www.blogjava.net/happyfish/archive/2005/05/10/4139.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Tue, 10 May 2005 05:22:00 GMT</pubDate><guid>http://www.blogjava.net/happyfish/archive/2005/05/10/4139.html</guid><wfw:comment>http://www.blogjava.net/happyfish/comments/4139.html</wfw:comment><comments>http://www.blogjava.net/happyfish/archive/2005/05/10/4139.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/happyfish/comments/commentRss/4139.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/happyfish/services/trackbacks/4139.html</trackback:ping><description><![CDATA[Windows API函数大全<BR>
<P><BR>1. API之网络函数 <BR>WNetAddConnection 创建同一个网络资源的永久性连接 <BR>WNetAddConnection2 创建同一个网络资源的连接 <BR>WNetAddConnection3 创建同一个网络资源的连接 <BR>WNetCancelConnection 结束一个网络连接 <BR>WNetCancelConnection2 结束一个网络连接 <BR>WNetCloseEnum 结束一次枚举操作 <BR>WNetConnectionDialog 启动一个标准对话框，以便建立同网络资源的连接 <BR>WNetDisconnectDialog 启动一个标准对话框，以便断开同网络资源的连接 <BR>WNetEnumResource 枚举网络资源 <BR>WNetGetConnection 获取本地或已连接的一个资源的网络名称 <BR>WNetGetLastError 获取网络错误的扩展错误信息 <BR>WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC（统一命名规范）名称 <BR>WNetGetUser 获取一个网络资源用以连接的名字 <BR>WNetOpenEnum 启动对网络资源进行枚举的过程 <BR><BR>2. API之消息函数 <BR>BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口 <BR>GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置 <BR>GetMessageTime 取得消息队列中上一条消息处理完毕时的时间 <BR>PostMessage 将一条消息投递到指定窗口的消息队列 <BR>PostThreadMessage 将一条消息投递给应用程序 <BR>RegisterWindowMessage 获取分配给一个字串标识符的消息编号 <BR>ReplyMessage 答复一个消息 <BR>SendMessage 调用一个窗口的窗口函数，将一条消息发给那个窗口 <BR>SendMessageCallback 将一条消息发给窗口 <BR>SendMessageTimeout 向窗口发送一条消息 <BR>SendNotifyMessage 向窗口发送一条消息 <BR>3. API之文件处理函数 <BR>CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等 <BR>CompareFileTime 对比两个文件的时间 <BR>CopyFile 复制文件 <BR>CreateDirectory 创建一个新目录 <BR>CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及控制台 <BR>CreateFileMapping 创建一个新的文件映射对象 <BR>DeleteFile 删除指定文件 <BR>DeviceIoControl 对设备执行指定的操作 <BR>DosDateTimeToFileTime 将DOS日期和时间值转换成一个 win32 FILETIME 值 <BR>FileTimeToDosDateTime 将一个 win32 FILETIME 值转换成DOS日期和时间值 <BR>FileTimeToLocalFileTime 将一个FILETIME结构转换成本地时间 <BR>FileTimeToSystemTime 根据一个FILETIME结构的内容，装载一个SYSTEMTIME结构 <BR>FindClose 关闭由FindFirstFile函数创建的一个搜索句柄 <BR>FindFirstFile 根据文件名查找文件 <BR>FindNextFile 根据调用FindFirstFile函数时指定的一个文件名查找下一个文件 <BR>FlushFileBuffers 针对指定的文件句柄，刷新内部文件缓冲区 <BR>FlushViewOfFile 将写入文件映射缓冲区的所有数据都刷新到磁盘 <BR>GetBinaryType 判断文件是否可以执行 <BR>GetCompressedFileSize 判断一个压缩文件在磁盘上实际占据的字节数 <BR>GetCurrentDirectory 在一个缓冲区中装载当前目录 <BR>GetDiskFreeSpace 获取与一个磁盘的组织有关的信息，以及了解剩余空间的容量 <BR>GetDiskFreeSpaceEx 获取与一个磁盘的组织以及剩余空间容量有关的信息 <BR>GetDriveType 判断一个磁盘驱动器的类型 <BR>GetExpandedName 取得一个压缩文件的全名 <BR>GetFileAttributes 判断指定文件的属性 <BR>GetFileInformationByHandle 这个函数提供了获取文件信息的一种机制 <BR>GetFileSize 判断文件长度 <BR>GetFileTime 取得指定文件的时间信息 <BR>GetFileType 在给出文件句柄的前提下，判断文件类型 <BR>GetFileVersionInfo 从支持版本标记的一个模块里获取文件版本信息 <BR>GetFileVersionInfoSize 针对包含了版本资源的一个文件，判断容纳文件版本信息需要一个多大的缓冲区 <BR>GetFullPathName 获取指定文件的完整路径名 <BR>GetLogicalDrives 判断系统中存在哪些逻辑驱动器字母 <BR>GetLogicalDriveStrings 获取一个字串，其中包含了当前所有逻辑驱动器的根驱动器路径 <BR>GetOverlappedResult 判断一个重叠操作当前的状态 <BR>GetPrivateProfileInt 为初始化文件（.ini文件）中指定的条目获取一个整数值 <BR>GetPrivateProfileSection 获取指定小节（在.ini文件中）所有项名和值的一个列表 <BR>GetPrivateProfileString 为初始化文件中指定的条目取得字串 <BR>GetProfileInt 取得win.ini初始化文件中指定条目的一个整数值 <BR>GetProfileSection 获取指定小节（在win.ini文件中）所有项名和值的一个列表 <BR>GetProfileString 为win.ini初始化文件中指定的条目取得字串 <BR>GetShortPathName 获取指定文件的短路径名 <BR>GetSystemDirectory 取得Windows系统目录（即System目录）的完整路径名 <BR>GetTempFileName 这个函数包含了一个临时文件的名字，它可由应用程序使用 <BR>GetTempPath 获取为临时文件指定的路径 <BR>GetVolumeInformation 获取与一个磁盘卷有关的信息 <BR>GetWindowsDirectory 获取Windows目录的完整路径名 <BR>hread 参考lread <BR>hwrite 参考lwrite函数 <BR>lclose 关闭指定的文件 <BR>lcreat 创建一个文件 <BR>llseek 设置文件中进行读写的当前位置 <BR>LockFile 锁定文件的某一部分，使其不与其他应用程序共享 <BR>LockFileEx 与LockFile相似，只是它提供了更多的功能 <BR>lopen 以二进制模式打开指定的文件 <BR>lread 将文件中的数据读入内存缓冲区 <BR>lwrite 将数据从内存缓冲区写入一个文件 <BR>LZClose 关闭由LZOpenFile 或 LZInit函数打开的一个文件 <BR>LZCopy 复制一个文件 <BR>LZInit 这个函数用于初始化内部缓冲区 <BR>LZOpenFile 该函数能执行大量不同的文件处理，而且兼容于压缩文件 <BR>LZRead 将数据从文件读入内存缓冲区 <BR>LZSeek 设置一个文件中进行读写的当前位置 <BR>MapViewOfFile 将一个文件映射对象映射到当前应用程序的地址空间 <BR>MoveFile 移动文件 <BR>OpenFile 这个函数能执行大量不同的文件操作 <BR>OpenFileMapping 打开一个现成的文件映射对象 <BR>QueryDosDevice 在Windows NT中，DOS设备名会映射成NT系统设备名。该函数可判断当前的设备映射情况 <BR>ReadFile 从文件中读出数据 <BR>ReadFileEx 与ReadFile相似，只是它只能用于异步读操作，并包含了一个完整的回调 <BR>RegCloseKey 关闭系统注册表中的一个项（或键） <BR>RegConnectRegistry 访问远程系统的部分注册表 <BR>RegCreateKey 在指定的项下创建或打开一个项 <BR>RegCreateKeyEx 在指定项下创建新项的更复杂的方式。在Win32环境中建议使用这个函数 <BR>RegDeleteKey 删除现有项下方一个指定的子项 <BR>RegDeleteValue 删除指定项下方的一个值 <BR>RegEnumKey 枚举指定项的子项。在Win32环境中应使用RegEnumKeyEx <BR>RegEnumKeyEx 枚举指定项下方的子项 <BR>RegEnumValue 枚举指定项的值 <BR>RegFlushKey 将对项和它的子项作出的改动实际写入磁盘 <BR>RegGetKeySecurity 获取与一个注册表项有关的安全信息 <BR>RegLoadKey 从以前用RegSaveKey函数创建的一个文件里装载注册表信息 <BR>RegNotifyChangeKeyValue 注册表项或它的任何一个子项发生变化时，用这个函数提供一种通知机制 <BR>RegOpenKey 打开一个现有的注册表项 <BR>RegOpenKeyEx 打开一个现有的项。在win32下推荐使用这个函数 <BR>RegQueryInfoKey 获取与一个项有关的信息 <BR>RegQueryValue 取得指定项或子项的默认（未命名）值 <BR>RegQueryValueEx 获取一个项的设置值 <BR>RegReplaceKey 用一个磁盘文件保存的信息替换注册表信息；并创建一个备份，在其中包含当前注册表信息 <BR>RegRestoreKey 从一个磁盘文件恢复注册表信息 <BR>RegSaveKey 将一个项以及它的所有子项都保存到一个磁盘文件 <BR>RegSetKeySecurity 设置指定项的安全特性 <BR>RegSetValue 设置指定项或子项的默认值 <BR>RegSetValueEx 设置指定项的值 <BR>RegUnLoadKey 卸载指定的项以及它的所有子项 <BR>RemoveDirectory 删除指定目录 <BR>SearchPath 查找指定文件 <BR>SetCurrentDirectory 设置当前目录 <BR>SetEndOfFile 针对一个打开的文件，将当前文件位置设为文件末尾 <BR>SetFileAttributes 设置文件属性 <BR>SetFilePointer 在一个文件中设置当前的读写位置 <BR>SetFileTime 设置文件的创建、访问及上次修改时间 <BR>SetHandleCount 这个函数不必在win32下使用；即使使用，也不会有任何效果 <BR>SetVolumeLabel 设置一个磁盘的卷标（Label） <BR>SystemTimeToFileTime 根据一个FILETIME结构的内容，载入一个SYSTEMTIME结构 <BR>UnlockFile 解除对一个文件的锁定 <BR>UnlockFileEx 解除对一个文件的锁定 <BR>UnmapViewOfFile 在当前应用程序的内存地址空间解除对一个文件映射对象的映射 <BR>VerFindFile 用这个函数决定一个文件应安装到哪里 <BR>VerInstallFile 用这个函数安装一个文件 <BR>VerLanguageName 这个函数能根据16位语言代码获取一种语言的名称 <BR>VerQueryValue 这个函数用于从版本资源中获取信息 <BR>WriteFile 将数据写入一个文件 <BR>WriteFileEx 与WriteFile类似，只是它只能用于异步写操作，并包括了一个完整的回调 <BR>WritePrivateProfileSection 为一个初始化文件（.ini）中指定的小节设置所有项名和值 <BR>WritePrivateProfileString 在初始化文件指定小节内设置一个字串 <BR>WriteProfileSection 为Win.ini初始化文件中一个指定的小节设置所有项名和值 <BR>WriteProfileString 在Win.ini初始化文件指定小节内设置一个字串 <BR>4. API之打印函数 <BR>AbortDoc 取消一份文档的打印 <BR>AbortPrinter 删除与一台打印机关联在一起的缓冲文件 <BR>AddForm 为打印机的表单列表添加一个新表单 <BR>AddJob 用于获取一个有效的路径名，以便用它为作业创建一个后台打印文件。它也会为作业分配一个作业编号 <BR>AddMonitor 为系统添加一个打印机监视器 <BR>AddPort 启动"添加端口"对话框，允许用户在系统可用端口列表中加入一个新端口 <BR>AddPrinter 在系统中添加一台新打印机 <BR>AddPrinterConnection 连接指定的打印机 <BR>AddPrinterDriver 为指定的系统添加一个打印驱动程序 <BR>AddPrintProcessor 为指定的系统添加一个打印处理器 <BR>AddPrintProvidor 为系统添加一个打印供应商 <BR>AdvancedDocumentProperties 启动打印机文档设置对话框 <BR>ClosePrinter 关闭一个打开的打印机对象 <BR>ConfigurePort 针对指定的端口，启动一个端口配置对话框 <BR>ConnectToPrinterDlg 启动连接打印机对话框，用它同访问网络的打印机连接 <BR>DeleteForm 从打印机可用表单列表中删除一个表单 <BR>DeleteMonitor 删除指定的打印监视器 <BR>DeletePort 启动"删除端口"对话框，允许用户从当前系统删除一个端口 <BR>DeletePrinter 将指定的打印机标志为从系统中删除 <BR>DeletePrinterConnection 删除与指定打印机的连接 <BR>DeletePrinterDriver 从系统删除一个打印机驱动程序 <BR>DeletePrintProcessor 从指定系统删除一个打印处理器 <BR>DeletePrintProvidor 从系统中删除一个打印供应商 <BR>DeviceCapabilities 利用这个函数可获得与一个设备的能力有关的信息 <BR>DocumentProperties 打印机配置控制函数 <BR>EndDocAPI 结束一个成功的打印作业 <BR>EndDocPrinter 在后台打印程序的级别指定一个文档的结束 <BR>EndPage 用这个函数完成一个页面的打印，并准备设备场景，以便打印下一个页 <BR>EndPagePrinter 指定一个页在打印作业中的结尾 <BR>EnumForms 枚举一台打印机可用的表单 <BR>EnumJobs 枚举打印队列中的作业 <BR>EnumMonitors 枚举可用的打印监视器 <BR>EnumPorts 枚举一个系统可用的端口 <BR>EnumPrinterDrivers 枚举指定系统中已安装的打印机驱动程序 <BR>EnumPrinters 枚举系统中安装的打印机 <BR>EnumPrintProcessorDatatypes 枚举由一个打印处理器支持的数据类型 <BR>EnumPrintProcessors 枚举系统中可用的打印处理器 <BR>Escape 设备控制函数 <BR>FindClosePrinterChangeNotification 关闭用FindFirstPrinterChangeNotification函数获取的一个打印机通告对象 <BR>FindFirstPrinterChangeNotification 创建一个新的改变通告对象，以便我们注意打印机状态的各种变化 <BR>FindNextPrinterChangeNotification 用这个函数判断触发一次打印机改变通告信号的原因 <BR>FreePrinterNotifyInfo 释放由FindNextPrinterChangeNotification函数分配的一个缓冲区 <BR>GetForm 取得与指定表单有关的信息 <BR>GetJob 获取与指定作业有关的信息 <BR>GetPrinter 取得与指定打印机有关的信息 <BR>GetPrinterData 为打印机设置注册表配置信息 <BR>GetPrinterDriver 针对指定的打印机，获取与打印机驱动程序有关的信息 <BR>GetPrinterDriverDirectory 判断指定系统中包含了打印机驱动程序的目录是什么 <BR>GetPrintProcessorDirectory 判断指定系统中包含了打印机处理器驱动程序及文件的目录 <BR>OpenPrinter 打开指定的打印机，并获取打印机的句柄 <BR>PrinterMessageBox 在拥有指定打印作业的系统上显示一个打印机出错消息框 <BR>PrinterProperties 启动打印机属性对话框，以便对打印机进行配置 <BR>ReadPrinter 从打印机读入数据 <BR>ResetDC 重设一个设备场景 <BR>ResetPrinter 改变指定打印机的默认数据类型及文档设置 <BR>ScheduleJob 提交一个要打印的作业 <BR>SetAbortProc 为Windows指定取消函数的地址 <BR>SetForm 为指定的表单设置信息 <BR>SetJob 对一个打印作业的状态进行控制 <BR>SetPrinter 对一台打印机的状态进行控制 <BR>SetPrinterData 设置打印机的注册表配置信息 <BR>StartDoc 开始一个打印作业 <BR>StartDocPrinter 在后台打印的级别启动一个新文档 <BR>StartPage 打印一个新页前要先调用这个函数 <BR>StartPagePrinter 在打印作业中指定一个新页的开始 <BR>WritePrinter 将发送目录中的数据写入打印机 <BR>5. API之文本和字体函数 <BR>AddFontResource 在Windows系统中添加一种字体资源 <BR>CreateFont 用指定的属性创建一种逻辑字体 <BR>CreateFontIndirect 用指定的属性创建一种逻辑字体 <BR>CreateScalableFontResource 为一种TureType字体创建一个资源文件，以便能用API函数AddFontResource将其加入Windows系统 <BR>DrawText 将文本描绘到指定的矩形中 <BR>DrawTextEx 与DrawText相似，只是加入了更多的功能 <BR>EnumFontFamilies 列举指定设备可用的字体 <BR>EnumFontFamiliesEx 列举指定设备可用的字体 <BR>EnumFonts 列举指定设备可用的字体 <BR>ExtTextOut 经过扩展的文本描绘函数。也请参考SetTextAlign函数 <BR>GetAspectRatioFilterEx 用SetMapperFlags要求Windows只选择与设备当前纵横比相符的光栅字体时，本函数可判断纵横比大小 <BR>GetCharABCWidths 判断TureType字体中一个或多个字符的A-B-C大小 <BR>GetCharABCWidthsFloat 查询一种字体中一个或多个字符的A-B-C尺寸 <BR>GetCharacterPlacement 该函数用于了解如何用一个给定的字符显示一个字串 <BR>GetCharWidth 调查字体中一个或多个字符的宽度 <BR>GetFontData 接收一种可缩放字体文件的数据 <BR>GetFontLanguageInfo 返回目前选入指定设备场景中的字体的信息 <BR>GetGlyphOutline 取得TureType字体中构成一个字符的曲线信息 <BR>GetKerningPairs 取得指定字体的字距信息 <BR>GetOutlineTextMetrics 接收与TureType字体内部特征有关的详细信息 <BR>GetRasterizerCaps 了解系统是否有能力支持可缩放的字体 <BR>GetTabbedTextExtent 判断一个字串占据的范围，同时考虑制表站扩充的因素 <BR>GetTextAlign 接收一个设备场景当前的文本对齐标志 <BR>GetTextCharacterExtra 判断额外字符间距的当前值 <BR>GetTextCharset 接收当前选入指定设备场景的字体的字符集标识符 <BR>GetTextCharsetInfo 获取与当前选定字体的字符集有关的详细信息 <BR>GetTextColor 判断当前字体颜色。通常也称为"前景色" <BR>GetTextExtentExPoint 判断要填入指定区域的字符数量。也用一个数组装载每个字符的范围信息 <BR>GetTextExtentPoint 判断一个字串的大小（范围） <BR>GetTextFace 获取一种字体的字样名 <BR>GetTextMetrics 获取与选入一种设备场景的物理字体有关的信息 <BR>GrayString 描绘一个以灰色显示的字串。通常由Windows用于标识禁止状态 <BR>PolyTextOut 描绘一系列字串 <BR>RemoveFontResource 从Windows系统中删除一种字体资源 <BR>SetMapperFlags Windows对字体进行映射时，可用该函数选择与目标设备的纵横比相符的光栅字体 <BR>SetTextAlign 设置文本对齐方式，并指定在文本输出过程中使用设备场景的当前位置 <BR>SetTextCharacterExtra 描绘文本的时候，指定要在字符间插入的额外间距 <BR>SetTextColor 设置当前文本颜色。这种颜色也称为"前景色" <BR>SetTextJustification 通过指定一个文本行应占据的额外空间，可用这个函数对文本进行两端对齐处理 <BR>TabbedTextOut 支持制表站的一个文本描绘函数 <BR>TextOut 文本绘图函数 <BR>6. API之菜单函数 <BR>AppendMenu 在指定的菜单里添加一个菜单项 <BR>CheckMenuItem 复选或撤消复选指定的菜单条目 <BR>CheckMenuRadioItem 指定一个菜单条目被复选成"单选"项目 <BR>CreateMenu 创建新菜单 <BR>CreatePopupMenu 创建一个空的弹出式菜单 <BR>DeleteMenu 删除指定的菜单条目 <BR>DestroyMenu 删除指定的菜单 <BR>DrawMenuBar 为指定的窗口重画菜单 <BR>EnableMenuItem 允许或禁止指定的菜单条目 <BR>GetMenu 取得窗口中一个菜单的句柄 <BR>GetMenuCheckMarkDimensions 返回一个菜单复选符的大小 <BR>GetMenuContextHelpId 取得一个菜单的帮助场景ID <BR>GetMenuDefaultItem 判断菜单中的哪个条目是默认条目 <BR>GetMenuItemCount 返回菜单中条目（菜单项）的数量 <BR>GetMenuItemID 返回位于菜单中指定位置处的条目的菜单ID <BR>GetMenuItemInfo 取得（接收）与一个菜单条目有关的特定信息 <BR>GetMenuItemRect 在一个矩形中装载指定菜单条目的屏幕坐标信息 <BR>GetMenuState 取得与指定菜单条目状态有关的信息 <BR>GetMenuString 取得指定菜单条目的字串 <BR>GetSubMenu 取得一个弹出式菜单的句柄，它位于菜单中指定的位置 <BR>GetSystemMenu 取得指定窗口的系统菜单的句柄 <BR>HiliteMenuItem 控制顶级菜单条目的加亮显示状态 <BR>InsertMenu 在菜单的指定位置处插入一个菜单条目，并根据需要将其他条目向下移动 <BR>InsertMenuItem 插入一个新菜单条目 <BR>IsMenu 判断指定的句柄是否为一个菜单的句柄 <BR>LoadMenu 从指定的模块或应用程序实例中载入一个菜单 <BR>LoadMenuIndirect 载入一个菜单 <BR>MenuItemFromPoint 判断哪个菜单条目包含了屏幕上一个指定的点 <BR>ModifyMenu 改变菜单条目 <BR>RemoveMenu 删除指定的菜单条目 <BR>SetMenu 设置窗口菜单 <BR>SetMenuContextHelpId 设置一个菜单的帮助场景ID <BR>SetMenuDefaultItem 将一个菜单条目设为默认条目 <BR>SetMenuItemBitmaps 设置一幅特定位图，令其在指定的菜单条目中使用，代替标准的复选符号（√） <BR>SetMenuItemInfo 为一个菜单条目设置指定的信息 <BR>TrackPopupMenu 在屏幕的任意地方显示一个弹出式菜单 <BR>TrackPopupMenuEx 与TrackPopupMenu相似，只是它提供了额外的功能 <BR>7. API之位图、图标和光栅运算函数 <BR>BitBlt 将一幅位图从一个设备场景复制到另一个 <BR>CopyIcon 制作指定图标或鼠标指针的一个副本。这个副本从属于发出调用的应用程序 <BR>CopyImage 复制位图、图标或指针，同时在复制过程中进行一些转换工作 <BR>CreateBitmap 按照规定的格式创建一幅与设备有关位图 <BR>CreateBitmapIndirect 创建一幅与设备有关位图 <BR>CreateCompatibleBitmap 创建一幅与设备有关位图，它与指定的设备场景兼容 <BR>CreateCursor 创建一个鼠标指针 <BR>CreateDIBitmap 根据一幅与设备无关的位图创建一幅与设备有关的位图 <BR>CreateDIBSection 创建一个DIBSection <BR>CreateIcon 创建一个图标 <BR>CreateIconIndirect 创建一个图标 <BR>DestroyCursor 清除指定的鼠标指针，并释放它占用的所有系统资源 <BR>DestroyIcon 清除图标 <BR>DrawIcon 在指定的位置画一个图标 <BR>DrawIconEx 描绘一个图标或鼠标指针。与DrawIcon相比，这个函数提供了更多的功能 <BR>ExtractAssociatedIcon 判断一个可执行程序或DLL中是否存在图标，或是否有图标与系统注册表中指定的文件存在关联并提取之 <BR>ExtractIcon 判断一个可执行文件或DLL中是否有图标存在，并将其提取出来 <BR>GetBitmapBits 将来自位图的二进制位复制到一个缓冲区 <BR>GetBitmapDimensionEx 取得一幅位图的宽度和高度 <BR>GetDIBColorTable 从选入设备场景的DIBSection中取得颜色表信息 <BR>GetDIBits 将来自一幅位图的二进制位复制到一幅与设备无关的位图里 <BR>GetIconInfo 取得与图标有关的信息 <BR>GetStretchBltMode 判断StretchBlt 和 StretchDIBits函数采用的伸缩模式 <BR>LoadBitmap 从指定的模块或应用程序实例中载入一幅位图 <BR>LoadCursor 从指定的模块或应用程序实例中载入一个鼠标指针 <BR>LoadCursorFromFile 在一个指针文件或一个动画指针文件的基础上创建一个指针 <BR>LoadIcon 从指定的模块或应用程序实例中载入一个图标 <BR>LoadImage 载入一个位图、图标或指针 <BR>MaskBlt 执行复杂的图象传输，同时进行掩模（MASK）处理 <BR>PatBlt 在当前选定的刷子的基础上，用一个图案填充指定的设备场景 <BR>PlgBlt 复制一幅位图，同时将其转换成一个平行四边形。利用它可对位图进行旋转处理 <BR>SetBitmapBits 将来自缓冲区的二进制位复制到一幅位图 <BR>SetBitmapDimensionEx 设置一幅位图的宽度。以一毫米的十分之一为单位 <BR>SetDIBColorTable 设置选入设备场景的一个DIBSection的颜色表信息 <BR>SetDIBits 将来自与设备无关位图的二进制位复制到一幅与设备有关的位图里 <BR>SetDIBitsToDevice 将一幅与设备无关位图的全部或部分数据直接复制到一个设备 <BR>SetStretchBltMode 指定StretchBlt 和 StretchDIBits函数的伸缩模式 <BR>StretchBlt 将一幅位图从一个设备场景复制到另一个 <BR>StretchDIBits 将一幅与设备无关位图的全部或部分数据直接复制到指定的设备场景 <BR>8. API之绘图函数 <BR>AbortPath 抛弃选入指定设备场景中的所有路径。也取消目前正在进行的任何路径的创建工作 <BR>AngleArc 用一个连接弧画一条线 <BR>Arc 画一个圆弧 <BR>BeginPath 启动一个路径分支 <BR>CancelDC 取消另一个线程里的长时间绘图操作 <BR>Chord 画一个弦 <BR>CloseEnhMetaFile 关闭指定的增强型图元文件设备场景，并将新建的图元文件返回一个句柄 <BR>CloseFigure 描绘到一个路径时，关闭当前打开的图形 <BR>CloseMetaFile 关闭指定的图元文件设备场景，并向新建的图元文件返回一个句柄 <BR>CopyEnhMetaFile 制作指定增强型图元文件的一个副本（拷贝） <BR>CopyMetaFile 制作指定（标准）图元文件的一个副本 <BR>CreateBrushIndirect 在一个LOGBRUSH数据结构的基础上创建一个刷子 <BR>CreateDIBPatternBrush 用一幅与设备无关的位图创建一个刷子，以便指定刷子样式（图案） <BR>CreateEnhMetaFile 创建一个增强型的图元文件设备场景 <BR>CreateHatchBrush 创建带有阴影图案的一个刷子 <BR>CreateMetaFile 创建一个图元文件设备场景 <BR>CreatePatternBrush 用指定了刷子图案的一幅位图创建一个刷子 <BR>CreatePen 用指定的样式、宽度和颜色创建一个画笔 <BR>CreatePenIndirect 根据指定的LOGPEN结构创建一个画笔 <BR>CreateSolidBrush 用纯色创建一个刷子 <BR>DeleteEnhMetaFile 删除指定的增强型图元文件 <BR>DeleteMetaFile 删除指定的图元文件 <BR>DeleteObject 删除GDI对象，对象使用的所有系统资源都会被释放 <BR>DrawEdge 用指定的样式描绘一个矩形的边框 <BR>DrawEscape 换码（Escape）函数将数据直接发至显示设备驱动程序 <BR>DrawFocusRect 画一个焦点矩形 <BR>DrawFrameControl 描绘一个标准控件 <BR>DrawState 为一幅图象或绘图操作应用各式各样的效果 <BR>Ellipse 描绘一个椭圆，由指定的矩形围绕 <BR>EndPath 停止定义一个路径 <BR>EnumEnhMetaFile 针对一个增强型图元文件，列举其中单独的图元文件记录 <BR>EnumMetaFile 为一个标准的windows图元文件枚举单独的图元文件记录 <BR>EnumObjects 枚举可随同指定设备场景使用的画笔和刷子 <BR>ExtCreatePen 创建一个扩展画笔（装饰或几何） <BR>ExtFloodFill 在指定的设备场景里，用当前选择的刷子填充一个区域 <BR>FillPath 关闭路径中任何打开的图形，并用当前刷子填充 <BR>FillRect 用指定的刷子填充一个矩形 <BR>FlattenPath 将一个路径中的所有曲线都转换成线段 <BR>FloodFill 用当前选定的刷子在指定的设备场景中填充一个区域 <BR>FrameRect 用指定的刷子围绕一个矩形画一个边框 <BR>GdiComment 为指定的增强型图元文件设备场景添加一条注释信息 <BR>GdiFlush 执行任何未决的绘图操作 <BR>GdiGetBatchLimit 判断有多少个GDI绘图命令位于队列中 <BR>GdiSetBatchLimit 指定有多少个GDI绘图命令能够进入队列 <BR>GetArcDirection 画圆弧的时候，判断当前采用的绘图方向 <BR>GetBkColor 取得指定设备场景当前的背景颜色 <BR>GetBkMode 针对指定的设备场景，取得当前的背景填充模式 <BR>GetBrushOrgEx 判断指定设备场景中当前选定刷子起点 <BR>GetCurrentObject 获得指定类型的当前选定对象 <BR>GetCurrentPositionEx 在指定的设备场景中取得当前的画笔位置 <BR>GetEnhMetaFile 取得磁盘文件中包含的一个增强型图元文件的图元文件句柄 <BR>GetEnhMetaFileBits 将指定的增强型图元文件复制到一个内存缓冲区里 <BR>GetEnhMetaFileDescription 返回对一个增强型图元文件的说明 <BR>GetEnhMetaFileHeader 取得增强型图元文件的图元文件头 <BR>GetEnhMetaFilePaletteEntries 取得增强型图元文件的全部或部分调色板 <BR>GetMetaFile 取得包含在一个磁盘文件中的图元文件的图元文件句柄 <BR>GetMetaFileBitsEx 将指定的图元文件复制到一个内存缓冲区 <BR>GetMiterLimit 取得设备场景的斜率限制（Miter）设置 <BR>GetNearestColor 根据设备的显示能力，取得与指定颜色最接近的一种纯色 <BR>GetObjectAPI 取得对指定对象进行说明的一个结构 <BR>GetObjectType 判断由指定句柄引用的GDI对象的类型 <BR>GetPath 取得对当前路径进行定义的一系列数据 <BR>GetPixel 在指定的设备场景中取得一个像素的RGB值 <BR>GetPolyFillMode 针对指定的设备场景，获得多边形填充模式 <BR>GetROP2 针对指定的设备场景，取得当前的绘图模式 <BR>GetStockObject 取得一个固有对象（Stock） <BR>GetSysColorBrush 为任何一种标准系统颜色取得一个刷子 <BR>GetWinMetaFileBits 通过在一个缓冲区中填充用于标准图元文件的数据，将一个增强型图元文件转换成标准windows图元文件 <BR>InvertRect 通过反转每个像素的值，从而反转一个设备场景中指定的矩形 <BR>LineDDA 枚举指定线段中的所有点 <BR>LineTo 用当前画笔画一条线，从当前位置连到一个指定的点 <BR>MoveToEx 为指定的设备场景指定一个新的当前画笔位置 <BR>PaintDesk 在指定的设备场景中描绘桌面墙纸图案 <BR>PathToRegion 将当前选定的路径转换到一个区域里 <BR>Pie 画一个饼图 <BR>PlayEnhMetaFile 在指定的设备场景中画一个增强型图元文件 <BR>PlayEnhMetaFileRecord 回放单独一条增强型图元文件记录 <BR>PlayMetaFile 在指定的设备场景中回放一个图元文件 <BR>PlayMetaFileRecord 回放来自图元文件的单条记录 <BR>PolyBezier 描绘一条或多条贝塞尔（Bezier）曲线 <BR>PolyDraw 描绘一条复杂的曲线，由线段及贝塞尔曲线组成 <BR>Polygon 描绘一个多边形 <BR>Polyline 用当前画笔描绘一系列线段 <BR>PolyPolygon 用当前选定画笔描绘两个或多个多边形 <BR>PolyPolyline 用当前选定画笔描绘两个或多个多边形 <BR>Rectangle 用当前选定的画笔描绘矩形，并用当前选定的刷子填充 <BR>RoundRect 用当前选定的画笔画一个圆角矩形，并用当前选定的刷子在其中填充 <BR>SelectClipPath 将设备场景当前的路径合并到剪切区域里 <BR>SelectObject 为当前设备场景选择图形对象 <BR>SetArcDirection 设置圆弧的描绘方向 <BR>SetBkColor 为指定的设备场景设置背景颜色 <BR>SetBkMode 指定阴影刷子、虚线画笔以及字符中的空隙的填充方式 <BR>SetBrushOrgEx 为指定的设备场景设置当前选定刷子的起点 <BR>SetEnhMetaFileBits 用指定内存缓冲区内包含的数据创建一个增强型图元文件 <BR>SetMetaFileBitsEx 用包含在指定内存缓冲区内的数据结构创建一个图元文件 <BR>SetMiterLimit 设置设备场景当前的斜率限制 <BR>SetPixel 在指定的设备场景中设置一个像素的RGB值 <BR>SetPixelV 在指定的设备场景中设置一个像素的RGB值 <BR>SetPolyFillMode 设置多边形的填充模式 <BR>SetROP2 设置指定设备场景的绘图模式。与vb的DrawMode属性完全一致 <BR>SetWinMetaFileBits 将一个标准Windows图元文件转换成增强型图元文件 <BR>StrokeAndFillPath 针对指定的设备场景，关闭路径上打开的所有区域 <BR>StrokePath 用当前画笔描绘一个路径的轮廓。打开的图形不会被这个函数关闭 <BR>UnrealizeObject 将一个刷子对象选入设备场景之前，如刷子的起点准备用SetBrushOrgEx修改，则必须先调用本函数 <BR>WidenPath 根据选定画笔的宽度，重新定义当前选定的路径 <BR>9. API之设备场景函数 <BR>CombineRgn 将两个区域组合为一个新区域 <BR>CombineTransform 驱动世界转换。它相当于依顺序进行两次转换 <BR>CreateCompatibleDC 创建一个与特定设备场景一致的内存设备场景 <BR>CreateDC 为专门设备创建设备场景 <BR>CreateEllipticRgn 创建一个椭圆 <BR>CreateEllipticRgnIndirect 创建一个内切于特定矩形的椭圆区域 <BR>CreateIC 为专用设备创建一个信息场景 <BR>CreatePolygonRgn 创建一个由一系列点围成的区域 <BR>CreatePolyPolygonRgn 创建由多个多边形构成的区域。每个多边形都应是封闭的 <BR>CreateRectRgn 创建一个矩形区域 <BR>CreateRectRgnIndirect 创建一个矩形区域 <BR>CreateRoundRectRgn 创建一个圆角矩形 <BR>DeleteDC 删除专用设备场景或信息场景，释放所有相关窗口资源 <BR>DPtoLP 将点阵从设备坐标转换到专用设备场景逻辑坐标 <BR>EqualRgn 确定两个区域是否相等 <BR>ExcludeClipRect 从专用设备场景的剪裁区中去掉一个矩形区。矩形内不能进行绘图 <BR>ExcludeUpdateRgn 从专用设备场景剪裁区去掉指定窗口的刷新区域 <BR>ExtCreateRegion 根据世界转换修改区域 <BR>ExtSelectClipRgn 将指定区域组合到设备场景的当前剪裁区 <BR>FillRgn 用指定刷子填充指定区域 <BR>FrameRgn 用指定刷子围绕指定区域画一个外框 <BR>GetBoundsRect 获取指定设备场景的边界矩形 <BR>GetClipBox 获取完全包含指定设备场景剪裁区的最小矩形 <BR>GetClipRgn 获取设备场景当前剪裁区 <BR>GetDC 获取指定窗口的设备场景 <BR>GetDCEx 为指定窗口获取设备场景。相比GetDC，本函数提供了更多的选项 <BR>GetDCOrgEx 获取指定设备场景起点位置（以屏幕坐标表示） <BR>GetDeviceCaps 根据指定设备场景代表的设备的功能返回信息 <BR>GetGraphicsMode 确定是否允许增强图形模式（世界转换） <BR>GetMapMode 为特定设备场景调入映象模式 <BR>GetRegionData 装入描述一个区域信息的RgnData结构或缓冲区 <BR>GetRgnBox 获取完全包含指定区域的最小矩形 <BR>GetUpdateRgn 确定指定窗口的刷新区域。该区域当前无效，需要刷新 <BR>GetViewportExtEx 获取设备场景视口（viewport）范围 <BR>GetViewportOrgEx 获取设备场景视口起点 <BR>GetWindowDC 获取整个窗口（包括边框、滚动条、标题栏、菜单等）的设备场景 <BR>GetWindowExtEx 获取指定设备场景的窗口范围 <BR>GetWindowOrgEx 获取指定设备场景的逻辑窗口的起点 <BR>GetWindowRgn 获取窗口区域 <BR>GetWorldTransform 如果有世界转换，为设备场景获取当前世界转换 <BR>IntersectClipRect 为指定设备定义一个新的剪裁区 <BR>InvalidateRgn 使窗口指定区域不活动，并将它加入窗口刷新区，使之可随后被重画 <BR>InvertRgn 通过颠倒每个像素值反转设备场景指定区域 <BR>LPtoDP 将点阵从指定设备场景逻辑坐标转换为设备坐标 <BR>ModifyWorldTransform 根据指定的模式修改世界转换 <BR>OffsetClipRgn 按指定量平移设备场景剪裁区 <BR>OffsetRgn 按指定偏移量平移指定区域 <BR>OffsetViewportOrgEx 平移设备场景视口区域 <BR>OffsetWindowOrgEx 平移指定设备场景窗口起点 <BR>PaintRgn 用当前刷子背景色填充指定区域 <BR>PtInRegion 确定点是否在指定区域内 <BR>PtVisible 确定指定点是否可见（即，点是否在设备场景剪裁区内） <BR>RectInRegion 确定矩形是否有部分在指定区域内 <BR>RectVisible 确定指定矩形是否有部分可见（是否在设备场景剪裁区内） <BR>ReleaseDC 释放由调用GetDC或GetWindowDC函数获取的指定设备场景 <BR>RestoreDC 从设备场景堆栈恢复一个原先保存的设备场景 <BR>SaveDC 将指定设备场景状态保存到Windows设备场景堆栈 <BR>ScaleViewportExtEx 缩放设备场景视口的范围 <BR>ScaleWindowExtEx 缩放指定设备场景窗口范围 <BR>ScrollDC 在窗口（由设备场景代表）中水平和（或）垂直滚动矩形 <BR>SelectClipRgn 为指定设备场景选择新的剪裁区 <BR>SetBoundsRect 设置指定设备场景的边界矩形 <BR>SetGraphicsMode 允许或禁止增强图形模式，以提供某些支持（包括世界转换） <BR>SetMapMode 设置指定设备场景的映射模式 <BR>SetRectRgn 设置区域为指定的矩形 <BR>SetViewportExtEx 设置设备场景视口范围 <BR>SetViewportOrgEx 设置设备场景视口起点 <BR>SetWindowExtEx 设置指定设备场景窗口范围 <BR>SetWindowOrgEx 设置指定设备场景窗口起点 <BR>SetWindowRgn 设置窗口区域 <BR>SetWorldTransform 设置世界转换 <BR>ValidateRgn 激活窗口中指定区域，把它从刷新区移走 <BR>WindowFromDC 取回与某一设备场景相关的窗口的句柄 <BR>10. API之硬件与系统函数 <BR>ActivateKeyboardLayout 激活一个新的键盘布局。键盘布局定义了按键在一种物理性键盘上的位置与含义 <BR>Beep 用于生成简单的声音 <BR>CharToOem 将一个字串从ANSI字符集转换到OEM字符集 <BR>ClipCursor 将指针限制到指定区域 <BR>ConvertDefaultLocale 将一个特殊的地方标识符转换成真实的地方ID <BR>CreateCaret 根据指定的信息创建一个插入符（光标），并将它选定为指定窗口的默认插入符 <BR>DestroyCaret 清除（破坏）一个插入符 <BR>EnumCalendarInfo 枚举在指定"地方"环境中可用的日历信息 <BR>EnumDateFormats 列举指定的"当地"设置中可用的长、短日期格式 <BR>EnumSystemCodePages 枚举系统中已安装或支持的代码页 <BR>EnumSystemLocales 枚举系统已经安装或提供支持的"地方"设置 <BR>EnumTimeFormats 枚举一个指定的地方适用的时间格式 <BR>ExitWindowsEx 退出windows，并用特定的选项重新启动 <BR>ExpandEnvironmentStrings 扩充环境字串 <BR>FreeEnvironmentStrings 翻译指定的环境字串块 <BR>GetACP 判断目前正在生效的ANSI代码页 <BR>GetAsyncKeyState 判断函数调用时指定虚拟键的状态 <BR>GetCaretBlinkTime 判断插入符光标的闪烁频率 <BR>GetCaretPos 判断插入符的当前位置 <BR>GetClipCursor 取得一个矩形，用于描述目前为鼠标指针规定的剪切区域 <BR>GetCommandLine 获得指向当前命令行缓冲区的一个指针 <BR>GetComputerName 取得这台计算机的名称 <BR>GetCPInfo 取得与指定代码页有关的信息 <BR>GetCurrencyFormat 针对指定的"地方"设置，根据货币格式格式化一个数字 <BR>GetCursor 获取目前选择的鼠标指针的句柄 <BR>GetCursorPos 获取鼠标指针的当前位置 <BR>GetDateFormat 针对指定的"当地"格式，对一个系统日期进行格式化 <BR>GetDoubleClickTime 判断连续两次鼠标单击之间会被处理成双击事件的间隔时间 <BR>GetEnvironmentStrings 为包含了当前环境字串设置的一个内存块分配和返回一个句柄 <BR>GetEnvironmentVariable 取得一个环境变量的值 <BR>GetInputState 判断是否存在任何待决（等待处理）的鼠标或键盘事件 <BR>GetKBCodePage 由GetOEMCP取代，两者功能完全相同 <BR>GetKeyboardLayout 取得一个句柄，描述指定应用程序的键盘布局 <BR>GetKeyboardLayoutList 获得系统适用的所有键盘布局的一个列表 <BR>GetKeyboardLayoutName 取得当前活动键盘布局的名称 <BR>GetKeyboardState 取得键盘上每个虚拟键当前的状态 <BR>GetKeyboardType 了解与正在使用的键盘有关的信息 <BR>GetKeyNameText 在给出扫描码的前提下，判断键名 <BR>GetKeyState 针对已处理过的按键，在最近一次输入信息时，判断指定虚拟键的状态 <BR>GetLastError 针对之前调用的api函数，用这个函数取得扩展错误信息 <BR>GetLocaleInfo 取得与指定"地方"有关的信息 <BR>GetLocalTime 取得本地日期和时间 <BR>GetNumberFormat 针对指定的"地方"，按特定的格式格式化一个数字 <BR>GetOEMCP 判断在OEM和ANSI字符集间转换的windows代码页 <BR>GetQueueStatus 判断应用程序消息队列中待决（等待处理）的消息类型 <BR>GetSysColor 判断指定windows显示对象的颜色 <BR>GetSystemDefaultLangID 取得系统的默认语言ID <BR>GetSystemDefaultLCID 取得当前的默认系统"地方" <BR>GetSystemInfo 取得与底层硬件平台有关的信息 <BR>GetSystemMetrics 返回与windows环境有关的信息 <BR>GetSystemPowerStatus 获得与当前系统电源状态有关的信息 <BR>GetSystemTime 取得当前系统时间，这个时间采用的是"协同世界时间"（即UTC，也叫做GMT）格式 <BR>GetSystemTimeAdjustment 使内部系统时钟与一个外部的时钟信号源同步 <BR>GetThreadLocale 取得当前线程的地方ID <BR>GetTickCount 用于获取自windows启动以来经历的时间长度（毫秒） <BR>GetTimeFormat 针对当前指定的"地方"，按特定的格式格式化一个系统时间 <BR>GetTimeZoneInformation 取得与系统时区设置有关的信息 <BR>GetUserDefaultLangID 为当前用户取得默认语言ID <BR>GetUserDefaultLCID 取得当前用户的默认"地方"设置 <BR>GetUserName 取得当前用户的名字 <BR>GetVersion 判断当前运行的Windows和DOS版本 <BR>GetVersionEx 取得与平台和操作系统有关的版本信息 <BR>HideCaret 在指定的窗口隐藏插入符（光标） <BR>IsValidCodePage 判断一个代码页是否有效 <BR>IsValidLocale 判断地方标识符是否有效 <BR>keybd_event 这个函数模拟了键盘行动 <BR>LoadKeyboardLayout 载入一个键盘布局 <BR>MapVirtualKey 根据指定的映射类型，执行不同的扫描码和字符转换 <BR>MapVirtualKeyEx 根据指定的映射类型，执行不同的扫描码和字符转换 <BR>MessageBeep 播放一个系统声音。系统声音的分配方案是在控制面板里决定的 <BR>mouse_event 模拟一次鼠标事件 <BR>OemKeyScan 判断OEM字符集中的一个ASCII字符的扫描码和Shift键状态 <BR>OemToChar 将OEM字符集的一个字串转换到ANSI字符集 <BR>SetCaretBlinkTime 指定插入符（光标）的闪烁频率 <BR>SetCaretPos 指定插入符的位置 <BR>SetComputerName 设置新的计算机名 <BR>SetCursor 将指定的鼠标指针设为当前指针 <BR>SetCursorPos 设置指针的位置 <BR>SetDoubleClickTime 设置连续两次鼠标单击之间能使系统认为是双击事件的间隔时间 <BR>SetEnvironmentVariable 将一个环境变量设为指定的值 <BR>SetKeyboardState 设置每个虚拟键当前在键盘上的状态 <BR>SetLocaleInfo 改变用户"地方"设置信息 <BR>SetLocalTime 设置当前地方时间 <BR>SetSysColors 设置指定窗口显示对象的颜色 <BR>SetSystemCursor 改变任何一个标准系统指针 <BR>SetSystemTime 设置当前系统时间 <BR>SetSystemTimeAdjustment 定时添加一个校准值使内部系统时钟与一个外部的时钟信号源同步 <BR>SetThreadLocale 为当前线程设置地方 <BR>SetTimeZoneInformation 设置系统时区信息 <BR>ShowCaret 在指定的窗口里显示插入符（光标） <BR>ShowCursor 控制鼠标指针的可视性 <BR>SwapMouseButton 决定是否互换鼠标左右键的功能 <BR>SystemParametersInfo 获取和设置数量众多的windows系统参数 <BR>SystemTimeToTzSpecificLocalTime 将系统时间转换成地方时间 <BR>ToAscii 根据当前的扫描码和键盘信息，将一个虚拟键转换成ASCII字符 <BR>ToUnicode 根据当前的扫描码和键盘信息，将一个虚拟键转换成Unicode字符 <BR>UnloadKeyboardLayout 卸载指定的键盘布局 <BR>VkKeyScan 针对Windows字符集中一个ASCII字符，判断虚拟键码和Shift键的状态 <BR>11. API之进程和线程函数 <BR>CancelWaitableTimer 这个函数用于取消一个可以等待下去的计时器操作 <BR>CallNamedPipe 这个函数由一个希望通过管道通信的一个客户进程调用 <BR>ConnectNamedPipe 指示一台服务器等待下去，直至客户机同一个命名管道连接 <BR>CreateEvent 创建一个事件对象 <BR>CreateMailslot 创建一个邮路。返回的句柄由邮路服务器使用（收件人） <BR>CreateMutex 创建一个互斥体（MUTEX） <BR>CreateNamedPipe 创建一个命名管道。返回的句柄由管道的服务器端使用 <BR>CreatePipe 创建一个匿名管道 <BR>CreateProcess 创建一个新进程（比如执行一个程序） <BR>CreateSemaphore 创建一个新的信号机 <BR>CreateWaitableTimer 创建一个可等待的计时器对象 <BR>DisconnectNamedPipe 断开一个客户与一个命名管道的连接 <BR>DuplicateHandle 在指出一个现有系统对象当前句柄的情况下，为那个对象创建一个新句柄 <BR>ExitProcess 中止一个进程 <BR>FindCloseChangeNotification 关闭一个改动通知对象 <BR>FindExecutable 查找与一个指定文件关联在一起的程序的文件名 <BR>FindFirstChangeNotification 创建一个文件通知对象。该对象用于监视文件系统发生的变化 <BR>FindNextChangeNotification 重设一个文件改变通知对象，令其继续监视下一次变化 <BR>FreeLibrary 释放指定的动态链接库 <BR>GetCurrentProcess 获取当前进程的一个伪句柄 <BR>GetCurrentProcessId 获取当前进程一个唯一的标识符 <BR>GetCurrentThread 获取当前线程的一个伪句柄 <BR>GetCurrentThreadId 获取当前线程一个唯一的线程标识符 <BR>GetExitCodeProces 获取一个已中断进程的退出代码 <BR>GetExitCodeThread 获取一个已中止线程的退出代码 <BR>GetHandleInformation 获取与一个系统对象句柄有关的信息 <BR>GetMailslotInfo 获取与一个邮路有关的信息 <BR>GetModuleFileName 获取一个已装载模板的完整路径名称 <BR>GetModuleHandle 获取一个应用程序或动态链接库的模块句柄 <BR>GetPriorityClass 获取特定进程的优先级别 <BR>GetProcessShutdownParameters 调查系统关闭时一个指定的进程相对于其它进程的关闭早迟情况 <BR>GetProcessTimes 获取与一个进程的经过时间有关的信息 <BR>GetProcessWorkingSetSize 了解一个应用程序在运行过程中实际向它交付了多大容量的内存 <BR>GetSartupInfo 获取一个进程的启动信息 <BR>GetThreadPriority 获取特定线程的优先级别 <BR>GetTheardTimes 获取与一个线程的经过时间有关的信息 <BR>GetWindowThreadProcessId 获取与指定窗口关联在一起的一个进程和线程标识符 <BR>LoadLibrary 载入指定的动态链接库，并将它映射到当前进程使用的地址空间 <BR>LoadLibraryEx 装载指定的动态链接库，并为当前进程把它映射到地址空间 <BR>LoadModule 载入一个Windows应用程序，并在指定的环境中运行 <BR>MsgWaitForMultipleObjects 等侯单个对象或一系列对象发出信号。如返回条件已经满足，则立即返回 <BR>SetPriorityClass 设置一个进程的优先级别 <BR>SetProcessShutdownParameters 在系统关闭期间，为指定进程设置他相对于其它程序的关闭顺序 <BR>SetProcessWorkingSetSize 设置操作系统实际划分给进程使用的内存容量 <BR>SetThreadPriority 设定线程的优先级别 <BR>ShellExecute 查找与指定文件关联在一起的程序的文件名 <BR>TerminateProcess 结束一个进程 <BR>WinExec 运行指定的程序 <BR>12. API之控件与消息函数 <BR>AdjustWindowRect 给定一种窗口样式，计算获得目标客户区矩形所需的窗口大小 <BR>AnyPopup 判断屏幕上是否存在任何弹出式窗口 <BR>ArrangeIconicWindows 排列一个父窗口的最小化子窗口 <BR>AttachThreadInput 连接线程输入函数 <BR>BeginDeferWindowPos 启动构建一系列新窗口位置的过程 <BR>BringWindowToTop 将指定的窗口带至窗口列表顶部 <BR>CascadeWindows 以层叠方式排列窗口 <BR>ChildWindowFromPoint 返回父窗口中包含了指定点的第一个子窗口的句柄 <BR>ClientToScreen 判断窗口内以客户区坐标表示的一个点的屏幕坐标 <BR>CloseWindow 最小化指定的窗口 <BR>CopyRect 矩形内容复制 <BR>DeferWindowPos 该函数为特定的窗口指定一个新窗口位置 <BR>DestroyWindow 清除指定的窗口以及它的所有子窗口 <BR>DrawAnimatedRects 描绘一系列动态矩形 <BR>EnableWindow 指定的窗口里允许或禁止所有鼠标及键盘输入 <BR>EndDeferWindowPos 同时更新DeferWindowPos调用时指定的所有窗口的位置及状态 <BR>EnumChildWindows 为指定的父窗口枚举子窗口 <BR>EnumThreadWindows 枚举与指定任务相关的窗口 <BR>EnumWindows 枚举窗口列表中的所有父窗口 <BR>EqualRect 判断两个矩形结构是否相同 <BR>FindWindow 寻找窗口列表中第一个符合指定条件的顶级窗口 <BR>FindWindowEx 在窗口列表中寻找与指定条件相符的第一个子窗口 <BR>FlashWindow 闪烁显示指定窗口 <BR>GetActiveWindow 获得活动窗口的句柄 <BR>GetCapture 获得一个窗口的句柄，这个窗口位于当前输入线程，且拥有鼠标捕获（鼠标活动由它接收） <BR>GetClassInfo 取得WNDCLASS结构（或WNDCLASSEX结构）的一个副本，结构中包含了与指定类有关的信息 <BR>GetClassLong 取得窗口类的一个Long变量条目 <BR>GetClassName 为指定的窗口取得类名 <BR>GetClassWord 为窗口类取得一个整数变量 <BR>GetClientRect 返回指定窗口客户区矩形的大小 <BR>GetDesktopWindow 获得代表整个屏幕的一个窗口（桌面窗口）句柄 <BR>GetFocus 获得拥有输入焦点的窗口的句柄 <BR>GetForegroundWindow 获得前台窗口的句柄 <BR>GetLastActivePopup 获得在一个给定父窗口中最近激活过的弹出式窗口的句柄 <BR>GetParent 判断指定窗口的父窗口 <BR>GetTopWindow 搜索内部窗口列表，寻找隶属于指定窗口的头一个窗口的句柄 <BR>GetUpdateRect 获得一个矩形，它描叙了指定窗口中需要更新的那一部分 <BR>GetWindow 获得一个窗口的句柄，该窗口与某源窗口有特定的关系 <BR>GetWindowContextHelpId 取得与窗口关联在一起的帮助场景ID <BR>GetWindowLong 从指定窗口的结构中取得信息 <BR>GetWindowPlacement 获得指定窗口的状态及位置信息 <BR>GetWindowRect 获得整个窗口的范围矩形，窗口的边框、标题栏、滚动条及菜单等都在这个矩形内 <BR>GetWindowText 取得一个窗体的标题（caption）文字，或者一个控件的内容 <BR>GetWindowTextLength 调查窗口标题文字或控件内容的长短 <BR>GetWindowWord 获得指定窗口结构的信息 <BR>InflateRect 增大或减小一个矩形的大小 <BR>IntersectRect 这个函数在lpDestRect里载入一个矩形，它是lpSrc1Rect与lpSrc2Rect两个矩形的交集 <BR>InvalidateRect 屏蔽一个窗口客户区的全部或部分区域 <BR>IsChild 判断一个窗口是否为另一窗口的子或隶属窗口 <BR>IsIconic 判断窗口是否已最小化 <BR>IsRectEmpty 判断一个矩形是否为空 <BR>IsWindow 判断一个窗口句柄是否有效 <BR>IsWindowEnabled 判断窗口是否处于活动状态 <BR>IsWindowUnicode 判断一个窗口是否为Unicode窗口。这意味着窗口为所有基于文本的消息都接收Unicode文字 <BR>IsWindowVisible 判断窗口是否可见 <BR>IsZoomed 判断窗口是否最大化 <BR>LockWindowUpdate 锁定指定窗口，禁止它更新 <BR>MapWindowPoints 将一个窗口客户区坐标的点转换到另一窗口的客户区坐标系统 <BR>MoveWindow 改变指定窗口的位置和大小 <BR>OffsetRect 通过应用一个指定的偏移，从而让矩形移动起来 <BR>OpenIcon 恢复一个最小化的程序，并将其激活 <BR>PtInRect 判断指定的点是否位于矩形内部 <BR>RedrawWindow 重画全部或部分窗口 <BR>ReleaseCapture 为当前的应用程序释放鼠标捕获 <BR>ScreenToClient 判断屏幕上一个指定点的客户区坐标 <BR>ScrollWindow 滚动窗口客户区的全部或一部分 <BR>ScrollWindowEx 根据附加的选项，滚动窗口客户区的全部或部分 <BR>SetActiveWindow 激活指定的窗口 <BR>SetCapture 将鼠标捕获设置到指定的窗口 <BR>SetClassLong 为窗口类设置一个Long变量条目 <BR>SetClassWord 为窗口类设置一个条目 <BR>SetFocusAPI 将输入焦点设到指定的窗口。如有必要，会激活窗口 <BR>SetForegroundWindow 将窗口设为系统的前台窗口 <BR>SetParent 指定一个窗口的新父 <BR>SetRect 设置指定矩形的内容 <BR>SetRectEmpty 将矩形设为一个空矩形 <BR>SetWindowContextHelpId 为指定的窗口设置帮助场景（上下文）ID <BR>SetWindowLong 在窗口结构中为指定的窗口设置信息 <BR>SetWindowPlacement 设置窗口状态和位置信息 <BR>SetWindowPos 为窗口指定一个新位置和状态 <BR>SetWindowText 设置窗口的标题文字或控件的内容 <BR>SetWindowWord 在窗口结构中为指定的窗口设置信息 <BR>ShowOwnedPopups 显示或隐藏由指定窗口所有的全部弹出式窗口 <BR>ShowWindow 控制窗口的可见性 <BR>ShowWindowAsync 与ShowWindow相似 <BR>SubtractRect 装载矩形lprcDst，它是在矩形lprcSrc1中减去lprcSrc2得到的结果 <BR>TileWindows 以平铺顺序排列窗口 <BR>UnionRect 装载一个lpDestRect目标矩形，它是lpSrc1Rect和lpSrc2Rect联合起来的结果 <BR>UpdateWindow 强制立即更新窗口 <BR>ValidateRect 校验窗口的全部或部分客户区 <BR>WindowFromPoint 返回包含了指定点的窗口的句柄。忽略屏蔽、隐藏以及透明窗口<BR></P><img src ="http://www.blogjava.net/happyfish/aggbug/4139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/happyfish/" target="_blank">小鱼儿</a> 2005-05-10 13:22 <a href="http://www.blogjava.net/happyfish/archive/2005/05/10/4139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>