转与:http://www.cppblog.com/fwxjj/archive/2008/01/01/40080.aspx

WinXP DDK下载链接地址是:http://210.21.117.86/down/ocx/winxpddk.zip

在vc++中要完成与USB进行通信的功能,得先将DDK(Drive Development Kits)中的头文件include到应用程序的文档中。顺序是:先安装vc, 再安装DDK。

一个多星期了!经历了期盼,无奈(需要注册为VIP),郁闷(需要输入银行的ID&KEY)(当然了,天下少有免费的午餐,对此我表示理解);经历了"希望--绝望--希望"的循环;感受到了欺骗(并非免费)和时光的流逝(曾经是有效的下载),才得到了这个真正有效的链接。希望这个链接,能为有需要的朋友提供方便。

感谢google。感谢来自csdn.net的soundzyt,他提供了原始的链接。

另外:Win2000 DDK的有效下载地址是:http://www.vckbase.com/tools/listtools.asp?tclsid=103  这个链接还包括一系列的其它很有用的工具,如图:

image

并且这些工具都是免费的

posted @ 2010-11-17 13:34 wrh 阅读(732) | 评论 (0)编辑 收藏
理论:
    对于USB接口的设备,现在越来越多了。本篇我们就通过获取一个USB扫描仪设备中的序列号,来介绍如何获取usb设备的一些硬件信息。对于usb设备都是采用HCD0,HCD1,HCD2,HCD3等符号描述的。如下图:

因此,有了这个名字,我们就可以使用CreateFile来打开usb设备。然后使用DeviceIoControl函数与usb设备通讯了。HCD是host controller driver的简写。需要了解详情的,还要仔细的阅读usb协议。
usb的通讯基本步骤如下图所示:
基本步骤:
    1)打开HCD%X
    2) 得到上面的USB root hub
    3) 遍历usb root hub上连接的usb 设备。获取信息
    4)如果有多个usb口,循环前3步。

下面介绍通讯用的几个IOCTL:
1)USB_HCD_DRIVERKEY_NAME ,用于获取USB设备驱动在注册表中的键名。相应的一个结构体是:
typedef struct _USB_HCD_DRIVERKEY_NAME
{
   ULONG   ActualLength;

   WCHAR   DriverKeyName[1];

} USB_HCD_DRIVERKEY_NAME, *PUSB_HCD_DRIVERKEY_NAME;


2)IOCTL_USB_GET_ROOT_HUB_NAME,用于获取root hub 键名。使用的结构体,跟上面一样。
typedef struct _USB_ROOT_HUB_NAME
{
    ULONG ActualLength;
    WCHAR RootHubName[1];
} USB_ROOT_HUB_NAME, *PUSB_ROOT_HUB_NAME;

3IOCTL_USB_GET_NODE_INFORMATION,
用于获取连接在root hub上的节点设备信息。也就是我们接在usb口上的所有usb设备的信息,对应的结构体:
typedef struct _USB_NODE_INFORMATION
{
    USB_HUB_NODE NodeType;   
    union {
        USB_HUB_INFORMATION HubInformation;
        USB_MI_PARENT_INFORMATION MiParentInformation;
    } u;
} USB_NODE_INFORMATION, *PUSB_NODE_INFORMATION;

typedef struct _USB_MI_PARENT_INFORMATION
{
    ULONG NumberOfInterfaces;
} USB_MI_PARENT_INFORMATION, *PUSB_MI_PARENT_INFORMATION;

typedef struct _USB_HUB_INFORMATION
{
    USB_HUB_DESCRIPTOR HubDescriptor;

    BOOLEAN HubIsBusPowered;

} USB_HUB_INFORMATION, *PUSB_HUB_INFORMATION;


