当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: 我用access设计一个数据库,连接好以后,经过编译总是使用的是绝对路径,咋样才能改为相对路径呢?小弟我请教各位大虾,多谢了! ......
 ·systemparametersinfo    »显示摘要«
    摘要: 我这里问一个以前问过的问题: 屏蔽ctrl + alt + del和alt+tab systemparametersinfo里的spi_screensaverrunning 或者spi_setscreensaverrunning无效?? 如果我不用这个api那么我应该用什么?系统消息来截获键盘消息吗? 我试了一下,结果根本不能屏蔽ctrl + alt + del 求各位大虾来解答小弟这个问......


怎么用sendmessage 使用LVMSCROLLX消息,100分送上

我在程序里这样用  
  lresult   =   SendMessage(lvListView.hWnd,   LVM_SCROLL,   0,   CInt(1))  
  我想让listview向下滚动一行,可是不管我最后一个参数设成150   ,1    
  listview总是滚动到最下面  
  我的listview是report的view  
  我查了一些资料说,要是report的样式,最后一个应该是行数  
  还有,如果我要向上滚动那,用-1,也是滚动到最后一行了  
   
  各位大侠,多帮帮忙了!

NO.1   作者: rainstormmaster

那能告诉我什么情况下要用byval吗  
  这个一句两句恐怕说不清楚,需要长期的经验积累,我的一点经验是,如果希望从api函数的参数中取回数据,一般用byref,这在api函数的参数为结构体时,尤其明显。而如果要把一个值传递给api函数,则需用byval)  
   
  参考:  
   
  3、ByVal和ByRef  
          ByVal传递的参数值,而ByRef传递的参数的地址。在这里,我们不用去区别传指针/传地址/传引用的不同,在VB里,它们根本就是一个东西的三种不同说法,即使VB的文档里也有地方在混用这些术语  
          初次接触上面的程序二SwapPtr的朋友,一定要搞清在里面的CopyMemory调用中,在什么地方要加ByVal,什么地方不加  
          准确的理解传值和传地址的区别,是在VB里正确使用指针的基础。  
          现在一个最简单的实验来看这个问题,如下面的程序三:  
  【程序三】:体会ByVal和ByRef  
          Sub   TestCopyMemory()  
                  Dim   k   As   Long  
                  k   =   5  
  Note:       CopyMemory   ByVal   VarPtr(k),   40000,   4  
                  Debug.Print   k  
          End   Sub  
          上面标号Note处的语句的目的,是将k赋值为40000,等同于语句k=40000,你可以在"立即"窗口试验一下,会发现k的值的确成了40000。  
          实际上上面这个语句,翻译成白话,就是从保存常数40000的临时变量处拷贝4个字节到变量k所在的内存中。  
          现在我们来改变一个Note处的语句,若改成下面的语句:  
  Note2:       CopyMemory   ByVal   VarPtr(k),   ByVal   40000,   4  
          这句话的意思就成了,从地址40000拷贝4个字节到变量k所在的内存中。由于地址40000所在的内存我们无权访问,操作系统会给我们一个Access   Violation内存越权访问错误,告诉我们"试图读取位置0x00009c40处内存时出错,该内存不能为Read"。  
          我们再改成如下的语句看看。  
  Note3:       CopyMemory   VarPtr(k),   40000,   4  
          这句话的意思就成了,从保存常数40000的临时变量处拷贝4个字节到到保存变量k所在内存地址值的临时变量处。这不会出出内存越权访问错误,但k的值并没有变。  
          我们可以把程序改改以更清楚的休现这种区别,如下面的程序四:  
  【程序四】:看看我们的东西被拷贝到哪儿去了    
          Sub   TestCopyMemory()  
                  Dim   i   As   Long,   k   As   Long  
                  k   =   5  
                  i   =   VarPtr(k)  
  NOTE4:     CopyMemory   i,   40000,   4  
                  Debug.Print   k  
                  Debug.Print   i  
                  i   =   VarPtr(k)  
  NOTE5:     CopyMemory   ByVal   i,   40000,   4  
                  Debug.Print   k  
          End   Sub  
   
  程序输出:  
  5  
  40000  
  40000  
          由于NOTE4处使用缺省的ByVal,传递的是i的地址,所以常量40000拷贝到了变量i里,因此i的值成了40000,而k的值却没有变化。但是,在NOTE4前有:i=VarPtr(k),本意是要把i本身做为一个指针来使用。这时,我们必须如NOTE5那样用ByVal来传递指针i,由于i是指向变量k的指针,所以最后常量40000被拷贝了变量k里。  
          希望你已经理解了这种区别,在后面问题的讨论中,我还会再谈到它。  
   
 


 ·kb824146号补丁是否是累积补丁    »显示摘要«
    摘要: 我的xp自动更新后安装了kb824146号补丁,但没安装kb823980号,因此猜测kb824146是累积补丁,不知对否。 ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE