• [CODE]小偷程序原理和简单示例

    现在网上流行的小偷程序比较多,有新闻类小偷,音乐小偷,下载小偷,那么它们是如何做的呢,下面我来做个简单介绍,希望对各位站长有所帮助。
    (一)原理
    小偷程序实际上是通过了XML中的XMLHTTP组件调用其它网站上的网页。比如新闻小偷程序,很多都是调用了sina的新闻网页,并且对其中的html进行了一些替换,同时对广告也进行了过滤。用小偷程序的优点有:无须维护网站,因为小偷程序中的数据来自其他网站,它将随着该网站的更新而更新;可以节省服务器资源,一般小偷程序就几个文件,所有网页内容都是来自其他网站。缺点有:不稳定,如果目标网站出错,程序也会出错,而且,如果目标网站进行升级维护,那么小偷程序也要进行相应修改;速度,因为是远程调用,速度和在本地服务器上读取数据比起来,肯定要慢一些。
    (二)事例

    下面就XMLHTTP在ASP中的应用做个简单说明

    XML相关技术资料

    xmlHTTP技术:
    ----------------------------------------------------------
    一、数据库远程管理技术

    基于互联网的广域网现代应用中的一个重要环节是数据库远程监控。首先简单回顾一下互联网上的数据库远程管理技术的发展过程和方式:

    早期通过编写CGI-BIN程序模块进行数据库远程管理。但CGI-BIN的运行速度慢,维护很不方便,现在已经基本被弃用。

    这几年使用组件对象模型(Component Object Model, COM)的应用非常多,效果也很好。但如果使用的是第三方服务器(笔者的网站就是建立在第三方的虚拟主机上),服务器方往往因为保密或其它商业原因不允许用户注册自己的组件。

    近年来由微软公司推出的.NET平台和SUN公司的J2EE平台都是非常高档的数据库远程管理与服务平台。都能提供优质的多层(n-Tier)应用服务。
    其中,.NET的简单对象访问协议(Simple Object Access Protocol, SOAP)使用超文本传输协议(Hypertext Transfer Protocol, HTTP)和扩展标记语言(Extensible Markup Language, XML)技术实现跨系统(例如Windows - Linux)的通讯服务方式已经广为开发商接受和使用。许多大型应用,例如企业资源计划(Enterprise resource planning, ERP)等都建立在这样的大型平台之上。
    但对于中小型应用,比如一个网站的建设和维护,这种大型应用平台就显得有些尾大不掉,开销也过于庞大。

    曾经在互联网技术和Java技术方面一度落后的微软公司在XML应用开发则走在了前头。她的XML解析器(MSXML)中的XMLHTTP协议是一个非常方便实用的客户/服务通讯管道。综合运用XMLHTTP以及ActiveX数据对象(ActiveX Data Objects, ADO/ADOX)可以简单方便地实现数据库远程管理。

    本文介绍如何综合运用XMLHTTP和ADO/ADOX进行远程数据库管理。

    二、数据库远程管理体系

    数据库远程管理的任务流程是:
    1、客户端向服务端发出数据库结构和数据的查询或修改指令。
    2、服务端接受并执行有关指令并向客户端返回结果。
    3、客户端接受并显示服务端返回的指令执行结果。

    实现数据库远程管理的二个主要关键环节是:
    1、客户端与服务端之间的指令上传和结果下传的数据通道,由XMLHTTP协议实现。
    2、服务端前沿与数据库之间的指令传送和结果返回,由起着中间层作用的ADO/ADOX接口完成。
    三、XMLHTTP的使用

    顾名思义,XMLHTTP是个传送XML格式数据的超文本传输协议。

    实际上,XMLHTTP的数据传输过程更为灵活一些:
    它上传的指令可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。还可以是URL的参数。
    它下达的结果可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。
    详情可参阅文末链接。

    客户端调用XMLHTTP的过程很简单,只有5个步骤:
    1、创建XMLHTTP对象
    2、打开与服务端的连接,同时定义指令发送方式,服务网页(URL)和请求权限等。
    客户端通过Open命令打开与服务端的服务网页的连接。与普通HTTP指令传送一样,可以用"GET"方法或"POST"方法指向服务端的服务网页。
    3、发送指令。
    4、等待并接收服务端返回的处理结果。
    5、释放XMLHTTP对象

    XMLHTTP方法:
    Open bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword
    bstrMethod:数据传送方式,即GET或POST。
    bstrUrl:服务网页的URL。
    varAsync:是否同步执行。缺省为True,即同步执行,但只能在DOM中实施同步执行。
    应用中一般将其置为False,即异步执行。
    bstrUser:用户名,可省略。
    bstrPassword:用户口令,可省略。

    Send varBody
    varBody:指令集。可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。也可以省略,让指令通过Open方法的URL参数代入。

    setRequestHeader bstrHeader, bstrValue
    bstrHeader:HTTP 头(header)
    bstrValue:HTTP 头(header)的值
    如果Open方法定义为POST,可以定义表单方式上传:
    xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"

    XMLHTTP属性:
    onreadystatechange:在同步执行方式下获得返回结果的事件句柄。只能在DOM中调用
  • 手把手教你写小偷程序

    先选中一个你想 “偷” 的网页程序。。。
    我这里看中了它。。呵呵 。。。很多妹妹图片。。。口水中。。
    http://www.linkmm.com/photo/ads2.html
    然后建立个ASP网页,先把以下代码复制进去
    <%function bytes2BSTR(vIn)
    strReturn = ""
    For i = 1 To LenB(vIn)
    ThisCharCode = AscB(MidB(vIn,i,1))
    If ThisCharCode < &H80 Then
    strReturn = strReturn & Chr(ThisCharCode)
    Else
    NextCharCode = AscB(MidB(vIn,i+1,1))
    strReturn = strReturn & Chr (CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
    i = i + 1
    End If
    Next
    bytes2BSTR = strReturn
    End function



    Url = "http://www.linkmm.com/photo/ads2.html "’ target="_blank" >http://www.linkmm.com/photo/ads2.html ";;
    set oSend=createobject("Microsoft.XMLHTTP"
    SourceCode = oSend.open ("GET",url,false)
    oSend.send()
    if err.number<>0 then
    Response.write err.description
    Response.End()
    end if
    SourceCode = bytes2BSTR(oSend.responseBody)%>

    其中Url = "http://www.linkmm.com/photo/ads2.html "’ target="_blank" >http://www.linkmm.com/photo/ads2.html ";;就是你想要 偷 的网页,换成你需要的就可以了。。
    这个时候response.write 一下。。是不是很多图片看不见啊。。不急,我们有replace呢。。把你现在的网页查看下原文件,,把原来的网页查看下愿文件对比下就知道怎么让这些无法显示的显示出来。。。比起那些一个个replace替换图片的方法
    用这个方法好多了就是在有src的地方在他前面直接替换网址多方便呵呵。。
    在写这段代码。。程序就完了呵呵
    <%baseurl1="http://www.linkmm.com/photo"’ target="_blank" >http://www.linkmm.com/photo";;
    SourceCode =replace(sourcecode,"src=""img/","src=""http://www.linkmm.com/photo/img/"’ target="_blank" >http://www.linkmm.com/photo/img/";
    SourceCode =replace(sourcecode,"new.gif",baseurl1&"/new.gif"
    SourceCode =replace(sourcecode,"href=""photo888","href=""http://www.linkmm.com/photo/photo888"’ target="_blank" >http://www.linkmm.com/photo/photo888";
    SourceCode =replace(sourcecode,"site.css","http://www.linkmm.com/photo/site.css"’ target="_blank" >http://www.linkmm.com/photo/site.css";
    response.write SourceCode%>

    是不是很简单啊。不懂的联系我52596464
    完整代码如下:
    <html>

    <head>
    <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
    <meta name="ProgId" content="FrontPage.Editor.Document">
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <meta http-equiv="refresh" content="3600">
    <title></title>
    </head>

    <body>

    <%
    function bytes2BSTR(vIn)
    strReturn = ""
    For i = 1 To LenB(vIn)
    ThisCharCode = AscB(MidB(vIn,i,1))
    If ThisCharCode < &H80 Then
    strReturn = strReturn & Chr(ThisCharCode)
    Else
    NextCharCode = AscB(MidB(vIn,i+1,1))
    strReturn = strReturn & Chr (CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
    i = i + 1
    End If
    Next
    bytes2BSTR = strReturn
    End function

    Url = "http://www.linkmm.com/photo/ads2.html "’ target="_blank" >http://www.linkmm.com/photo/ads2.html ";;
    set oSend=createobject("Microsoft.XMLHTTP"
    SourceCode = oSend.open ("GET",url,false)
    oSend.send()
    if err.number<>0 then
    Response.write err.description
    Response.End()
    end if
    SourceCode = bytes2BSTR(oSend.responseBody)
    baseurl1="http://www.linkmm.com/photo"’ target="_blank" >http://www.linkmm.com/photo";;
    SourceCode =replace(sourcecode,"src=""img/","src=""http://www.linkmm.com/photo/img/"’ target="_blank" >http://www.linkmm.com/photo/img/";
    SourceCode =replace(sourcecode,"new.gif",baseurl1&"/new.gif"
    SourceCode =replace(sourcecode,"href=""photo888","href=""http://www.linkmm.com/photo/photo888"’ target="_blank" >http://www.linkmm.com/photo/photo888";
    SourceCode =replace(sourcecode,"site.css","http://www.linkmm.com/photo/site.css"’ target="_blank" >http://www.linkmm.com/photo/site.css";
    response.write SourceCode
    %>
    </body>

    </html>
  • 白天没水,
    晚上没电,
    发的工资只够买面.
    打开邓选,
    找到答案:
    原来是社会主义初级阶段.
    再往后翻,
    还一百年不变!
    好想有个太太,
    为我烧菜做饭。
    现实却很无奈,
    让我仍需等待。
    也因寂寞难耐,
    谈过几次恋爱。
    谁知屡战屡败,
    轻轻松松被踹。
    其实我也奇怪,
    为啥总被淘汰。
    历尽打击伤害,
    总算知道大概。
    嫌我不讲穿戴,
    嫌我长得不帅。
    嫌我个头太矮,
    嫌我没有气派。
    熊猫长得不帅,
    却受世人关爱。
    丑是自然灾害,
    矮是因为缺钙。
    做人只求正派,
    讲啥穿戴气派!
    我们这个年代,
    注定缺少真爱。
    女人不是太坏,
    就是心胸狭隘。
    或许除此之外,
    还有部分可爱。
    只怕时至现在,
    早已有了后代。
  • 好土 - [碧雪日记]

    2004-03-31

    主题:好土

    傲气面对名利场
    看见美眉眼发亮
    脸似铁打心如精钢
    胸襟百千丈眼光万里长
    奋发自强做流氓
    做个好流氓每天要自强
    黑心流氓冷胜冰雪霜
    让老天看我耍流氓
    打架拍砖泡妞是我们的理想
    (气焰高涨)
    又看网络无垠匪气扬
    即是男儿当流氓
    昂首挺胸大家做坏蛋做流氓
    用我经验为大家做榜样
    做个好流氓
    冷血黑心肠
    恶名网上扬

    你我皆凡人,来到网络间;
    终日灌水忙,一刻不得闲;
    既然不是仙,难免有嗔念;
    清高放两旁,砖头抡的圆。
    多少男子汉,一怒为红颜;
    虚拟网络间,结下不解怨;
    真诚与虚伪,有谁能两全,
    ID被封了,向谁去喊冤。


    问你 何时曾看见,
    这坛子为了流氓改变,
    有了梦寐以求的名声,
    是否就算是拥有金钱?


    曾经真的以为坛子就这样了
    流氓的心掀起滔天浪潮
    以往结下的恩怨却断不了
    每次上网都让我烦恼
    有人问我体坛到底是哪里好
    这样打击你还忘不了
    妹妹再美也比不上砖头好
    没掐过架的人不会明了
    是鬼迷了心窍也好
    是特意要闹事也好
    然而这一切已不再重要
    看不顺眼就往死拍就好
    是命运的安排也好
    有人存心的挑逗也好
    然而这一切已不再重要
    我愿意战斗到天荒地老
    虽然岁月总是匆匆的摧人老
    虽然被封总是让人烦恼
    虽然未来如何不能知道
    现在想说和平还是太早
  • 用VB函数轻松访问系统注册表


    注册表在Windows 9x中的作用是不言而喻的,它除了保存操作系统自身的软件、硬件及环境信息外,一个重要的用途就是保存应用程序中允许用户定制修改的配置信息。 在Visual Basic应用程序中,有两种访问系统注册表的方法:一种是使用VB自带的注册表函数,另一种则是使用Windows API函数,这两种方法各有优缺点,前者功能简单但容易使用,后者则功能强大但使用相对复杂一些,本文给大家介绍用VB自带的函数访问系统注册表的方法。 一、用VB函数访问注册表的方法

    在VB5.0中自带的注册表函数(命令)共有4条,分别是SaveSetting、GetSetting、GetAllSettings和DeleteSetting,下面是四个函数的详细用法: 1
  • VB常用术语释义

    项目(Project):是用户创建的文件集合,这个集合包括用户的Windows 应用程序。
    控件(Control):是Toolbox窗口中用户置于窗体上的工具,用于配合用户控制程序流程。
    代码(Code):是所写的编程语句的另一个名字。像素(Pixel):代表图形元素,表示监视器上最小的可寻址的图形点。
    全局变量(Global Variable):就是在整个模块内或整个应用程序内均可使用的变量。
    函数(Function):是一个例程,接受零个、一个或多个参数并根据这些参数返回一个结果。
    死循环(Infinite Loop):是一个永不终止的循环。
    语法错误(Syntax Error):是由于拼错一条命令或使用不正确的语法引起的一种错误。
    消息框(Message Box):是为向用户提供信息而显示的对话框。
    循环(Loop):就是一组重复执行的程序指令集。
    赋值语句(Assignment Statement):是用来给控件、变量或其他对象赋值的程序语句。
    结构化程序设计(Structured Programming):是一种程序设计方法,用它来把长程序分成几个小过程,尽可能分得详细一些。
    调用过程(Calling Procedure):是触发其他过程执行的过程。
    被调用过程(Called Procedure):是由其他过程调用的过程。
    标准函数过程(Standard Function Procedure):是一个独立的非事件过程,当被其他过程调用时,它完成一定的工作并返回一个值给调用者。
    标准子程序过程(Standard Subroutine Procedure):是一个独立的非事件过程,当被其他程序调用时,它完成一定的工作。
    引用传递(By Reference):是一种传递值并允许被调用过程修改这些值的方法。它也叫做通过地址传递(By Address)。
    值传递(By Value):是一种传递值并保护调用过程的传递数据,因而被调用过程不能改变此数据的方法。
    编辑掩码(Edit Mask):是一个格式字符串,例如“#,###,##”,它指定怎样显示数字和字符串数据。



  • 对VB编程的一些建议

    VB是一个功能强大的开发工具,它给我们一个高效、迅速的开发环境,让我们能轻松编写出想要的程序。但它也有不足,大量的隐式操作后台操作给我们带来方便的同时,也带来了不少的隐患。不过,我们可以自己改进,来避免隐式操作带来的麻烦。

      1.保证任何新模块都有Option Explicit

      这一点非常重要,它能避免我们去创建错误的变量,例如你创建了一个StrUserName变量,但由于粗心,错写成StrUserName,若没有Option Explicit,VB会自做主张地创建StrUserName变量。导致程序得不到正确的结果,出了这种错一般难以查出来,所以,最好能在每个模块都加上Option Explicit以确保变量的合法性。

      2.显式地指出变量类型

      这样做不仅可以提升程序速度,更大的优点是消除了不明确现象,使代码更易维护、更易阅读。

      3.避免使用DefType语句

      DefType语句会引起变量类型的混乱,降低程序的可维护性、完备性和可移植性。

      4.初始化所有变量

      这是一种谨慎的态度,这样做能产生更清晰、准确和更强的可移植代码来。还有一点就是,初始化变量时最好能在使用变量的点附近进行,这可避免许多莫名其妙的错误。

      5.一行定义一个变量

      这样定义变量可避免由粗心而造成的一些错误,例如:

      Dim UserMin
  • 美女的诱惑 - [flash经典]

    2004-03-30

    [FLASH]http://www.woogood.com/0908/meinvi.swf[/FLASH]
  • 美女更衣 - [flash经典]

    2004-03-30

    [FLASH]http://www.woogood.com/0908/meinvgengyii.swf[/FLASH]
  • 今夜无星 - [碧雪日记]

    2004-03-30

    今夜无星


    当天空的最后一片晚霞
    落在地平线后

    列车驶入站台
    游子的心
    一如明月
    依稀朦胧而孤独的
    独自守侯
    漫长的夜

    只因
    今夜无星
    ------------碧雪
  • 我是一个VB初学者,自己这几天在网上找了点资料,发出来和大家共享.如果对你有用,或你有什么好的建议.请给我留言.高手有什么招.也请指点一、二,不胜感激!
    有同道者加我QQ:315504999
  • VB基础代码 - [VB学习]

    2004-03-27

    =======================================================
    ’一、如何使用ADODC控件绑定数据到DataGrid和DataList
    ’=======================================================

    Public isDB As Boolean

    Private Sub Form_Load()
    Dim connStr, AccessLocation As String
    AccessLocation = "C:\db1.mdb"
    connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & AccessLocation & ";Persist Security Info=False"
    Adodc1.ConnectionString = connStr
    Adodc1.CommandType = adCmdText
    Adodc1.RecordSource = "select * from tableabc"
    Adodc1.Refresh
    For i = 0 To Adodc1.Recordset.Fields.Count - 1
    List1.AddItem Adodc1.Recordset.Fields(i).Name
    Next
    Set DataList1.DataSource = Adodc1
    DataList1.DataField = "Col1"
    DataList1.BoundColumn = "Col1"
    Set DataList1.RowSource = Adodc1
    DataList1.ListField = "Col1"

    Adodc1.Recordset.MoveFirst
    End Sub

    Private Sub List1_Click() ’选择DataGrid中显示的字段
    Dim sql, sql1 As String

    sql = "select "
    For i = 0 To List1.ListCount - 1
    If List1.Selected(i) Then
    If Trim(sql1) = "" Then
    sql1 = List1.List(i)
    Else
    sql1 = sql1 & ", " & List1.List(i)
    End If
    End If
    Next

    If Trim(sql1) = "" Then
    sql1 = "*"
    End If

    sql = sql & sql1 & " from tableabc"

    Adodc1.RecordSource = sql
    Adodc1.Refresh
    Set DataGrid1.DataSource = Adodc1
    End Sub



    ’========================================================
    ’二、如何对文件进行二进制读写
    ’========================================================
    Dim getValue() As Byte

    Private Sub Command1_Click()
    Open "C:\1.cmd" For Binary Access Write As #2
    Put #2, , getValue()
    Close #2

    End Sub

    Private Sub Form_Load()

    Open "C:\command.com" For Binary Access Read As #1
    ReDim getValue(FileLen("C:\command.com"))
    Get #1, , getValue
    Close #1
    End Sub

    ’========================================================
    ’三、字符串处理算法(1)
    ’ 求出已知字符串中出现频率最高的字串内容及出现次数
    ’========================================================
    Private Sub Command1_Click()
    Dim a, b As String
    Dim i As Long
    Dim c, t As Long

    c = 0
    a = "abcdefcdedgcdeethcdenbicde"
    For i = 1 To Len(a)
    t = 0
    b = a
    If i = Len(a) - 2 Then Exit For
    Do Until InStr(b, Mid(a, i, 3)) = 0
    b = Right(b, Len(b) - InStr(b, Mid(a, i, 3)))
    t = t + 1
    Loop
    If t > c Then
    c = t
    End If
    Next
    MsgBox c
    End Sub

    ’========================================================
    ’四、DriveListBox,DirListBox,FileListBox三个控件的使用
    ’========================================================

    Private Sub Dir1_Change()
    File1.Path = Dir1.Path
    End Sub

    Private Sub Drive1_Change()
    Dir1.Path = Drive1.Drive
    End Sub

    Private Sub File1_Click()
    Text1.Text = File1.Path & "\" & File1.FileName
    End Sub

    ’========================================================
    ’五、如何对目录进行操作 (使用FSO)
    ’========================================================

    Private Sub Command1_Click()
    Dim fso As Object
    Dim SourcePath, TargetPath As String
    SourcePath = Text1.Text
    TargetPath = Text2.Text
    Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.FolderExists(TargetPath) Then
    fso.CopyFolder SourcePath & "*.*", TargetPath
    fso.CopyFile SourcePath & "*.*", TargetPath
    Else
    fso.CreateFolder (TargetPath)
    fso.CopyFolder SourcePath & "*.*", TargetPath
    fso.CopyFile SourcePath & "*.*", TargetPath
    End If
    Set fso = Nothing
    MsgBox "复制完成"
    End Sub

    Private Sub Command2_Click()
    Dim fso As Object
    Dim TargetPath As String
    TargetPath = "D:\Test"
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.DeleteFolder TargetPath, True
    Set fso = Nothing
    MsgBox "删除成功"
    End Sub

    ’========================================================
    ’六、如何取出DataGrid控件选定行的内容
    ’========================================================

    Private Sub DataGrid1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    DataGrid1.Row = DataGrid1.RowContaining(Y)
    MsgBox DataGrid1.Columns(0).Text
    End Sub

    Private Sub Form_Load()
    Adodc1.Connec
  • VB编程的七个优良习惯


    1、"&"替换"+" 2、变量命名大小写,语句错落有秩,源代码维护方面
    3、请养成以下的“对象命名约定”良好习惯 4、在简单的选择条件情况下,使用IIf()函数
    5、尽量使用Debug.Print进行调试 6、在重复对某一对象的属性进行修改时,尽量使用With....End With
    7、MsgBox中尽量使用消息图标,这样程序比较有规范 8、在可能的情况下使用枚举

    1、"&"替换"+"
    在很多人的编程语言中,用“+”来连接字符串,这样容易导致歧义。良好的习惯是用“&”来连接字符串.

    不正确:
    Dim sMessage As String
    sMessage = "1" + "2"

    正确:
    Dim sMessage As String
    sMessage = "1" & "2"

    注意:"&"的后面有个空格

    2、变量命名大小写,语句错落有秩,源代码维护方面

    下面大家比较一下以下两段代码:

    读懂难度很大的代码:

    Dim SNAME As String
    Dim NTURN As Integer

    If NTURN = 0 Then
    If SNAME = "vbeden" Then
    Do While NTURN < 4
    NTURN = NTURN + 1
    Loop
    End If
    End If

    容易读懂的代码:

    Dim sName As String
    Dim nTurn As Integer

    If nTurn = 0 Then
    If sName = "vbeden" Then
    Do While nTurn < 4
    nTurn = nTurn + 1
    Loop
    End If
    End If

    [返回索引]

    3、请养成以下的“对象命名约定”良好习惯

    推荐使用的控件前缀

    控件类型 前缀 例子
    3D Panel pnl pnlGroup
    ADO Data ado adoBiblio
    Animated button ani aniMailBox
    Check box chk chkReadOnly
    Combo box, drop-down list box cbo cboEnglish
    Command button cmd cmdExit
    Common dialog dlg dlgFileOpen
    Communications com comFax
    Control (当特定类型未知时,在过程中所使用的) ctr ctrCurrent
    Data dat datBiblio
    Data-bound combo box dbcbo dbcboLanguage
    Data-bound grid dbgrd dbgrdQueryResult
    Data-bound list box dblst dblstJobType
    Data combo dbc dbcAuthor
    Data grid dgd dgdTitles
    Data list dbl dblPublisher
    Data repeater drp drpLocation
    Date picker dtp dtpPublished
    Directory list box dir dirSource
    Drive list box drv drvTarget
    File list box fil filSource
    Flat scroll bar fsb fsbMove
    Form frm frmEntry
    Frame fra fraLanguage
    Gauge gau gauStatus
    Graph gra graRevenue
    Grid grd grdPrices
    Hierarchical flexgrid flex flexOrders
    Horizontal scroll bar hsb hsbVolume
    Image img imgIcon
    Image combo imgcbo imgcboProduct
    ImageList ils ilsAllIcons
    Label lbl lblHelpMessage
    Lightweight check box lwchk lwchkArchive
    Lightweight combo box lwcbo lwcboGerman
    Lightweight command button lwcmd lwcmdRemove
    Lightweight frame lwfra lwfraSaveOptions
    Lightweight horizontal scroll bar lwhsb lwhsbVolume
    Lightweight list box lwlst lwlstCostCenters
    Lightweight option button lwopt lwoptIncomeLevel
    Lightweight text box lwtxt lwoptStreet
    Lightweight vertical scroll bar lwvsb lwvsbYear
    Line lin linVertical
    List box lst lstPolicyCodes
    ListView lvw lvwHeadings
    MAPI message mpm mpmSentMessage
    MAPI session mps mpsSession
    MCI mci mciVideo
    Menu mnu mnuFileOpen
    Month view mvw mvwPeriod
    MS Chart ch chSalesbyRegion
    MS Flex grid msg msgClients
    MS Tab mst mstFirst
    OLE container ole oleWorksheet
    Option button opt optGender
    Picture box pic picVGA
    Picture clip clp clpToolbar
    ProgressBar prg prgLoadFile
    Remote Data rd rdTitles
    RichTextBox rtf rtfReport
    Shape shp shpCircle
    Slider sld sldScale
    Spin spn spnPages
    StatusBar sta staDateTime
    SysInfo sys sysMonitor
    TabStrip tab tabOptions
    Text box txt txtLastName
    Timer tmr tmrAlarm
    Toolbar tlb tlbActions
    TreeView tre treOrganization
    UpDown upd updDirection
    Vertical scroll bar vsb vsbRate

    --------------------------------------------------------------------------------
    推荐使用的数据访问对象 (DAO) 的前缀
    用下列前缀来指示数据访问对象
    数据库对象 前缀 例子
    Container con conReports
    Database db dbAccounts
    DBEngine dbe dbeJet
    Document doc docSalesReport
    Field fld fldAddress
    Group grp grpFinance
    Index ix idxAge
    Parameter prm prmJobCode
    QueryDef qry qrySalesByRegion
    Recordset rec recForecast
    Relation rel relEmployeeDept
    TableDef tbd tbdCustomers
    User usr usrNew
    Workspace wsp wspMine

    --------------------------------------------------------------------------------

    应用程序频繁使用许多菜单控件,对于这些控件具备一组唯一的命名约
  • 跟我学做记事本


    用VB做一个记事本实在不很复杂,我们完全可以通过向导来很方便地做出来。但本文只打算讨论用手动方法制作记事本,旨在向VB初学者展示:学VB原来是如此容易!
    通过阅读、研究本文并按本文所述进行尝试,初学者将学到很多东西,如怎样使用RichText控件来打开和保存文件,怎样制作菜单、工具栏和状态栏以及如何对其编写代码等。

    第一章 让我们的记事本马上运行

    急于求成是初学者共有的心愿。那好,请按如下三个步骤做,我们的愿望立即就可以实现!

    步骤一:绘制界面。
    新建一个标准EXE工程,将其Caption属性改为“超级记事本”,点击Icon属性给它找个合适的Icon图标。单击菜单“工程”-“部件”,在弹出的“部件”对话框里找到Microsoft RichText Box 6.0和公共对话框Microsoft Common Dialog 6.0并选中它们,单击“确定”按钮。这时左边的工具栏上出现了我们刚才新添的两个控件了。在窗体上绘制RichText Box和Commn Dialog,其中RichText Box的大小和位置可不用理睬,我们将在代码中处理它,当然,有必要把它的ScrollBar属性设为2-rtfVertical,这样在打开和编辑文件时垂直滚动条才可用。

    步骤二:编辑菜单。
    按Ctrl+E调出菜单编辑器,我们来做如下几个菜单:
    一.文件菜单:
    文件(第一层) mnuFile
    新建(第二层) mnuNew
    打开(第二层) mnuOpen
    保存(第二层) mnuSave
    - (第二层) mnuFileSep (分隔线)
    退出(第二层) mnuExit
    二.编辑菜单:
    编辑(第一层) mnuEdit
    复制(第二层) mnuCopy
    剪切(第二层) mnuCut
    粘贴(第二层) mnuPaste
    - (第二层) mnuEditSep (分隔线)
    全选(第二层) mnuSelecAll
    三.搜索菜单:
    搜索(第一层) mnuSearch
    查找(第二层) mnuFind
    查找下一个(第二层) mnuFindOn
    四.帮助菜单:
    帮助(第一层) mnuHelp
    使用说明(第二层) mnuUsage
    关于(第二层) mnuAbout
    (注:各菜单项的快捷键请自行设置)

    好了,其它的菜单项以后再根据需要添加。现在进入:

    步骤三:编写代码。

    ’声明查找变量
    Dim sFind As String
    ’声明文件类型
    Dim FileType, FiType As String

    ’初始化程序
    Private Sub Form_Load()
    ’设置程序启动时的大小
    Me.Height = 6000
    Me.Width = 9000
    End Sub

    ’设置编辑框的位置和大小
    Private Sub Form_Resize()
    On Error Resume Next ’出错处理
    RichTextBox1.Top=20
    RichTextBox1.Left=20
    RichTextBox1.Height = ScaleHeight-40
    RichTextBox1.Width = ScaleWidth-40
    End Sub

    ’新建文件
    Private Sub mnuNew_Click()
    RichTextBox1.Text = "" ’清空文本框
    FileName = "未命名"
    Me.Caption = FileName
    End Sub


    ’打开文件
    Private Sub mnuOpen_Click()
    CommonDialog1.Filter = "文本文档(*.txt)|*.txt|RTF文档(*.rtf)|*.rtf|所有文件(*.*)|*.*"
    CommonDialog1.ShowOpen
    RichTextBox1.Text = "" ’清空文本框
    FileName = CommonDialog1.FileName
    RichTextBox1.LoadFile FileName
    Me.Caption = "超级记事本:" & FileName
    End Sub

    ’保存文件
    Private Sub mnuSave_Click()
    CommonDialog1.Filter = "文本文档(*.txt)|*.txt|RTF文档(*.rtf)|*.rtf|所有文件(*.*)|*.*"
    CommonDialog1.ShowSave
    FileType = CommonDialog1.FileTitle
    FiType = LCase(Right(FileType, 3))
    FileName = CommonDialog1.FileName
    Select Case FiType
    Case "txt"
    RichTextBox1.SaveFile FileName, rtfText
    Case "rtf"
    RichTextBox1.SaveFile FileName, rtfRTF
    Case "*.*"
    RichTextBox1.SaveFile FileName
    End Select
    Me.Caption = "超级记事本:" & FileName
    End Sub

    ’退出
    Private Sub mnuExit_Click()
    End
    End Sub

    ’复制
    Private Sub mnuCopy_Click()
    Clipboard.Clear
    Clipboard.SetText RichTextBox1.SelText
    End Sub

    ’剪切
    Private Sub mnuCut_Click()
    Clipboard.Clear
    Clipboard.SetText RichTextBox1.SelText
    RichTextBox1.SelText = ""
    End Sub

    ’全选
    Private Sub mnuSelectAll_Click()
    RichTextBox1.SelStart = 0
    RichTextBox1.SelLength = Len(RichTextBox1.Text)
    End Sub

    ’粘贴
    Private Sub mnuPaste_Click()
    RichTextBox1.SelText = Clipboard.GetText
    End Sub

    ’查找
    Private Sub mnuFind_Click()
    sFind = InputBox("请输入要查找的字、词:", "查找内容", sFind)
    RichTextBox1.Find sFind
    End Sub

    ’继续查找
    Private Sub mnuFindOn_Click()
    RichTextBox1.SelStart = RichTextBox1.SelStart + RichTextBox1.SelLength + 1
    RichTextBox1.Find sFind, , Len(RichTextBox1)
    End Sub

    ’使用说明
    Private Sub mnuReadme_Click()
    On Error GoTo handler
    RichTextBox1.LoadFile "Readme.txt", rtfText ’请写好Readme.txt文件并存入程序所在文件夹中
    Me.Caption = "超级记事本:" & "使用说明"
    Exit Sub
    handler:
    MsgBox "使用说明文档可能已经被移除,请与作者联系。
  •  1、如果一行程序太长,能不能换行?

      VB的程序代码是允许换行书写的,只要在每次换行的最后一个字符加上换行字符“_”就可以了。例如:SubPicMove()Frm.Picture2.center= Frm.Picture1.center + _’加上换行符Frm.Picture1.WidthEnd Sub

      2、 如何在设计的时候清空存在的图片?

      用鼠标点中该图片,在属性窗口中选中Picture属性,按Del键便可清空图片。

      3、 Visual Basic 如何注释一段较长程序代码?

      VB注释程序代码的符号是“’”,只要在某行程序前面加上“’”,就可以注释该行程序。但如果程序代码很长的时候,一行一行地注释令人觉得难以忍受。VB本身提供了这个功能,在主菜单“视图”选项的“工具栏”下,选中Edit,VB的界面会出现一排工具按钮,其中的手形图标按钮后的两个按钮用于“设置注释块”和“解除注释块”。

      4、怎么实现鼠标一移上去就出现小提示窗口的功能?

      VB 里每个控件都有ToolTipText属性,只要加上一行程序就可以了。

      例如:Label1.ToolTipText = "这是提示!"。1 2 下一页

      advertisement热点推荐挑战下载极限——BT下载腾讯TT浏览器试用手记[设计在线]教程专题精选汇总Linux系统2003年度综述J2ME应用程序开发指南感受腾讯最新版QQ2003III软件图书商城计算机图书新东方英语学习软件卡通mp3音乐软件芝麻开门系列软件

      5、 如何获得当前软件的运行磁盘目录和命令行参数?

      VB里面有个系统对象叫App。App.Path就是当前软件的运行目录。而命令行参数存放在一个系统变量里面,叫Command。程序语句如下:Label1.Caption=App.PathLabel2.Caption=Command$

      6、我想换掉鼠标显示的形状,怎么做?

      VB提供的系统控件一般都有MousePointer和MouseIcon属性。我们可以寻找自己喜欢的*.ICO,*.CUR文件,实现的程序如下:Screen.MousePointer=99’用户鼠标类型Screen.MouseIcon=LoadPicture("C:\ABC\1.ICO")’读取鼠标的图标文件

      7、如何设置程序的错误出口?

      On Error语句用于程序的错误出口处理。一般的处理方法有两种:

      1) 遇到错误跳转到某一行程序去执行,On Error GoTo someline。

      例如:On ErrorGoToERR_LINE...Label1.Caption=“正确执行”ERR_LINE:...Label1.Caption=“出错了!”

      2) 遇到错误之后忽略当前错误,继续执行,On Error Resume Next。

      例如:On Error Resume Next...Label1.Caption=“不管对不对都要执行”...

      8、怎样获得键盘输入和判断敲键的Ascii值?

      把窗体的KeyPreview属性设置成True,然后在Form_KeyPress 事件里编写程序代码如下:PrivateSubForm_KeyPress(KeyAscii As Integer) Me.Caption =Str(KeyAscii)‘取得键盘输入的字符 ...End Sub

      9、我希望窗体一运行就在屏幕的中央,怎么实现?

      VB的系统对象Screen记录了当前显示模式的高度和宽度,可以利用这个值来设置窗体的位置。Sub CenterForm(frmAsForm) ‘定义过程 frm.Move (Screen.width - frm.width) \2,(Screen.border=’1’ Height - frm.border=’1’ Height) \ 2EndSubPrivate SubForm_Load() CenterForm Me ’调用过程End Sub

      10、很多软件都有鼠标在文本框TextBox一按下,就选中所有文字的功能,是怎么实现的?PrivateSubText1_GotFocus() Text1.SelStart = 0 Text1.SelLength=Len(Text1.Text) ’过程调用End Sub






  • border="0" ALT="Google" align="absmiddle">











    免费资源搜索:



    function gowhere1(formname)
    {
    var url;
    if (formname.myselectvalue.value == "0")
    {
    url = "http://www.baidu.com/baidu";
    document.search_form1.tn.value = "baidu";
    formname.method = "get";
    }
    if (formname.myselectvalue.value == "1")
    {
    url = "http://mp3.baidu.com/m";
    document.search_form1.tn.value = "baidump3";
    document.search_form1.ct.value = "134217728";
    document.search_form1.lm.value = "-1";
    }
    if (formname.myselectvalue.value == "2")
    {

    document.search_form1.tn.value = "flash";
    document.search_form1.ct.value = "33554432";
    url = "http://www.baidu.com/f";
    }
    if (formname.myselectvalue.value == "3")
    {
    url = "http://ix.baidu.com/x";
    document.search_form1.tn.value = "baiduwstui";
    document.search_form1.ct.value = "218103808";
    document.search_form1.lm.value = "-1";
    }
    if (formname.myselectvalue.value == "4")
    {
    document.search_form1.tn.value = "news";
    document.search_form1.cl.value = "2";
    document.search_form1.rn.value = "30";
    url = "http://news.baidu.com/ns";
    }
    if (formname.myselectvalue.value == "5")
    {
    document.search_form1.tn.value = "baiduiamge";
    document.search_form1.ct.value = "201326592";
    document.search_form1.cl.value = "2";
    document.search_form1.lm.value = "-1";
    url = "http://image.baidu.com/i";
    }
    if (formname.myselectvalue.value == "6")
    {
    url = "http://post.baidu.com/f";
    document.search_form1.tn.value = "baiduPostSearch";
    document.search_form1.ct.value = "352321536";
    document.search_form1.rn.value = "10";
    document.search_form1.lm.value = "65536";
    }

    formname.action = url;
    return true;
    }















    新闻


    网页

    mp3

  • 手把手学VB——张鸿的VB教室(二)
    广东 张鸿

      学习任何一种语言都不可避免的需要先学习语言的基础知识,对这篇文章也不例外。然则,Visual Basic 语言是建立在 BASIC 语言的基础上的,从 BASIC 语言中发展、延伸出来的,而不是全新的语言。如果我从 BASIC 语言开始讲起,那我想我应该将这一部分写成另一本书。所以读者应先懂得至少一种最基础的计算机语言,至少你应该对一段程序应该怎么写出来有一个概念。而我所能为你做的,就是将 VB 中写程序的基本方法讲给你听。如果你已经有至少一门计算机语言的基础,无论是 BASIC 还是 C 或 PASCAL,你将可以很快进入我的话题,如果你没有,建议你补充一下这方面知识。我认为通过学习 QBasic 这门语言你就可以进入 VB 的学习了。当然这只是我的建议,如果你对自己有充分信心,那么现在就往下看吧。

    1、VB 中的基本变量类型
      VB中最基本的数值变量类型有下面几种:

    Byte:占一个字节的内存,数值表示范围从0到255。
    Currency:占8个字节的内存,称为货币类型。小数点左边可以有15位,右边可以有4位。数值表示范围从-922,337,203,685,477.5808到922,337,203,685,477.5807。
    Double:占8个字节的内存。双精度浮点数值类型。如果用来表示负数,范围是-1.798E308到-4.941E-324,表示正数的范围是4.941E-324到1.797E308。
    Integer:占2个字节的内存。范围从-32768到32767。是最常用的数据类型之一。
    Long:占4字节的内存。范围从-2147483648到2147483647。也是最常用的数据类型之一。
    Single:占4字节的内存。表示负数时,范围是从-3.403E38到-1.401E-45,表示正数时范围是从1.401E-45到3.402823E38。
    Boolean:表示逻辑的布尔型。
    Date:表示日期的类型。
    String:保存字条串的类型。
    Variant:万能类型。
    2、VB 中的变量声明和使用
      在VB中变量需要先声明再使用,这个声明可以由你来写,但是VB可以设置成允许你不写声明,当程序运行时,VB将把你没有声明的变量当成Variant类型的变量。这是一个很不好的设计,因为在这种情况下,所有你没有声明的变量VB都会认为你准备将其声明成一个Variant类型,但是写程序过程中你有可能打错字母,所以作为一种规则,我们都是将VB设置成禁止使用没有经过声明的变量。在VB的Tools菜单中选择Options,你将看到图1的选项设置界面:



    选择图1中红框提示的选项:Require Variable Declaration。现在如果你的变量没有经过声明就使用(或者你打错字了),你将看到图2的错误提示:



      

    到现在为止我们还使用过变量,那么跟着下面的例子看看怎么声明。

      新建一个工程序后,双击窗体设计器中的窗体,你就进入了代码编辑器。在VB自动为你生成的这两代码之间:

    Private Sub Form_Load()End Sub
      输入下面的程序

    Dim a As Integer
    a = 10
    现在的代码编辑器应该是这样了:

    Private Sub Form_Load()
    Dim a As Integer
    a = 10
    End Sub
      如果你现在运行这个程序,VB不会提示任何错误,因为你的程序是正确的。我们看看这两行程序做了什么。
      Dim 是表示声明变量的一个关键字。当你声明一个变量时,你必须按照这一行的格式,Dim 和 As 之间表示变量的名称,As后面表示变量的类型。比如:Dim b As Long 或 Dim c As Double,均是正确的声明方法。
      “=”是VB中赋值符号,当你要改变变量的内容时,可以通过赋值的方法。程序执行过这一行后,a就保存了10这个数值。
      如果你有两个变量,如:

    Dim a As Integer
    Dim b As Integer
    a = 10
    b = 20
      如果你想让b值具有和a相同的值,除了你手工修改使b = 10之外,你也可以改成 b = a,那么无论a的内容变成什么,执行过 b = a之后,b都能保存和a相同的内容。赋值的时候,永远都是“=”左边是被赋值的变量,而右边是一个结果,这个结果可以是数值,也可以是其它变量或一些运算,只要它们合规则。

    3、运算
    算术运算和示例,如下图所示:



    2.比较运算,如下图所示:

    比较运算的结果得到Boolean类型的值:True(真)或 False(假)。

    逻辑运算
      逻辑运算表示了一种逻辑关系,最常用的逻辑运算有3种:NOT、AND、OR。AND表示情况都出现,OR表示情况之一出现,NOT表示情况相反。我想给你几个例子比我费尽力气去说明更有效。
      假如有可能出现这两种情况:你的显示器坏了;你的键盘坏了。
      现在你要使用你的计算机写程序,那你的情况就如下面这样:

      A、你的显示器坏了 AND(而且) 键盘坏了,结果你
  • 2.12 列表框函数(List boX)

    2.12.1 DlgDirList

    函数功能:该函数用与指定的文件名匹配的所有文件的名字填充列表框。
    函数原型:int DlgDirList(HWND hDlg,LPTSTR lpPathSpec,int nlDListBox,int nlDStaticPath,UINT uFileType);
    参数:
    hDlg:包含列表框的对话框句柄。
    loPathSpec:指向包含路径名或文件名的以NULL结尾的字符串指针。DIgDirList修改此串,该串必须有足够的长度来保存修改的内容。关于此参数的更详尽的信息,请看备注部分。
    nlDListBox:定义一个列表框的标示。如果该参数为0,DlgDirList函数认为没有列表框存在,也不试图填充。
    nlDStaticPath:定义用于显示当前驱动器和目录的静态控制的标识符。若此参数为0,DlgDirList认为不存在这样的控制。
    UFileType:定义将要显示的文件名字的属性。该参数必须是一个或多个如下的值:
    DDL_ARCHIyE:包含文档文件。DDL_DIRECTORY:包含于目录。于目录名包含在方括号中。
    DDL_DRIVES:包含驱动器。驱动器以[一X」的形式列出,其中X是驱动器符。
    DDL_EXCLUSIVE:仅包含指定属性的文件。缺省情况下,可读写的文件将被列出,尽管并未指定DDL_READWRITE值。DDL_HIDDEN:包含隐含文件。
    DDL_READONLy:包含只读文件。DDL_READWRITE:包含没有其他附加属性的可读写文件。
    DDL_SYSTEM:包含系统文件。DDL_POSTMSGS:传递消息给应用程序的消息队列。缺省情况下,DlgDirList直接发送消息给对话框过程。
    返回值:若函数调用成功,则返回值不为0。若函数调用失败,则返回值为0。例如,lpPathSpec定义的串不是一个有效路径时,函数将失败。若想获的错误信息,可以调用GetLastError函数。
    备注:若对于lpPathSpec参数定义了一个0长度的串,或者仅定义了一个目录名,而没有文件名,则串被转换为‘.’。
    lpPathSgec参数有如下形式:[drive:][\u]directory[\idirectory]\u][filename]
    在这个例子中,drive是一个驱动器符,directory是一个有效的驱动器名,filename是一个有效的文件名,文件名中必须包含至少一个通配符。
    若lpPathSpec包含一个驱动器或目录名,或同时包含两者,则在列表框被填充以前,当前的驱动器和目录将被改变为指定的驱动器和目录。nlDStaticPath参数标识的静态控制也被用新的驱动器或/和目录名来更新。
    列表框填充以后,DlgDirList通过移去路径和文件名的驱动器和/或目录部分来更新lpPathSpec参数。
    DlgDirList发送LB_RESETCONTENT和LB_DIR消息给列表框。
    速查:Windows NT: 3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Unicode和ANSI两种版本。

    2.12.2 DlgDirSelectEx

    函数功能:该函数从单选列表框中检取当前选择。假定列表框已被DlgDirList函数填充,并且该选择为一个驱动器符,文件名,或目录名。
    函数原型:BOOL DlgDirSelectEx(HWND hDlg,LPTSTR lpString,int nCount,int nlDlistBox);
    参数:
    hDlg:包含列表框的对话框句柄。
    lpString:接受选定的路径的缓冲区指针。
    nCount:定义lpstring指向的缓冲区中的字符串长度。
    NlDListBox:定义对话框中列表框的整数标识符。
    返回值:若当前选择为目录名,则返回值不为0。若当前选择不是目录名,则返回值为0。若要获得更多的错误信息,可调用GetLastError函数。
    备注:DlgDirSelectEx函数把选择拷贝到lpString指向的缓冲区。若当前选择为一目录名或驱动器符,DlgDirSelectEx函数将去掉封闭的方形括号(对于驱动器符;还要去掉连字符),以便于将名字和符号插入到新的路径中。若没有选择,lpString的值不变。
    DlgDirSelectEx发送LB_GETCURSEL和LB_GETTEXT消息到列表框。该函数不允许从列表框返回多个文件名。该列表框一定不能是多选列表框。若为多选框,该函数不返回0值,且lpString的值不变。
    速查:Windows nT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件;winuser.h;库文件:user32.lib; Unicode:在Windows NT上实现为Unicode和ANSI两种版本。

  • 2.11.11 GetKeyState

    函数功能:该函数检取指定虚拟键的状态。该状态指定此键是UP状态,DOWN状态,还是被触发的(开关每次按下此键时进行切换)。
    函数原型:SHORT GetKeyState(int nVirtKey);
    函数:
    nVrtKey:定义一虚拟键。若要求的虚拟键是字母或数字(A~Z,a~z或0~9),nVirtKey必须被置为相应字符的ASCII码值,对于其他的键,nVirtKey必须是一虚拟键码。若使用非英语键盘布局,则取值在ASCIIa~z和0~9的虚拟键被用于定义绝大多数的字符键。例如,对于德语键盘格式,值为ASCII0(OX4F)的虚拟键指的是“0”键,而VK_OEM_1指“带变音的0键”
    返回值:返回值给出了给定虚拟键的状态,状态如下:
    若高序位为1,则键处于DOWN状态,否则为UP状态。
    若低序位为1,则键被触发。例如CAPS LOCK键,被找开时将被触发。若低序位置为0,则键被关闭,且不被触发。触发键在键盘上的指示灯,当键被触发时即亮,键不被触发时即灭。
    备注:当给定线程从它的消息队列中读键消息时,该函数返回的键状态发生改变。该状态井不反映与硬件相关的中断级的状态。使用SetKeyboardState可获取这一信息。
    欲检取所有虚拟键状态信息,可以使用SetKeyboardState函数。
    应用程序可以使用虚拟键码常数VK_SHIFT,VK_CONTROL和VK_MENU作为nVirtKey参数的值。它给出shift,ctrl或alt键的值而不区分左右键,应用程序也可以使用如下的虚拟键码常数作nVirtKey的值来区分前述键的左键、右键的情形。
    VK_LSHIFT,VK_RSHIFT;VK_LCONTROL,VK_RCONTROL;VK_LMENU,VK_RMENU
    仅当应用程序调用GetKeyboardSlate,SetKeyboardState,GetAsyncKeystate;GetKeyState和MapVirtualKey函数时,才可用这些区分左右键的常数。
    Windows CE:GetKeyState函数仅能用于检查如下虚拟键的DOWN状态。
    VK_LSHIFT,VKRSHIFT,VK_LCONTROL;VK_RCONTROL;VK_LMENU,VK_RMENU
    GetKeyState函数只能用于检查VK_CAPITAL虚拟键的触发状态。
    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.I及以上版本;头文件:winuser.h;库文件:user32.lib。

    2.11.12 IsWindowEnabled

    函数功能:该函数用于判断指定的窗口是否允许接受键盘或鼠标输入。
    函数原型:BOOL IsWindowEnabled(HWND hWnd);
    参数:
    hWnd:被测试的窗口句柄。
    返回值:若窗口允许接受键盘或鼠标输入,则返回非0值,若窗口不允许接受键盘或鼠标输入,则返回值为0。
    备注:子窗口只有在被允许并且可见时才可接受输入。
    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winuser.h;库文件:user32.lib。

    2.11.13 keybd_event

    函数功能:该函数合成一次击键事件。系统可使用这种合成的击键事件来产生WM_KEYUP或WM_KEYDOWN消息,键盘驱动程序的中断处理程序调用keybd_event函数。在Windows NT中该函数己被使用Sendlhput来替代它。
    函数原型;VOID keybd_event(BYTE bVk,BYTE bScan,DWORD dwFlags,DWORD dwExtralnfo);
    参数:
    bVk:定义一个虚据拟键码。键码值必须在1~254之间。
    bScan:定义该键的硬件扫描码。
    dwFlags:定义函数操作的名个方面的一个标志位集。应用程序可使用如下一些预定义常数的组合设置标志位。
    KEYEVENTF_EXETENDEDKEY:若指定该值,则扫描码前一个值为OXEO(224)的前缀字节。DEYEVENTF_KEYUP:若指定该值,该键将被释放;若未指定该值,该键交被接下。dwExtralnfo:定义与击键相关的附加的32位值。
    返回值:该函数无返回值。
    备注:尽管keybd_event传递一个与OEM相关的硬件扫描码给系统,但应用程序不能用此扫描码。系统在内部将扫描码转换成虚拟键码,并且在传送给应用程序前清除键码的UP/down位。
    应用程序可以摸拟PRINTSCREEN键的按下来获得一个屏幕快照,并把它存放到剪切板中。若要做到这一点,则要将keybd_event的bVk参数置为VK_SNAPSHOT,bScan参数置为0(用以获得全屏快照)或hScan置为1(仅获得活动窗口的快照)。
    Windows CE:WindowsCE支持dwFlags参数附加的标志位。即使用KEYEVENTF_SILENT标志模拟击键,而不产生敲击的声音。Windows CE不支持KEYEVENTF_EXTENDEDKEY标志。
    速查:Windows NT:3.1及以上版本;Windows:95及以上版本 ;Windows CE:1.0及以上版本;头文件:winuser.h;库文件:user32.lib。

    2.11.14 LoadKeyboardLayout

    函数功能:该函数给系统中装入一种新的键盘布局,可以同时装入几种不同的键盘布局,任一时刻仅有一个进程是活动的,装入多个键盘布局使得在多种布局间快速切换。
    函数原型:HKLLoadKeyboardLayout(LPCTSTR pwszKLID,UINT Flags);
    参数:
    pwszKLID:缓冲区中的存放装入的键盘布局名称,名称是由语言标识符(低位字)和设备标识符(高位字)组成的十六进制值串,例如 U.S.英语对应的语言标识符为DX0409,则基本的U.S.英语键盘布局命名为“0000409”。U.S.英语键盘布局的变种(例如Dvorak布局)命名为“00010409”,“00020409”等。
    Flags
  • 2.11 键盘输入函数(Keyboard Input)


    2.11.1 ActivateKeyboadLayout

    函数功能:激活键盘布局。该函数Windows NT和Windows 95中的实现有很大不同。本参考页中首先给出了完整的Windows NT的实现,下来又给出了Windows 95版本的实现,以便大家更好地了解二者的区别。
    在Windows NT中ActivateKeyboadLayout函数激活一种不同的键盘布局,同时在整个系统中而不仅仅是调用该函数的进程中将该键盘布局设为活动的。
    函数原型:HKL ActivateKeyboardLayout( HKL hkl,UINT Flags);
    参数:
    hkl:将被激活的键盘布局的句柄。该布局必须先调用LeadKeyboadLayout函数装入,该参数必须是键盘分局的句柄,或是如下的值中的一种:
    HKL_NEXT:在系统保持的,己装入的布局的循环链表中,选择下一布局。
    HKL_PREV:在系统保持的,已装入的布局的循环链表中,选择前一布局。
    Flags:定义键盘布局如何被激活。该参数可取如下的一些值:
    LFREORDER:若该位被设置,则已装入的键盘布局的循环链路表将被重新排序。若该位没有设置,则循环链路表的顺序不变。例如,若用户激活了英语键盘布局,同时依序装入了法语、德语、西班牙语键盘布局,然后通过设置KLF_REORDE位激活德语键盘布局,则会产生如下顺序:德语、英语、法语、西牙语键盘布局。若激活德语键盘布局时未设置KLF_REORDER位,则产生如下的键盘布局的键盘布局序列:德语、西班牙语、英语、法语。若装入的键盘布局少于三种,则该标志域的值不起作用。
    KLF_SETFORPROCESS:在Windows NT 5.0以上版本中使用。该参数用于整个进程中激活指定的键盘布,并向当前进程的所有线程发送WM_INPUTLANGCHANGE消息。
    KLF_UNLOADPREVLOUS:卸载先前活动的键盘布局。
    返回值:如果函数调用成功,返回值为前一键盘布局的句柄。否则,返回值为零。若要获得更多多错误信息,可调用GetLastError函数。
    备注:在任一时刻可以装入多种键盘布局,但一次仅能激活一种布局。装入多种键盘布局使得可以快速地在多种布局之间切换。Windows 95 ACtivateKeyboadLayout函数为当前线程设置输入语言。该函数接受一个键盘布局句柄,该句柄标识键盘的一个局部的和物理布局。
    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:winuser.h;库文件:user32.lib。

    2.11.2 EnableWindow

    函数功能:该函数允许/禁止指定的窗口或控制接受鼠标和键盘的输入,当输入被禁止时,窗口不响应鼠标和按键的输入,输入允许时,窗口接受所有的输入。
    函数原型:BOOL EnableWindow(HWND hWnd,BOOL bEnable);
    参数:
    hWnd:被允许/禁止的窗口句柄。
    bEnable:定义窗口是被允许,还是被禁止。若该参数为TRUE,则窗口被允许。若该参数为FALSE,则窗口被禁止。
    返回值:如果窗口原来是被禁止的,返回值不为零;如果窗口原来不是被禁止的,返回值为零。若想获得更多的错误信息,可调用GetLastError函数。
    备注:若窗口的允许状态将发生变化,WM_ENABLE消息将在Enblewindow函数返回前发送出去,若窗口已已被禁止,它所有的子窗口也被禁止,仅管并未向子窗口发送WM_ENABLE消息。
    窗口被激活前必须处于允许状态。比如,一个应用程序将显示一个无模式对话框并且已使该对话框的主窗口处于禁止状态,则在撤消该对话框之前须使其主窗口处于允许状态。否则,其他窗口将接受并被少活。若子窗口被禁止,则系统决定由哪个窗口接受鼠标消息时将忽略该窗口。
    缺省情况下,窗口被创建时被置为允许。若创建一个初始化为禁止状态的窗口,应用程序需要在GeateWindow或GeateWindowEX函数中定义WS_DOSABLED样式。窗口创建后,应用程序可用EnbleWindow来允许禁止窗口。
    应用程序可利用此函数允许/禁止对话框中的某个控制。被禁止的控制既不能接受键盘输入,也不能被用户访问。
    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:Winuser.h;库文件:user32.lib。

    2.11.3 GetActiveWindows

    函数功能:该函数可以获得与调用线程的消息队列相关的活动窗口的窗口句柄。
    函数原型:HWND GetActiveWindow(VOID)
    参数:无。
    返回值:返回值是与调用线程的消息队列相关的活动窗口的句柄。否则,返回值为NULL。
    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winser.h; 库文件:user32.lib。

    2.11.4 GetAsyncKeyState

    函数功能:该函数用于确定函数被调用时,相应按键是处于按下状态,还是处于弹起状态;并且按下此键前否调用过GetAsyncKeystate函数。
    函数原型:SHORT GetAyncKeystate(int vKey);
    参数:
    vKey:定义虚拟键码(若有256个虚拟键码)。欲获得更多信息,参看Virtual_Key Codes。在Windows NT中可以使用左右键区分常量来定义某些键。欲获得更多信息,参看备注部分。
    返回值:若函数调用成功,返回值给出了自最后一次调用GetAsyncKeyStat。以来,指定的键是否处于按下状态,并且确定了该键目前是按下或是被弹起。若最高位被置为1,
  • 2.10 键盘加速器函数(Keyboard Accelerator)


    2.10.1 CopyAcceleratorTable

    函数功能:拷贝加速键表。拷贝加速键表函数拷贝指定的加速键表。此函数用于获得与一加速键表句柄相对应的加速键表数据,或用于确定加速键表数据的大小。
    函数原型:int CopyAcceleratorTable(HACCEL hAccelSrc,LPACCEL IpAcceIDst,int cAccelEntries);
    参数:
    hAccelSrc:欲拷贝的加速键表的句柄。
    IpAccelDst:指向ACCEL结构数组的指针,该结构数组中存在着将要拷贝的加速键表信息。
    cAccelEntries:指定由IpAcceIDst参数指向的欲拷贝到缓冲区的ACCEL结构的个数。
    返回值:如果IpAccelDst为空,则返回值给出初始加速键表入口的个数。否则,给出己拷贝的加速键表的入口个数。
    速查:WindOWS NT:3.1及以上版本:Windows:95及以上版本;Windows CE:不支持;头文件:Winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Unicode和ANSI两种版本。

    2.10.2 CreateAcceleratorTable

    函数功能:创建加速键表。该函数创建一个加速键表。
    函数原型:HACCEL CreateAcceleratorTable(LPACCEL lpaccl,int cEntries);
    参数:
    Ipaccl:指向描述加速键表的ACCEL结构数组的指针。
    cEntires:指定数组中ACCEL结构的个数。
    返回值:如果函数调用成功,则返回值为所创建的加速键表的句柄;否则,返回值为空。若想获得更多的错误信息,请调用GetLastError。
    备注:关闭应用程序之前,必须调用DestroyAcceeleratorTable函数撤消所有由CreatedAccelerstorTable函数创建的加速键表。
    速查:Windows NT:3.1u及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本:头文件:winuser.h;库文件:USer32.lib; Unicode:在Windows NT上实现为Unicode和ANSI两种版本。

    2.10.3 DestroyAcceleratorTable

    函数功能:撤消加速键表。该函数撤消一个加速键表。在关闭应用程序之前,必须使用该函数撤消所有由DestroyAcceleratorTable函数创建的加速键表。
    函数原型: BOOL DestroyAcceleratorTable(HACCEL hAccel);
    参数:
    hAccdel:将被撤消的加速键表的句柄。该句柄必须己通过调用DestroyAcceleratorTable 函数而创建。
    返回值:若函数调用成功,则返回非零值,若函数调用失败,则返回值为零。若要获得更多的错误信息,可以调用GetLastError函数。
    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:Windows.h;库文件:user32.lib。

    2.10.4 LoadAccelerators

    函数功能:调入加速键表。该函数调入指定的加速键表。
    函数原型:HACCEL LoadAccelerators(HINSTANCE hlnstance,LPCTSTR lpTableName);
    参数:
    hlnstance:模块的一个事例的句柄,该模块的可执行文件中包含将要调入的加速键表。
    IpTableName:指向一个以空结尾的字符串的指针,该字符串包含了即将调入的加速键表的名字。另一种可选的方案是,该参数可以在加速键表资源的低位字中指定资源标识符,而高位字中全零。MADEINTRESOURCE宏可被用于创建该值。
    返回值:若函数调用成功,则返回非零值。若函数调用失败,则返回值为零。若要获得更多的错误信息,可以调用GetLastError函数。
    备注:若加速键表尚未装入,该函数可从指定的可执行文件中将它装入。从资源中装入的加速键表,在程序结束时可自动释放。Windows CE:资源不被拷贝到RAM中,因而不能被修改。
    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winuser.h;库文件:user32.lib;Uncode:在Windows NT上实现为Unicode和ANSI两种版本。

    2.10.5 TranslateAccelerator

    函数功能:翻译加速键表。该函数处理菜单命令中的加速键。该函数将一个WM-DEYDOUN或WM-SYSDEYDOWN消息翻译或一个WM-COMMAND或WM-SYSCOMMAND消息(如果在给定的加速键表中有该键的入口),然后将WM-COMMAND或WM-SYSCOMMAND消息直接送到相应的窗口处理过程。
    TranslateAccelerator直到窗口过程处理完消息后才返回。
    函数原型:int TranslateAccelerator(HWND hWnd,HACCEL hAccTable,LPMSG IpMsg);
    参数:
    hWnd:窗口句柄,该窗口的消息将被翻译。
    hAccTable:加速键表句柄。加速键表必须由LoadAccelerators函数调用装入或由CreateAccd_eratorTable函数调用创建。
    LpMsg:MSG结构指针,MSG结构中包含了从使用GetMessage或PeekMessage函数调用线程消息队列中得到的消息内容。
    返回值:若函数调用成功,则返回非零值;若函数调用失败,则返回值为零。若要获得更多的错误信息,可调用GetLastError函数。
    备注:为了将该函数发送的消息与菜单或控制发送的消息区别开来,使WM_COMMAND或WM_SYSCOMMAND消息的wParam参数的高位字值为1。用于从窗口菜单中选择菜单项的加速键组合被翻译成WM-SYSCOMMAND消息:所有其他的加速键组合被翻译成WM-COMMAND。若TransLateAccelerator返回非零值且消息已被翻译,应用程序就不能调用TranslateMessage函数对消息再做处理。每个加速键不一定都对应于菜单命令。
  • 2.8 编辑控制函数(Edit Control)


    2.8.1 EditWordBreakproc

    函数功能:该函数是由应用程序定义的回调函数,该函数与EM_SETWORDBREAKPROC信号一起使用,一个多行编辑控制每当必须中断文本行时都调用EditwordBreakProc函数。EditwordBreakProc函数定义了一个指向此回调函数的指针,EditwordBreakProc是一个应用程序定义的函数名的占位符。
    函数原型:int CALLBACK EditWordBreakkPrOC(LPTSTR lpCh,int ichCurrent,int CCh int code);
    参数;
    Ipch:指向编辑控制文本的指针。
    ichCurrent:指定一个文本缓冲区中字符位置的索引,该文本表示函数应该从这点开始检查字的中断。
    cch:指定编辑控制文本中字符的数目。
    code:指定回调函数要采取的措施,此参数可以是下列值之一。
    WB_CLASSIFY:检索指定位置的字符的字中断标志和字符类,此值是为与超文本编辑控制一起使用。
    WB_ISDECIMITER:检查在指定位置的字符是否是分隔符。
    WB_LEFT:在指定位置的左边,找到字的开头。
    WB_LEFTBREAK:在指定位置的左边,找到字的结束分隔符,此值是为与超文本编辑控制一起使用。
    WB_MOVEWORDLEFT:在指定位置的左边,找到字的开头,此值用于CTRL+RIGHT使用时,此值是为与超文本编辑控制一起使用。
    WB_MOVEWDRDRIGHT:在指定位置的右边,找到字的开头,此值用于CTRL+ROGHT使用时,此值是为与超文本编辑控制一起使用。
    WB_RIGHT:在指定位置的右边,找到字的开头。(对于右对齐编辑控制很有用)
    WB_RIGHTBREAK:在指定位置的右边找到字结束分隔符,(这对右对齐编辑控制很有用)此值是为与超文本编辑控制一起使用。
    返回值:如果代码参数指定WB_ISDELIMITER,且如果指定位置的字符为分隔符,则返回值为非零(TRUE),否则返回值为零。如果代码参数指定WB_CLASSIFY,返回值为指定位置的字符类和字符字中断标志,否则,返回值为指向文本缓冲区的开头的索引。
    备注:一个回车操作跟着一个换行符,一定被回调函数看作为一个单一的字,紧跟着一个换行符的两个回车操作也一定被看作为单一字。
    一个应用程序必须通过EM_SETWORDBREAKPROC消息中指定回调函数的地址来安装回调函数。
    对于超文本编辑控制,也可用EM_SETWORDBREAKPROCEX消息来取代带有EditWordBreadProcEx回调函数的缺省扩展字中断程序,该函数还提供了关于文本的其他信息,如字符集。
    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:winuser.h;库文件:用户自定义。Unicode:定义为Unicode和ANSI两种原型。

    2.9 图标函数(Icon)

    2.9.1 Copylcon

    函数功能:该函数从另外的模块向当前模块复制指定的图标。
    函数原型:HICON Copylcon(HICON hlcon);
    参数:
    hlcom:被复制图标的句柄。
    返回值:如果函数成功,返回值是图标副本的句柄;如果函数失效,返回值是NULL。想获得更多的错误信息,请调用GetLastError函数。
    备注:COPylcoon函数使应用程序或动态链接库(DLL)能获得另一个模块自己拥有图标的句柄,如果这个模块被释放,应用程序图标将仍然能使用这个图标。
    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:winuser.h;库文件:user32.lib。

    2.9.2 Createlcon

    函数功能:该函数按指定的大小、彩色、位创建图标。
    函数原型:HCON Createlcon(HINSTANCE hlnstance,int nWidth,int nHeight,BYTE cPlanes,BYTE cBitsPixe,CONSTBYTE*IpbANDbits,CONST BYET*IpbXORbits);
    参数:
    hlnstance:创建图标模块事例的句柄。
    nWidth:指定目标宽度(像素)。
    nHeight:指定图标高度(像素)。
    cPlnes:指定图标位掩码异或的位面数。
    cBitsPixel:指定图标位掩码异或中每像素的位数。
    IpbAnDbits:某字节数组的指针,这个数组包含一个图标位与的位值。这个位掩码描述一个单色位图。
    IpbXORbits:某字节数组的指针,这个数组包含一个目标位异或的位值。这个位掩码描述一个单色位图或设备相关颜色位图。
    返回值:如果函数成功返回值是图标的句柄。如果函数失效,返回值是NULL。想获得更多的错误信息,请调用GetLastError函数。
    备注: nWidth和nHeight参数受当前显示驱动程序指定的宽度和高度限制,因为系统不能创建其他大小的图标。使用GetSystemMetric函数确定显示驱动程序支持的宽度和高度。
    Createlcon应用下列位与和位异或的真值表:
    OR XOR 显示
    0 0 黑色
    0 1 白色
    1 0 直接显示屏
    1 1 反转显示屏
    速查:windows NT:3.1及以上版本;Windows:95N以上版本:Windows CE:不支持;头文件:winuser.h;库文件:user32.lib。

    2.9.3 CreatelconFromResource

    函数功能:该函数通过描述图标的资源位创建图标或光标。
    函数原型:HICON CreatelconFuomResource(PBYTE presbits,DWORD dwResSize,BOOL flcon,DWORD dwVer);
    DresDits:包含图标或光标资源位缓冲区的指针典型应用,可通过调用LOOKuplconldFromDirectory 或LoadResource 函数载入这些位(在Windows95也可调用LookuplconldFromDirectorvEx)。
    Dw
  • 2.7.11 EndDialog

    函数功能:该函数清除一个模态对话框,并使系统中止对对话框的任何处理。
    函数原型:BOOL EndDialog(HWND hDlg,int nResult);
    参数:
    hDlg:表示要被清除的对话框窗口。
    NResult:指定从创建对话框函数返回到应用程序的值。
    返回值:如果函数调用成功,则返回值为非零值;如果函数调用失败则返回值为零。若想获得错误信息请调用GetLastError函数。
    备注:由DialogBox,DialogBoxParam、DialogBoxlndirect和DialogBoxlndirectParam函数创建的对话框一定要用EndDialog函数来清除。应用程序从对话框应用程序内部调用EndDialog函数,该函数不能为其他目的而供使用。
    对话框应用程序可以在任何时间调用EndDialog函数;甚至在WM_INITDIALOG消息处理过程中。如果应用程序在WM_INTDIALOG消息处理过程中调用该函数,则对话框在显示和输入焦点被设置之前对话框被清除。
    EndDialog函数并不立即清除对话框。而是设置一个标志,并且允许对话框应用程序把控制权返回系统。系统在试图从应用程序队列检索下一个消息之前检测标志。如果已经设置了标志则系统中止消息循环,清除对话框,且用nResUlt中的值作为从创建对话框的函数中返回的值。
    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winuser.h;库文件:user32.lib。

    2.7.12 GetDialogBaseUnits

    函数功能:该函数返回系统的对话基本单位,该基本单位为系统字体字符的平均宽度和高度。对于使用系统字体的对话框,可以用这些值在对话框模板之间转换,比如在对话框模板和像素之间。对于不使用系统字体的对话框,从对话框模板单位到像素的转换要根据对话框使用的字体而定。对于对话框的其中一种类型用MaPDialogRect函数很容易地来执行转换,MaPDialogRect考虑字体且正确的把一个长方形模板单位转换
    为此像素。
    函数原型:LONG GetDialogBaseUnits(VOID);
    参数:无。
    返回值:返回值为一个32位的含有对话基本单位的值。返回值的低位字含有水平对话框基本单位,且高低位字含有垂直对话框基本单位。
    备注:GetDialogBaseUnits函数返回的水平基本单位同系统字体中字符以像素为单位的平均宽度相等;垂直基本单位同系统字体中字符的以像素为单位的平均高度相等;
    对于一个没有使用系统字体的对话框基本单位相等于对话框字体字符以像素为单位的平均宽度和平均高度。可以用GetTextMetrics和GetTextExtentPoint32函数为一个选择的字体来计算这些值。但是,如果计算结果与那些通过系统执行的值不同,那么可以用MapDialogRect函数避免可能发生的错误。
    每一个水平基本单位同四个水平对话框模板单位相等;每一个垂直基本单位同八个垂直对话框模板单位相等。所以用下列公式来把对话框模板单位转换为像素:
    PiselX=(temptateunitX★baseunitX)/4;PiseIY=(templateunitY★baseunitY)/8
    同样地.用下列公式来把像素转换为对话框模板单位:
    templateunitX=(pixelX★4)/baseunitX;templateunitY=(plxelY★8)/baseunitY
    Windows CE:Windows CE不支持此函数的任何一个扩展的错误值。
    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows:1.0及以上版本;头文件:Winuser.h;库文件:user32.lib

    2.7.13 GetDigCtrllD

    函数功能:该函数返回指定控制的标识符。
    函数原型:Int GetDlgCtrllD(HWND hwndCtl);
    参数:
    hwndCtl:标识控制的句柄。
    返回值:如果函数调用成功,则返回值为控制的标识符,如果函数调用失败,则返回值为零。例如,hwndCtl参数的一个无效的值将导致函数失败。若想获得更多错误信息,请调用GetLastError函数。
    备注:GetDlgCtrllD函数接收子窗口句柄和对话框中的控制句柄。当应用程序调用CreateWindow或CreateWindowEx函数,通过把标识符的值设置为hmenu参数来创建窗口时,应用程序为了窗口句柄设置标识符。
    如果hwndCtrl标识一个顶层窗口尽管GetDlgCtrllD可以返回一个值,但顶层窗口不能有标识符且这样的返回值从不生效。windows CE:标识符仅对子窗口有效。标识符叫以通过把作为hwndCtrl参数中的标识符传递到CreatewindowEx函数来设置,它也可以通过调用带有设置为GWL_ID的nlndex参数的SetwindowLong和GetWindowLong函数来设置和检索。
    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winuser.h;库文件:user32.lib。

    2.7.14 GetDigltem

    函数功能:该函数检索指定的对话框中的控制句柄。
    函数原型:HWND GetDlgltem(HWND hDlg,int nlDDlgltem);
    参数:
    hDlg:标识含有控制的对话框。
    nlDDlgltem:指定将被检索的控制标识符。
    返回值:如果函数调用成功则返回值为给定控制的窗口句柄。如果函数调用失败,则返回值为NULL,表示为一个无效的对话框句柄或一个不存在的控制。若想获得更多错误信息,请调用GetLastError函数。
    备注:可以通过使用任何父子窗口对来使用GetDlgltem函数,而不仅只是对话框。只要hDlg参数指定一个父窗口,且子窗口有一个独立的
  • 2.7对话框函数Dialog Box

    2.7.1 CreateDialog

    函数功能:CreateDialog宏从一个对话框模板资源创建一个无模式的对话框,CreateDiaog宏使用CreateDialogParam函数。
    函数原型:HWND CreateDialog(HINSTANCE hlnstance,LPCTSTR lpTemplate,HWND hWndParent,DLGPROC IpDialogFunc);
    参数:
    hlnstance:标识模块事例,该模块的可执行文件含有对话框模板。
    pTemplate: 标识对话框模板,此参数或是指向一个以结尾的字符串指针,该字符串指定对话框模板名,或是指定对话框模板的资源标识符的一个整型值。如果此参数指定了一个资源标识符,则它的高位字一定为零,且低位字一定含有标识符,一定用MAKEINTRESOURCE宏来创建此值。
    hWndParent: 标识拥有对话框的窗口。
    lpDialogFunc: 指向对话框应用程序的指针。有关更多的对话框应用程序的指针,参见DialogProc。
    返回值:如果函数调用成功,则返回值为指向对话框的句柄;如果函数调用失败,则返回值为NULL。若想获得更多的错误信息,可调用GetLastError函数。
    备注: CreateDialog函数用CreateWindowEx函数来创建对话框。然后CreateDialog函数把一个WM_INITDIALOG消息(如果模板指定DS_SETFONT类型,则加上一个WM_SETFONT消息)传送到对话框应用程序。如果模板指定WS_VISIBLE风格,则函数显示对话框,最后CreateDlalog返回指向对话框的窗口句柄。
    CreateDialog函数返回之后,应用程序通过Showwindow函数显示对话框(如果还没有显示)。应用程序通过利用DestroyWindow函数来清除对话框。
    Windows 95和以后版本:系统每个对话框模板可以支持最多达 255个控制。如果要把多于255个控制放入对话框中,必须在WM_INITDIALOG消息处理器中创建控制,而不是把它们放入模板中。
    Windows CE:IpTempIate参数指向的对话框模板中,DIGTEMPLATE结构并不支持所有类型。
    速查:Windows NT:3.1及以上版本:Windows:95及以上版本:Windows CE:1.0及以上版本:头文件:Winuser.h;库文件:user32.lib; Unicode: Unicode:在 Windows NT上实现为 Unicode和ANSI两种版本。

    27.2 CreateDialoglndirect

    函数功能:该宏在内存中从对话框模板上创建一个无模式对话框。此宏使用CreateDialoglndirectparam 函数。
    函数原型:HWND CreateDialoglndirect(HINSTANCE hlnstance,LPCDLGTEMPLATE IPTemplate,HWNDhWndParent,DLGPROC IPDialogFunc);
    参数:
    hlnstance: 标识创建对话框的模块的事例。
    IPTemplate: 指向含有一个模板的全局内存对象的指针。CreateDialoglndirect用此模板创建对话框。对话框模板由描述对话框的标题组成,跟随着标题之后的是描述每一个控制的一个或多个数据块,模板可以用标准格式或扩展格式。
    在标准模板中,标题是由DLGTEMPLATE结构跟随一个变长数组组成。每个控制的数据是由DLGTEMPLATE结构跟随一个变长数组组成。
    在扩展模板中,标题用DLGTEMPLATEEX格式,且控制定义用DLGITEMPLATEEX格式。CreatDialoglndirect函数返回后,可释放模板,此模板仅用于启动对话框。
    hWndParent: 标识拥有对话框的窗口。
    IpDialogFunc:指向对话框应用程序的指针,有关更多的对话框应用程序的指针,参见DialogProc。
    返回值:如果函数调用成功,则返回值为指向对话框的句柄。如果函数调用失败,则返回值为NULL。若想获得更多错误信息,可调用GetLastError函数。
    备注:CreateDialOglndirect宏使用CreateWindowEx函数来创建对话框,然后该函数把一个WM_INITDIALOG消息发送到对话框应用程序,如果模板指定DS_SETFONT类型,则函数也把一个WM_SETFONT消息发送到对话框应用程序。如果模板指定WS_VISIBLE类型,则函数显示对话框,最后CreateDialoglndirect返回
    指向对话框的窗口句柄。
    CreateDialoglndirect函数返回之后,可用 ShowWindow函数来显示对话框(如果还没有显示)。用DestroyWindow函数来清除对话框。
    在标准对话框模板中,DLGTEMPLATE结构和每一个DLGITEMTEMPLATE结构必须按DWORD边界对齐,遵循DLGEMTEPLATE结构而创建的数据数组也一定按DWORD边界对齐。模板中其他所有变长数组一定要按DWORD边界进行调整。
    在扩展对话框模板上DLGTEMPLATEEX结构和每一个DLGITEMTEMPLATEEX结构必须按DWORD边界对齐;遵循DLGEMTEPLATE结构而创建的数据数组也一定按DWORD边界对齐。模板中其他所有变长数组一定要按DWORD边界进行调整。
    所有对话框模板的字符串,例如对话框和按钮的标题,一定是Unicode字符串。使用
    MltiByteToWidechar函数产生这些Unicode字符串可以创建在Windows和Windows NT两种系统上工作的代码。
    Windows 95和以后版本:系统可支持每个对话框模板最多为255个控制。为把多于255个控制放入对话框,可以在WM_INITDLAIOG消息处理器中创建控制,而不是把它们放入模板中。
    Windows CE:lpTempate参数指向的对话框模板中,DLGTEMPLATE结构并不支持所有的类型。
    速查:Windows NT:3.1 及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:Winuser.h;库文件:user32.l
  • 2.6 标函数(Cursor)

    2.6.1 ClipCursor

    函数功能;该函数把光标限制在屏幕上的一个矩形区域内,如果调用SetCursor或用鼠标设置的一个随后的光标位置在该矩形区域的外面,则系统自动调整该位置以保持光标在矩形区域之内。
    函数原型:BOOL CliepCursor(CONST RECT★ lpRect);
    参数:
    IpRect:指向RECT结构的指针,该结构包含限制矩形区域左上角和右下角的屏幕坐标,如果该指针为NULL(空),则光标可以在屏幕的任何区域移动。
    返回值:如果成功,返回值非零;如果失败,返回值为零。若想获得更多错误信息,请调用GetLastError。
    备注:光标是一个共享资源,如果一个应用控制了光标,在将控制转向另一个应用之前,必须要使用ClipCursor来释放光标,该调用过程必须具有对窗口的WINSTA_WRITEATTRIBUTES访问权。
    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:winuser.h;库文件;user32.lib。

    2.6.2 CopyCursor

    函数功能:该函数复制一光标。
    函数原型:HCURSOR CopyCursor(HCURSOR pcur);
    参数:
    pcur:被复制光标的句柄
    返回值;如果成功,返回值是复制光标的句柄;如果失败,返回值为NULL(空)。若想获得更多错误信息,请调用GetLastError函数。
    备注;CopyCursor函数能使一个应用程序或一个动态连接库(OLL)得到一个属于另一模块的光标形状的句柄。如果另外一个模块被释放,则该应用程序仍然可以使用该光标形状。
    在关闭之前,一个应用程序必须调用DestroyCursor函数来释放任何与该光标有关的系统资源。
    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:winuser.h;库文件:user32.lib

    2.6.3 CreateCursor

    函数功能:该函数创建一个指定大小、位模式和热点的光标。
    函数原型:HCURSOR CreateCursor(HINSTANCE htnst,int xHotSpot;int yHotSpot;int nWidth;iut nHeight,CONST VOID ★pvANDPlane,CONST VOID ★pvXORPlane);
    参数:
    hlnst:创建光标的应用程序的当前事例句柄。
    xHotSpot:指定光标热点的水平位置。
    yHotSpot:指定光标热点的垂直位置。
    nWidth:以像素为单位指定光标的宽度。
    nHeight:以像素为单位指定光标的高度。
    pvANDPlane:指向一个字节数组的指针,该数组包含光标AND掩码的位值,就象设备相关的单色位图一样。
    pvXORPlane:指向一个字节数组的指针,该数组包含光标XOR掩码的位值,就象设备相关的单色位图一样。
    返回值:如果成功,返回光标的值;如果失败,返回值为NULL(空),若想获得更多错误信息,调用GetLastError函数。
    备注:nWidth和nHeight参数必须指定一个当前显示驱动支持的宽度和高度,因为系统不能创建一个其他尺寸的光标,为了确定显示驱动所支持的宽度和高度,请使用GetSystemMetrics函数,指定SM_CXCUROR或SM_CYCURSOR值。
    在一个应用程序关闭之前,必须调用DestroyCursor函数来释放与光标有关的任何系统资源。
    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:winuser.h;库文件:user32.lib。

    2.6.4 DestroyCursor

    函数功能:该函数销毁一个光标并释放它占用的任何内存,不要使用该函数去消毁一个共享光标。
    函数原型:8OOL DestroyCUrsor(HCURSOR hCursor);
    参数:
    hCursor:要销毁的光标的句柄,该光标必须不在使用中。
    返回值:如果成功,返回非零;如果失败,返回值为零,若想获得更多错误信息,请调用GetLastError函数。
    备注:DestroyCursor函数销毁一个非共享的光标;不要用它销毁一个共享光标。一个共享光标只要调用它的模块仍在内存中,则该共享光标还是有效的,下面的函数可得到一个共享光标:LoadCursor;LoadCursorFronFile;Loadlmage(如果使用LR-SHARED标志);
    Copylmage(如果使用LR_COPYRETURORG标志并且hlmags参数是一个共享光标)。
    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:winuser.h;库文件:user32.lib。

    2.6.5 GetClipCursor

    函数功能:该函数检取一个矩形区域的屏幕坐标,光标被限制在该矩形区域之内。
    函数原型:BOOL GetClipCursor(LPRECT IpRect);
    参数:
    IpRect:一个RECT结构的指针;接收限制矩形的屏幕坐标。如果该光标没有被限制在一个矩形区域内,则该RECT结构接收屏幕的尺寸。
    返回值:如果成功,返回非零;如果失败,返回值为零,若想获得更多错误信息,请调用GetLastError函数。
    备注:该光标是一个共享光标,如果一个应用程序使用ClipCursor函数来限制该光标,那么在它放弃控制转向另一个应用之前必须使用ClipCursor来释放该光标,该调用过程必须具有对窗口站的WINSTA_READATTRIBUTES访问权限。
    速查:Windows NT:3.1及以上下版本;Windows:95及以上版本;Windows CE:不支持;头文件:Winusre.h;库文件:user32。lib。

    2.6.6 GetCursor

    函数功能:该函数检取当前光标的句柄。
    函数原型:HCURSOR GetCursor(VOID);
    参数
  • 2.5.10 PrintdlgEx

    函数功能:该函数显示一个Print属性页。该属性页使用户指定特定的打印工作的特性,一个Print属性页有一个控制的General页。该控制与Print中的对话框相似。属性页也有另外紧随General页的指定的应用程序和指定的驱动器特性页。
    函数原型:HRESULT PrintDlgEx(LPPRINTDLGEX Ippd);
    参数:
    Ippd:指向一个包括初始化属性页信息的PRINTDLGEX结构。当PrintDlgEx函数返回时,此结构含有关于用户选择的信息。
    返回值:如果函数调用成功,返回值为S_OK,且PRINTDLGEX结构中的dw ResuhltAction成员含有下列值:
    PD_RESULT_APPLY:用户点击Apply按钮,然后点击Cancel按钮,这显示出用户想应用在属性页中做的改变,但还不想打印。当Apply按钮被点击时,PRINTDLGEX结构包含用户指定的信息。
    PD_RESUCT_CANCEI:用户点击Cancel按钮,PRINTDLGEX结构中的信息未被改变。
    PD_RESUCT_PRINT:用户点击Print按钮,PRINTDLGEX结构含有用户指定的信息。
    如果函数调用成功,返回值可能是下列COM错误代码中的一个,有关更多的信息请参见ErrorHandling。
    E_OUTOFMEMORT:内存不足;E_INVALIDARG:一个或更多的参数无效。
    E_POINTER:指针失效;E_HANDLE:句柄失效;E_FAIL:不确定的错误。
    备注:有关更多的信息,请见Print Propertysheet。
    速查:Windows NT:5.0及以上版本;Windowss:不支持;Windows CE:不支持;头文件:commdlg.h,库文件。comdlg32.lib;Unicode:在Windows NT环境中实现为Unicode和ANSI两个版本。

    2.5.11 ReplaceText

    函数功能。该函数创建一个系统定义的无模式对话框,此对话框使用户查找或替代一个串,或执行控制和替代操作。
    函数原型:HWND Replace Text (LPFINDREPLACE Ipfr);
    参数:
    Ipfr:指向一个包含初始化对话框的信息的FINDREPLACE结构。对话框应用此结构把用户输入的有关信息传送到应用程序。有关更多的信息,见卜列说明部分。
    返回值:如果函数调用成功,返回值为对话框的窗口句柄,可以用窗口句柄与对话框联系或关闭它。如果函数调用失败,返回值为NULL。若想获得更多的错误信息,调用CommDlgExError函数,其返回值如下:
    CDERR_FINDRESFAILURE CDERR_MEMLOCKFAILURE
    CDERR_INITIALIZATION COERR_NOHINSTANCE
    CDERR_LOADRESFAILURE CDERR_NOHOOK
    CDERR_LOADSTRFAILURE CDERR_BITEMPLATE
    CDERR_LOCKRESFAILURE CDERR_STRUCTSIZE
    CDERR_MEMALLOCFAILURE FRERR_BUFFERLENGTHZERO
    备注:PepIACE Text函数不执行文本替代操作。相反,对话框把FINDSGSTRING 已登记的信息传送到对话框窗口的窗口函数。当创建对话框时,FINDREPLACE结构的hwndowner成员指定该对话框窗口。
    调用ReplaceText函数之前,必须调用RegisterWindowMessage函数为FINDSGSTRING信息登记标识。
    当用户击点Find Next,Replace ALL按钮时,或当关闭对话框时,对话框函数应用这些标识发送信息。
    FINDMSGSTRING信息中的IParam参数含有一个指向FINDREPLACE结构的指针。此结构的Flags成员表明了形式信息的事件。该结构中其他的成员表明用户的输入信息。
    如果创建了Replace对话框,必须应用应用程序信息链中的IsDialogMesssage函数来保证对话框能正确处理链盘输入信息,例如Tab键和Esc键。
    ISDialogMessage函数返回值表明Replace对话框是否处理信息。
    可以为Replace对话枢提供一个FRHookProc挂钩函数,此挂钩函数能处理发送到对话框中的信息。
    为使一个挂钩函数生效,可设置FINDREPLACE结构中Flags成员的FR_ENABLEHOOK标志且指定IpfnHook成员中挂钩函数的地址。
    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:commdlg.h;库文件:comdlg32.lib:Unicode:在Windows NT环境中实现为Unicode和ANSI两个版本。

    2.5.12 CCHookProc

    函数功能:该挂钩函数是一个应用程序或库定义的回调函数。ChooseColor函数与此函数一起使用挂钩函数贮存信息或通告,此信息和通告应用于Color公共对话框的缺省对话框函数。
    LPCEHOOPROC类型定义了一个指向此回调函数的指针。CCHOOkProc是一个应用程序定义的函数名的位置占有者。
    函数原型:UINT CALLBACK CCHookProc(HWND hdlg,UINT uiMsg,WPARAM wParam,LPARAM IParam);
    参数:
    hdlg:指向信息指定的Color对话框的句柄。
    uiMag:标识存放的信息。
    wParam:指定有关信息号的其他信息。精确意义根据UiMdsg参数的值来决定。
    IParam:指定有关消息的其他信息。精确意义由uiMsg参数的值米决定。如果uiMsg多数表明WM_IMTDIALOG消息,IParam是一个指向含有当对话框创建时指定的值的CHOOSECOLOR结构的指针。
    返回值;如果挂钩函数返回零值,缺省对话框函数处理消息。如果挂钩函数返回非零值,缺省对话框函数忽略消息。
    备注当用ChooseColor函数创建一个Color对话框时,应用程序可以为对话框函数提供CCHookProc挂钩函数来处理消息。应用传送到对话创建函数中的CHOOSECOLOR结构可使挂钩函数生效,也可指定IpfnHook成员中挂钩函数的地址和指定Flags成员中CC_