typedef struct _USB_HUB_DESCRIPTOR
{
    UCHAR        bDescriptorLength;      // Length of this descriptor
    UCHAR        bDescriptorType;        // Hub configuration type
    UCHAR        bNumberOfPorts;         // number of ports on this hub
    USHORT       wHubCharacteristics;    // Hub Charateristics
    UCHAR        bPowerOnToPowerGood;    // port power on till power good in 2ms
    UCHAR        bHubControlCurrent;     // max current in mA
    //
    // room for 255 ports power control and removable bitmask
    UCHAR        bRemoveAndPowerMask[64];      
} USB_HUB_DESCRIPTOR, *PUSB_HUB_DESCRIPTOR;


4) IOCTL_USB_GET_NODE_CONNECTION_INFORMATION, 用于获取接在usb口上的单个usb设备的信息,对应的结构体:

typedef struct _USB_NODE_CONNECTION_INFORMATION
{
    ULONG ConnectionIndex;
    USB_DEVICE_DESCRIPTOR DeviceDescriptor;
    UCHAR CurrentConfigurationValue;
    BOOLEAN LowSpeed;

    BOOLEAN DeviceIsHub;

    USHORT DeviceAddress;

    ULONG NumberOfOpenPipes;

    USB_CONNECTION_STATUS ConnectionStatus;
    USB_PIPE_INFO PipeList[0];
} USB_NODE_CONNECTION_INFORMATION, *PUSB_NODE_CONNECTION_INFORMATION;

4)IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, 用于获取usb设备的描述信息。
typedef struct _USB_DEVICE_DESCRIPTOR
{
    UCHAR bLength;
    UCHAR bDescriptorType;
    USHORT bcdUSB;
    UCHAR bDeviceClass;
    UCHAR bDeviceSubClass;
    UCHAR bDeviceProtocol;
    UCHAR bMaxPacketSize0;
    USHORT idVendor;
    USHORT idProduct;
    USHORT bcdDevice;
    UCHAR iManufacturer;
    UCHAR iProduct;
    UCHAR iSerialNumber;
    UCHAR bNumConfigurations;
} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;

typedef struct _USB_DEVICE_DESCRIPTOR
{
    UCHAR bLength;
    UCHAR bDescriptorType;
    USHORT bcdUSB;
    UCHAR bDeviceClass;
    UCHAR bDeviceSubClass;
    UCHAR bDeviceProtocol;
    UCHAR bMaxPacketSize0;
    USHORT idVendor;
    USHORT idProduct;
    USHORT bcdDevice;
    UCHAR iManufacturer;
    UCHAR iProduct;
    UCHAR iSerialNumber;
    UCHAR bNumConfigurations;
} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;

typedef enum _USB_CONNECTION_STATUS
{
    NoDeviceConnected,
    DeviceConnected,

    /* failure codes, these map to fail reasons */
    DeviceFailedEnumeration,
    DeviceGeneralFailure,
    DeviceCausedOvercurrent,
    DeviceNotEnoughPower,
    DeviceNotEnoughBandwidth,
    DeviceHubNestedTooDeeply,
    DeviceInLegacyHub
} USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS;

typedef struct _USB_PIPE_INFO
{
    USB_ENDPOINT_DESCRIPTOR EndpointDescriptor;
    ULONG ScheduleOffset;
} USB_PIPE_INFO, *PUSB_PIPE_INFO;

typedef struct _USB_ENDPOINT_DESCRIPTOR
{
    UCHAR bLength;
    UCHAR bDescriptorType;
    UCHAR bEndpointAddress;
    UCHAR bmAttributes;
    USHORT wMaxPacketSize;
    UCHAR bInterval;
} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;

需要注意一点,如果要得到pid,vid,则直接从
USB_DEVICE_DESCRIPTOR结构中取出idVendor,idProduct这两项的值就行了。如果要得到序列号,则不是取出 iSerialNumber就可以的。这里的 iSerialNumber仅仅是一个索引值。如果想得到序列号,就需要定义一个结构,然后给设备发送个请求。请求的结构如下图:

代码参照GetStringDescriptor函数。可以根据iSerialNumber偏移,取出其对应的字符串,存放在上图USB_STRING_DESCRIPTOR结构中。
posted @ 2010-11-17 10:25 wrh 阅读(3039) | 评论 (0)编辑 收藏
2008-05-18 22:55

////////////////////////////////////////////////////////////////////

