当前位置:  编程技术>移动开发
本页文章导读:
    ▪Box2D V2.1汉语手册        Box2D V2.1中文手册 >> 下载见附件 ......
    ▪ 了解可变参数va_list、va_start、va_arg、va_end原理及使用方法        理解可变参数va_list、va_start、va_arg、va_end原理及使用方法 在VC++6.0的include有一个stdarg.h头文件,有如下几个宏定义:#define _INTSIZEOF(n)   ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) ) #define va_start(ap,v.........
    ▪ tabindex解决DIV获得焦点的有关问题(转)       tabindex解决DIV获得焦点的问题(转) 首先tabindex是Tab键焦点跳跃的顺序。<div >关于元素获取焦点:</div><div >1,隐藏元素无法获取焦点</div><p>下面有个隐藏的Input:</p><.........

[1]Box2D V2.1汉语手册
    来源: 互联网  发布时间: 2014-02-18
Box2D V2.1中文手册

>> 下载见附件


    
[2] 了解可变参数va_list、va_start、va_arg、va_end原理及使用方法
    来源: 互联网  发布时间: 2014-02-18
理解可变参数va_list、va_start、va_arg、va_end原理及使用方法
在VC++6.0的include有一个stdarg.h头文件,有如下几个宏定义:
#define _INTSIZEOF(n)   ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )           //第一个可选参数地址
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ) //下一个参数地址
#define va_end(ap)    ( ap = (va_list)0 )                            // 将指针置为无效

===================================================
有关VA_LIST的用法:
VA_LIST 是在C语言中解决变参问题的一组宏
VA_LIST的用法:     
       (1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针
      (2)然后用VA_START宏初始化变量刚定义的VA_LIST变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数。
       (3)然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型。
       (4)最后用VA_END宏结束可变参数的获取。然后你就可以在函数里使用第二个参数了。如果函数有多个可变参数的,依次调用VA_ARG获取各个参数。
VA_LIST在编译器中的处理:
(1)在运行VA_START(ap,v)以后,ap指向第一个可变参数在堆栈的地址。
(2)VA_ARG()取得类型t的可变参数值,在这步操作中首先apt = sizeof(t类型),让ap指向下一个参数的地址。然后返回ap-sizeof(t类型)的t类型*指针,这正是第一个可变参数在堆栈里的地址。然后用*取得这个地址的内容。
(3)VA_END(),X86平台定义为ap = ((char*)0),使ap不再指向堆栈,而是跟NULL一样,有些直接定义为((void*)0),这样编译器不会为VA_END产生代码,例如gcc在Linux的X86平台就是这样定义的。
要注意的是:由于参数的地址用于VA_START宏,所以参数不能声明为寄存器变量,或作为函数或数组类型。
使用VA_LIST应该注意的问题:
   (1)因为va_start, va_arg, va_end等定义成宏,所以它显得很愚蠢,可变参数的类型和个数完全在该函数中由程序代码控制,它并不能智能地识别不同参数的个数和类型. 也就是说,你想实现智能识别可变参数的话是要通过在自己的程序里作判断来实现的.
    (2)另外有一个问题,因为编译器对可变参数的函数的原型检查不够严格,对编程查错不利.不利于我们写出高质量的代码。
小结:可变参数的函数原理其实很简单,而VA系列是以宏定义来定义的,实现跟堆栈相关。我们写一个可变函数的C函数时,有利也有弊,所以在不必要的 场合,我们无需用到可变参数,如果在C++里,我们应该利用C++多态性来实现可变参数的功能,尽量避免用C语言的方式来实现。

===================================================
变长参数应用举例:
先得声明一个变长参数的变量va_list list
在使用前要先用va_start(list, last_param)对list进行初始化,last_param为最右边的已知参数,表示list
从last_param的下一个参数开始
va_arg(list, 类型)
最后不要忘了用va_end(list)

    
[3] tabindex解决DIV获得焦点的有关问题(转)
    来源: 互联网  发布时间: 2014-02-18
tabindex解决DIV获得焦点的问题(转)

首先tabindex是Tab键焦点跳跃的顺序。

<div >关于元素获取焦点:</div>

<div >1,隐藏元素无法获取焦点</div>
<p>下面有个隐藏的Input:</p>
<p ><input id="textbox" name="textbox" value="Hi,CssRain!!!"></p>
<input onclick="process0();" value="无法使隐藏元素获取焦点" type="button">
<p>解决方法:先把元素显示,在获取焦点。</p>

<div >2,对于div等特殊元素获取焦点</div>
<div id="a">我是DIV元素,我不带tabindex="-1"。</div>
<input onclick="process1();" value="Div不能获取焦点" type="button">
<div id="b" tabindex="-1">我是DIV元素,我带tabindex="-1",点击下面按钮试试效果。</div>
<input onclick="process2();" value="使Div获取焦点" type="button">
<script>
function process0(){
    var textbox = document.getElementById("textbox");
    textbox.onfocus = function(){alert('获取焦点');}
    textbox.focus();
}
function process1(){
    var a = document.getElementById("a");
    a.onfocus = function(){alert('获取焦点');}
    a.focus();
}
function process2(){
    var b = document.getElementById("b");
    b.onfocus = function(){alert('获取焦点');}
    b.focus();
    //非常推荐使用 tabindex = -1,基本无副作用!
}
 </script>


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3