设为首页 收藏本站
查看: 1057|回复: 0

[经验分享] Mac OS X Programming读书笔记5

[复制链接]

尚未签到

发表于 2016-5-16 10:40:17 | 显示全部楼层 |阅读模式
Chapter 5 Controls  

1 Command Signatures and Control IDs  

1. 可以将Command和Control联系起来,但是当你收到事件的时候,你并不知道当时是哪个Control被按下了。事实上,你也不需要关心,因为Command本来被设计成代表命令,至于是点击Button还是选择菜单都没有关系  

2. 当你需要知道Control究竟发生了什么事情的时候,你需要给Control分配一个Control ID,包括:  

a. Signature:一个4个Char的标记,一般来说应该是程序的Creator Code,也就是Application本身的Signature。大部分情况下,单一程序的所有Control ID的Signature都是一样的  

b. ID:一个整数,真正的独立在此程序中标记该Control的ID  

2 Buttons
DSC0000.jpg

<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="Picture_x0020_4" style="VISIBILITY: visible; WIDTH: 134.25pt; HEIGHT: 81pt; mso-wrap-style: square" type="#_x0000_t75" o:spid="_x0000_i1028"><imagedata o:title="" src="file:///D:%5Ctmp%5Cmsohtmlclip1%5C01%5Cclip_image001.emz"></imagedata></shape>  

1. Bevel Button  

2. ImageWell  

3 Radio Buttons
DSC0001.jpg

<shape id="Picture_x0020_5" style="VISIBILITY: visible; WIDTH: 134.25pt; HEIGHT: 56.25pt; mso-wrap-style: square" type="#_x0000_t75" o:spid="_x0000_i1027"><imagedata o:title="" src="file:///D:%5Ctmp%5Cmsohtmlclip1%5C01%5Cclip_image002.emz"></imagedata></shape>  

系统负责维护Radio Button的状态,不需要自己编程处理。  

1: ControlHandle numBeepsRadioButtonGroup;  

2: ControlID numBeepsControlID = { kControlSignature, kRadioGroupControlID };  

  

3: GetControlByID( window, &numBeepsControlID,  

&numBeepsRadioButtonGroup );  

  

SInt32 numBeepsValue;  

4: numBeepsValue = GetControl32BitValue( numBeepsRadioButtonGroup );  

1. 声明一个Control的Handle  

2. 声明Control的Control ID,也就是这个Radio Button Group的ID  

3. 通过Control ID获得Control的Handle  

4. 通过Handle获得Control的32-bit整数值,表示哪一个Radio Button被按下了  

4 Checkboxes
DSC0002.jpg

<shape id="Picture_x0020_3" style="VISIBILITY: visible; WIDTH: 134.25pt; HEIGHT: 51.75pt; mso-wrap-style: square" type="#_x0000_t75" o:spid="_x0000_i1026"><imagedata o:title="" src="file:///D:%5Ctmp%5Cmsohtmlclip1%5C01%5Cclip_image003.emz"></imagedata></shape>  

和上面的非常类似,GetControl32BitValue返回0说明没有Check,1则为Checked  

5 Text Input Fields  

<shape id="Picture_x0020_2" style="VISIBILITY: visible; WIDTH: 179.25pt; HEIGHT: 123pt; mso-wrap-style: square" type="#_x0000_t75" o:spid="_x0000_i1025"><imagedata o:title="" src="file:///D:%5Ctmp%5Cmsohtmlclip1%5C01%5Cclip_image004.emz"></imagedata></shape>  

DSC0003.jpg
应该使用GetcontrolData来获得Text Input Fields所对应的字符串:  

OSErr GetControlData(   

ControlRef inControl,  

ControlPartCode inPart,  

ResType inTagName,  

Size inBufferSize,  

void * inBuffer,  

Size * outActualSize );  

1. ControlRef inControl:ControlRef也就是ControlHandle,所以直接传递用GetControlByID的返回值即可  

2. ControlPartCode inPart:指定访问Control的哪一部分,部分Control由多个Control组成,由不同的常量代表不同的子控件。如果没有子控件,可以传递kControlEntireControl代表整个控件本身  

3. ResType inTagName:数据的类型,对于Text Input Field应该传递kControlEditTextCFStringTag  

4. Size inBufferSize:缓冲区大小  

5. Void *inBuffer:缓冲区本身  

6. Size *outActualSize:实际大小  

举例如下:  

CFStringRef theString;  

  

GetControlData(   

stringInTextEdit,  

kControlEntireControl,  

kControlEditTextCFStringTag,  

sizeof( CFStringRef ),  

&theString,  

NULL );  

  

同样的,可以用SetControlData来设置Text Input Field的字符串:  

OSErr SetControlData(   

ControlRef inControl,  

ControlPartCode inPart,  

ResType inTagName,  

Size inSize,  

void * inData);  

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-217684-1-1.html 上篇帖子: mac os x86 下 intel 无限驱动下载 下篇帖子: Mac OS将大写转换键变成ESC键
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表