//中点圆整数算法 画圆                                  //

/////////////////////////////////////////////////////////////////////

void roundMid(int x1,int y1,int R,CDC* pDC)

{

       int x=0,y=R;

       int d=1-R; //起点(0,R),下一点中点(1,R-0.5),d=1*1+(R-0.5)*(R-0.5)-R*R=1.25-R,d只参与整数运算,所以小数部分可省略

       while(y>x) //y>x即第一象限的第2区八分圆

       {

              pDC->SetPixel(x+x1,y+y1,RGB(255,0,0)); //圆心(x1,y1),画点时直接相加平移,2

              pDC->SetPixel(y+x1,x+y1,RGB(255,0,0)); //1

              pDC->SetPixel(-x+x1,y+y1,RGB(255,0,0)); //3

              pDC->SetPixel(-y+x1,x+y1,RGB(255,0,0)); //4

              pDC->SetPixel(-x+x1,-y+y1,RGB(255,0,0)); //5

              pDC->SetPixel(-y+x1,-x+y1,RGB(255,0,0)); //6

              pDC->SetPixel(x+x1,-y+y1,RGB(255,0,0)); //7

              pDC->SetPixel(y+x1,-x+y1,RGB(255,0,0)); //8

              if(d<0)

                     d=d+2*x+3; //d的变化

              else

              {

                     d=d+2*(x-y)+5; //d<=0,d的变化

                     y--; //y坐标减1

              }

              x++; //x坐标加1

       }

}

 

////////////////////////////////////////////////////////////////////

//Bresenham算法画圆                                  //

/////////////////////////////////////////////////////////////////////

void RoundBre(int x1,int y1,int R,CDC* pDC)
{
//圆心(x1,y1),当前像素I(xi,yi),右像素H(xi+1,y),右下像素D(xi+1,yi-1),下像素V(xi,yi-1)
int xi,yi,dd,m,n;
//圆心距差值平方dh=(xi+1)*(xi+1)+yi*yi-R*R; dd=(xi+1)*(xi+1)+(yi-1)*(yi-1)-R*R; dv=xi*xi+(yi-1)*(yi-1)-R*R;
xi=0; //起点(0,R)
yi=R;
dd=2-2*R; //起点的右下像素(1,R-1)的圆心距差值dd=1+(R-1)*(R-1)-R*R
pDC->SetPixel(x1,y1,RGB(0,0,255)); //画圆心,证明圆心必须占用一个像素
while(yi>=xi) //循环到八分之一圆;yi>=0即可以画出四分圆
{
   pDC->SetPixel(xi+x1,yi+y1,RGB(255,0,0));   //2区,坐标平移(x1,y1)画圆
   pDC->SetPixel(yi+x1,xi+y1,RGB(255,0,0));   //1区
   pDC->SetPixel(-xi+x1,yi+y1,RGB(255,0,0)); //3区
   pDC->SetPixel(-yi+x1,xi+y1,RGB(255,0,0)); //4区
   pDC->SetPixel(-yi+x1,-xi+y1,RGB(255,0,0)); //5区
   pDC->SetPixel(-xi+x1,-yi+y1,RGB(255,0,0)); //6区
   pDC->SetPixel(xi+x1,-yi+y1,RGB(255,0,0)); //7区
   pDC->SetPixel(yi+x1,-xi+y1,RGB(255,0,0)); //8区
   if(dd<0) //D在圆内;H在圆上或圆外;选择H或D,dh>=0,dd<0,m=|dh|-|dd|=2*(dd+yi)-1;
   {
    m=2*(dd+yi)-1;
    if(m<=0) //取右像素H(xi+1,yi);m=0时 取右点
    {
     dd=dd+2*xi+3; //求H的右下像素(xi+2,yi-1),dd=(xi+2)*(xi+2)+(yi-1)*(yi-1)-R*R
     xi=xi+1;
    }
    else //取右下像素D(xi+1,yi-1)
    {
     dd=dd+2*(xi-yi+3); //求D的右下像素(xi+2,yi-2),dd=(xi+2)*(xi+2)+(yi-2)*(yi-2)-R*R
     xi=xi+1;
     yi=yi-1;
    }
   }
   else if(dd>0) //D在圆外;V在圆外或圆上;选择D或V;dd>0,dv<=0,n=|dd|-|dv|=2*(dd-xi)-1;
   {
    n=2*(dd-xi)-1;
    if(n<=0) //取右下像素D(xi+1,yi-1);n=0时取
    {
     dd=dd+2*(xi-yi+3); //求D的右下像素(xi+2,yi-2),dd=(xi+2)*(xi+2)+(yi-2)*(yi-2)-R*R
     xi=xi+1;
     yi=yi-1;
    }
    else //取下像素V(xi,yi-1)
    {
     dd=dd-2*yi+3; //求V的右下像素(xi+1,yi-2)dd=(xi+1)*(xi+1)+(yi-2)*(yi-2)-R*R
     yi=yi-1;
    
    }
   }
   else if(dd==0) //D在圆上,取D(xi+1,yi-1)
   {
    dd=dd+2*(xi-yi+3); //求D的右下像素(xi+2,yi-2),dd=(xi+2)*(xi+2)+(yi-2)*(yi-2)-R*R
    xi=xi+1;
    yi=yi-1;
   }
}
}

