flex 让一个容器在另一个容器的内部移动,不会超界

1、主程序源代码如下:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="creationCompleteHandler()">

<fx:Script>
   <![CDATA[
    import flash.geom.Rectangle;
    import mx.core.FlexGlobals;
    import mx.core.UIComponent;
    import mx.events.MoveEvent;
    import mx.managers.PopUpManager;
    import spark.components.TitleWindow;
   
    protected function creationCompleteHandler():void
    {
     var window:TitleWindow = new TitleWindow();
     PopUpManager.addPopUp(window, this, false);
     PopUpManager.centerPopUp(window);
     window.addEventListener(MoveEvent.MOVE, window_moveHandler);
    }
   
    protected function window_moveHandler(event:MoveEvent):void
    {
     var window:UIComponent = event.currentTarget as UIComponent;
     var application:UIComponent = FlexGlobals.topLevelApplication as UIComponent;
     var bounds:Rectangle = new Rectangle(0, 0, application.width, application.height);
     var windowBounds:Rectangle = window.getBounds(application);
     var x:Number;
     var y:Number;
     if (windowBounds.left <= bounds.left)
      x = bounds.left;
     else if (windowBounds.right >= bounds.right)
      x = bounds.right - window.width;
     else
      x = window.x;
     if (windowBounds.top <= bounds.top)
      y = bounds.top;
     else if (windowBounds.bottom >= bounds.bottom)
      y = bounds.bottom - window.height;
     else
      y = window.y;
     window.move(x, y);
    }
   
   ]]>
</fx:Script>

</s:WindowedApplication>

转载于:https://www.cnblogs.com/xinzhuangzi/archive/2010/08/17/4100554.html

在C语言中,如果你想要实现HDLC(High-Level Data Link Control,高级数据链路控制规程)协议的透明传输,通常会涉及数据帧的封装和解封装,以及错误检测和纠正。按照一个比特位(bit)构造处理表主要是为了处理HDLC的数据帧头信息、标志字段和填充字节。 首先,你需要创建一个结构体表示HDLC帧,例如: ```c typedef struct { uint8_t start_delimiter; // 起始位 '1010' uint8_t address_and_control; // 地址+控制字段 uint8_t flags; // 标志字段 uint8_t data[HDLC_MAX_DATA_SIZE]; // 数据部分 uint8_t end_delimiter; // 结束位 '1010' uint8_t crc; // 奇偶校验码 } HDLCFrame; ``` 接下来,你需要一个函数来处理数据的透明传输,比如添加和删除HDLC特有的头部和尾部标识: ```c void hdlc_encode(uint8_t *input, uint8_t *output, size_t length) { HDLCFrame *frame = (HDLCFrame *)malloc(sizeof(HDLCFrame)); frame->start_delimiter = 0x5E; // 起始位 frame->address_and_control = 0; // 如果需要地址,设置为对应的值 frame->flags = HDLC_FLAG_DATA; // 数据帧标记 memcpy(frame->data, input, length); frame->end_delimiter = 0x7E; // 结束位 calculate_crc(&frame->crc, sizeof(HDLCFrame)); // 计算CRC // 添加额外的字节 for (size_t i = 0; i < length + 3; i++) { // 数据长度+起始位+结束位+CRC output[i] = frame->start_delimiter; output[i+1] = frame->address_and_control; output[i+2] = frame->flags; output[i+3] = frame->data[i]; } output[length + 3] = frame->end_delimiter; output[length + 4] = frame->crc; free(frame); // 释放内存 } void hdlc_decode(const uint8_t *input, uint8_t *output, size_t length) { const HDLCFrame *frame = (const HDLCFrame *)malloc(sizeof(HDLCFrame)); frame->data = output; frame->start_delimiter = input[0]; if (frame->start_delimiter != 0x5E || frame->end_delimiter != 0x7E) { // 检查是否是有效的HDLC帧 return; } size_t decoded_length = input[1] & 0x7F; // 控制字段解析 // ... 解析其余部分并解码数据 free(frame); } ``` 优化方面,可以考虑使用预编译宏、数组操作代替循环等提高性能,同时注意处理边界情况,如输入过长导致超界等问题。此外,还可以使用位操作(bit manipulation)来进一步简化编码过程,但这可能会增加代码复杂度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值