posted @ 2010-11-12 11:20 wrh 阅读(2103) | 评论 (0)编辑 收藏

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://ben1024.blogbus.com/logs/44093592.html

在VC6.0中,我们想利用web broswer组件开发,方法是project->add to project->components and controls,然后找到本机注册的控件,这里以web broswer为例,点击insert后,VC6.0会自动添加组件相关的类.h和.cpp,然后我们就可以利用该类进行开发了。

但在VISTA中,VC6.0在components and controls时,报“不支持该接口”的错误。所以选择VS2005/VS2008。但是在对话框那里,右键,插入Actives控件,选了web broswer后,只会在工具箱加入web broswer,而并不生成组件相关的类,.h和.cpp文件(还有一种方法,就是在工具箱中右键,选择项,然后“COM组件”,点web broswer)。
试验了好久,才终于找到了,如何弄出组件相关类的方法,给大家分享。
首先,将WEB BROSWER放到文本框中,然后对其右键,选择“添加变量”,完成向导,些时就会在你项目文件内添加,例如ocx1.h,ocx1.cpp及类视图COcx1类。

困扰了好久,终于找到了方法,特分享。。。。。。

大家有什么好的关于VS2005,VS2008的经验,请分享。。。。。




//////////////////////////////////////////////////////////

在vc++6.0中,有ClassWizard可以添加ActiveX的类。而vs2005中没有。
如果要添加Activex对应的类,可以:项目-》添加类-》ActiveX控件中的MFC类-》选择要添加的ActiveX及其类名
即可
posted @ 2010-10-29 11:20 wrh 阅读(1876) | 评论 (0)编辑 收藏

<script>
function selectC()
{
 var oSel=document.getElementsByName("name")[0];
 var oInp=document.getElementsByName("fax")[0];
 var Value=oSel.options[oSel.selectedIndex].value;
 if(parseInt(Value)>0)
  oInp.value="LII"+Value+"&FileName&";
 else
  oInp.value="";
}

</script>
<select name="name" onchange="selectC()">
 <option selected>-请选择-</option>
   <option value="1">美国</option>
 <option value="2">中国</option>
  </select>

<input type="text" name="fax" size="20">

////////////////////////////////////////////////////////////////
<textarea id="textarea1"></textarea><input type="button" value="机选一注" onclick="show()">
<script language=javascript>
       
function show()
        {
           
var obj=document.getElementById("textarea1")
           
var temp=new Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22)
           
var strResult=new Array()
           
for(var j=0;j<5;j++)
            {
               
var i=Math.floor(Math.random()*(22-j))
                strResult[strResult.length]
=temp[i]
                temp.splice(i,
1)
            }
            obj.value
=strResult.join(",")
        }
</script>

/////////////////////////////////////////////////////////////////
<textarea id="textarea1" style="height:200;widht:200"></textarea><input type="button" value="机选五注" onclick="show()">
<script language=javascript>
       
function getNum()
        {
           
           
var temp=new Array('01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22')
           
var strResult=new Array()
           
for(var j=0;j<5;j++)
            {
               
var i=Math.floor(Math.random()*(22-j))
                strResult[strResult.length]
=temp[i]
                temp.splice(i,
1)
            }
           
return strResult.join(",")
           
        }
       
function show(){
           
var obj=document.getElementById("textarea1")
           
var result=new Array()
           
for(var i=0;i<5;i++)
            {
                result[i]
=getNum()
            }
            obj.value
=result.join("\n")
        }
</script>


////////////////////////////////////////////////////////////////////
<textarea id="textarea1" style="height:200;widht:200"></textarea><input type="button" value="机选五注" onclick="show()">
<script language=javascript>
       
function getNum()
        {
           
           
var temp=new Array('01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22')
           
var strResult=new Array()
           
for(var j=0;j<5;j++)
            {
               
var i=Math.floor(Math.random()*(22-j))
                strResult[strResult.length]
=temp[i]
                temp.splice(i,
1)
            }
           
return strResult.join(",")
           
        }
       
function show(){
           document.getElementById(
"textarea1").value=""
                        showEach();
           
        }
        i
=0;
       
function showEach()
        {
           
           
var obj=document.getElementById("textarea1")
            obj.value
=obj.value+"\n"+getNum()
           
if(i++>3)i=0
           
else
            setTimeout(
"showEach()",500)
           
        }
</script>

////////////////////////////////////////////////////////////////

1.通过getElementById() 方法获得,必须为文本框设定ID值,该方法获得的是一个对象的应用(返回值

为:Object),要获得文本框的值需添加属性值--value,如:
<input type="text" size="10" id="port11" name="port11" />

获值代码:document.getElementById("port11").value;

另:要获得标签<h1>中间的值,方法如下:
<h1 id="you">12345</h1>
document.getElementById("you").innerHTML;
返回值为:12345

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

2.如果是表单(<form>)中的文本框,还可以通过以下方式获得值:

<form name="form1" method="post" action="manager.do?action=login">
<tr><td >会员编号:</td>
<td ><input name="memberNo" type="text" id="memberNo" size="21" ></td>

<td ><input name="Submit" type="submit" value="确定" onClick="return check(form1)"></tr>
</form>

js中的代码:function check(form){var str = form.memberNo.value;}

注意点:表单需指定名称(name),方法中需指定传入的参数对象。

posted @ 2010-10-21 14:32 wrh 阅读(816) | 评论 (0)编辑 收藏
<select id="view" name="position" onchange="aa(this)">
<option selected value="1">工程部 </option>
<option  value="2">预审部 </option>
<option  value="3">销售部 </option>
</select>
<SCRIPT LANGUAGE="JavaScript">
<!--
   
function aa(osel){
        alert(osel.options[osel.selectedIndex].text)
    }
//-->
</SCRIPT>
//////////////////////////////////////////////////////
<select   onchange= "alert(this.options[this.selectedIndex].value);alert(this.options[this.selectedIndex].text) ">

posted @ 2010-10-21 14:23 wrh 阅读(884) | 评论 (0)编辑 收藏
  1. function showDate()   
  2. {   
  3.     var today = new Date();   
  4.     var day = today.getDate();   
  5.     var month = today.getMonth() + 1;   
  6.     var year = today.getYear();   
  7.     var date = year + "-" + month + "-" + day;   
  8.     document.getElementsByName(文本框的name)[0].value = date;   
  9.  

    当页面载入时,文本框自动以“yyyy-MM-dd”格式获得当前日期

    1. <body onload="showDate()">  

    注:该方法可能会因为不同的浏览器得到不同的结果。

posted @ 2010-10-21 09:13 wrh 阅读(357) | 评论 (0)编辑 收藏

在ASP.NET中,获得文件的物理路径可以使用server.mapPath()方法得到,

而在JavaScript中则是没有这个方法的,这里给出JavaScript如何获得文件的路径:

function serverMapPath(fileName){
var syspath = location.href;
syspath = syspath.toLowerCase();      //把路径名称转换成小写
myPosition = syspath.lastIndexOf("/");  // 获取文件路径中的最后一个"/"

syspath = syspath.substring(0,parseInt(myPosition)+1); // 使用substring函数 截取"/"之前的字符串,就得到当前目录的路径

syspath = syspath.replace("file:///","");   //这里要把file:///替换为空,否则会报错

syspath = syspath.replace(new RegExp("%20","gm")," ");   // 如果文件名中含有空格,则要还原空格,替换所有的 %20 为 " "

syspath = syspath + fileName;
return syspath.toString();
}


大家知道在JavaScript中有个 location.href ,但是这个属性有时候获得的文件路径不一定正确。

//////////////////////////////////////////////////////////////////////////////

demo http://www.cnall.org/lab/js/locArray.html

源码:

function getCurrentDirectory(){
var locHref = location.href;
var locArray = locHref.split("/");
/**这里测试locArray效果**
    for(x in locArray){
      document.write("locArray[");
      document.write(x+"]: ");
      document.write(locArray[x]+"<br />");
    }
    **/
    delete locArray[locArray.length-1];
    var dirTxt = locArray.join("/");
    return dirTxt;
}

document.write(getCurrentDirectory());

讲解:

location.href,当前的URL
var locArray = locHref.split("/");,把当前的URL变成Array,效果如下:

locArray[0]: http:
locArray[1]:
locArray[2]: localhost
locArray[3]: cnall.org
locArray[4]: lab
locArray[5]: js
locArray[6]: locArray.html

注意locArray[1]这个地方的内容,这个是因为处理"http://"中"//"的结果


delete locArray[locArray.length-1];,使用delete来删除Array中的一个项目
Delete杀伤力很大,还可以用于删除一个Object的Property,具体内容请查阅这里:
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Operators:Special_Operators:delete_Operator

var dirTxt = locArray.join("/");,利用join来粘合
join经常和split配合使用,请多多练习


/////////////////////////////////////////////
var GetPath:function(){
var a=window.location.href.substr(7+document.domain.length);
var A=a.split("/");
a=a.substr(0,a.length-A[A.length-1].length);
return a;
}
////////////////////////////////////////////
function serverMapPath(fileName){
var syspath = location.href; 
syspath 
= syspath.toLowerCase();      //把路径名称转换成小写
myPosition = syspath.lastIndexOf("/");  // 获取文件路径中的最后一个"/"

syspath 
= syspath.substring(0,parseInt(myPosition)+1); // 使用substring函数 截取"/"之前的字符串,就得到当前目录的路径 

syspath 
= syspath.replace("file:///","");   //这里要把file:///替换为空,否则会报错

syspath 
= syspath.replace(new RegExp("%20","gm")," ");   // 如果文件名中含有空格,则要还原空格,替换所有的 %20 为 " "

syspath 
= syspath + fileName; 
return syspath.toString();

posted @ 2010-10-21 09:09 wrh 阅读(2121) | 评论 (0)编辑 收藏
var value=document.getElementById('yourinputid');
var intValue=parseInt(value,10); 
////////////////////////////////////////////////////////////////////////////////////////////////////////////





在Java中,基本类型之间的强制转换也不是这样的,比如,整数要转换成字符串,必须使用Integer.toString()静态方法或者String.valueOf()静态方法,把字符串转换为整数,必须使用Integer.valueOf()。
可见,不能把JavaScript中的类型转换看作为“强制类型转换”。
在JavaScript中,Double类型和Int类型都是看作为Number对象,因此无论是typeof 1还是typeof 1.0,都是返回number。这样我们可以不用去管是Int还是Double类型,让JavaScript解释引擎内部去处理。
  • 如果要把Number转换成String,可以使用Number的toString()方法,(象(1).toString()括号必须或者 1 .toString()空格必须,否则会编译出错,如果是变量则无需),或者调用String()函数,这两种方法都会自动调用解释引擎内部的 NumberToString(),或者根据进制调用其它函数,基本类似。
  • 如果要把String转换成Number,可以使用Number()函数,他会自动判断String中是整数还是浮点数,然后内部使用相应的数据类型,另外可以使用全局函数parseInt()和parseFloat(),他们根据你的要求进行转换。同样的,他们在解释引擎内部机制上是使用了 StringToNumber,StringToInt等等内部的函数。
  • 而如果是Double转换成Int,必须使用Math.floor()函数(截尾取整)或者Math.round()(四舍五入)
  • Int转换成Double,无须考虑任何问题,直接把Int当成Double进行运算
注:Number、String函数是特殊的函数,在JS引擎中,他会自动判断是作为构造函数调用还是普通调用,所以既可以使用new关键字,也可以作为函数直接调用。
关于JS的参考手册,微软有一个CHM十分不错,指南、API参考都有,是Windows脚本技术,中文版,我在MSDN上下载的。而关于JS解释引擎的,我参考的是Netscape的Spidermonkey,现在由Mozilla组织维护。


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
for(i=0;i<this.all.length;i++){
   vTotal
+=Number(this.all[i].Value);
   
  }

 得出是数字的累加
不然成字符串连接了
posted @ 2010-10-20 14:52 wrh 阅读(326) | 评论 (0)编辑 收藏

1.JAVASCRIPT中的创建对象

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
2.创建解析器对象
set objXml=CreateObject("Microsoft.XMLDOM")
objXml.async="false"
objXml.load("test.xml")     装载xml文件
3.根据绝对路径装载xml文件
objXml.load(Server.MapPath("test.xml")) 
4.查找某一节点"NewList"
Set objRootsite = xmlDoc.getElementsByTagName("NewList")
objNextRootsiteName = xmlDoc.getElementsByTagName("NewList").item(0).nodeName

5.查找某一节点"NewList"
Set objRootsite = objXml.documentElement.selectSingleNode("NewList")
document.write(objRootsite.nodeName) '当前节点名称
objNextRootsite = objRootsite.childNodes.item(1) '查找"NewList"的第一子节点
objNextRootsiteText = objNextRootsite.childNodes.item(1).text '查找"NewList"的第一子节点的节点内容

6.获取当前节点
xmlChildNode = objXml.documentElement.childNodes
document.Write (xmlChildNode.nodename) '当前节点名称
document.write (xmlChildNode.text) '当前节点文本内容

7. 将Xml中的文本内容转换为Html中的内容
frm.label.innerText = xmlChildNode.item(1).text
8.获取属性名为name的属性值
xmlChildNode.GetAttributeNode("name").Nodevalue
9.获取xmlChildNode节点的子节点数量
xmlChildNode.length
10.取出一个节点的属性集合
set objnodes=objXml.documentElement.SelectSingleNode("//people/man").GetAttributeNode("name").attributes
for each element in objnodes
response.write element.nodename 属性名
response.write element.nodevalue 属性值 


xmlDoc.getElementsByTagName("from").item(0).text

xmlDoc.removeChild objRootsite 删除某个节点

11.其它一些与错误有关的解析
objXml.parseError 错误接受容器
objXml.parseError.errorCode 返回长整型错误代码
objXml.parseError.reason 返回字符串型错误原因
objXml.parseError.line 返回长整型错误行号
objXml.parseError.linePos 返回长整型错误行字符位置
objXml.parseError.srcText 返回错误所在行的源代码
objXml.parseError.url 返回url装载文档指针---最近一份含有解析错误的XML文档的URL地址
objXml.parseError.filePos 返回长整型错误文件位置---在文档中的绝对字符位置

posted @ 2010-10-20 11:31 wrh 阅读(370) | 评论 (0)编辑 收藏
仅列出标题
共25页: First 4 5 6 7 8 9 10 11 12 Last 

导航

<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

统计

常用链接

留言簿(19)

随笔档案

文章档案

收藏夹

搜索

最新评论

阅读排行榜

评论排行榜