61阅读

学习笔记-cubieboard学习笔记

发布时间:2017-11-27 所属栏目:龙腾于海

一 : cubieboard学习笔记

入手开发板,刷机肯定是少不了的,就像我们平时刷安卓手机一样。开发板也有很多适配的固件。比如Cubieboard3 Cubietruck就有安卓,debian,ubuntu等定制的固件。

Cubieboard3 Cubietruck出厂的固件为安卓,拿到手上电,用HDMI接上电视,没有反应,后来确定是我HDMI切换器的问题。个人比较喜欢debian,去Cubieboard3 Cubietruck下载中心看了看,各种开发版的固件都有啊。下面我们就来看看,在windows下面如何刷固件。

Cubieboard3 Cubietruck带有8G的nand flash,说白了,就是自带8G的硬盘,我们可以把固件刷在flash里面,一是运行稳定,二是flash运行的速度快。也可以买张TF卡,把固件刷在FT卡里,然后从FT卡启动,一样可以的。Cubieboard3 Cubietruck有现成的硬盘,就不用浪费钱再去买FT卡了,再说那卡放在卡槽里,稳不稳定还不好说呢,不小心碰松了就麻烦了。

把固件刷入Cubieboard3 Cubietruck的nand flash里准备工作,下面以刷入debian为例。

1.下载固件,下面这个地址,就是以debian定制的

http://dl.cubieboard.org/software/a20-cubietruck/debian/debieez/ct-debian-nand.img.gz

在百度网盘做了个镜像下载:http://pan.baidu.com/s/1c05Vq72

上面二个地址是一样的,哪个快就用哪个地址吧。下载完成后,解压,得到一个ct-debian-nand.img文件,后面刷机要用到这个。

更多的固件请看:http://dl.cubieboard.org/software/a20-cubietruck/

2.下载windows环境下的刷机软件PhoenixSuit,适用于win32/64位

百度网盘下载地址:http://pan.baidu.com/s/1kTuRBHd

官方下载地址:http://ubuntuone.com/3Z95tYxkcpvKq5oc2Zdpka

下载以后,安装,其实就是一个手机刷机软件。主界面如下



3.选择刷机固件。点【一键刷机】,然后点下面的【浏览】,找到刚才解压的ct-debian-nand.img



4.到这一步,就准备开始刷机了,按下面的方法操作。

Mini USB线找出来,一头插在电脑上

按住Cubieboard3 Cubietruck的FEL键,这主板只有三个键,都有标明,仔细找一下。

USB的另一头接上主板的Mini插口

这时,电脑会安装驱动。如果电脑上经常插手机,一般驱动都安装好了,电脑自动检测一下就ok了。如果没有驱动,下载一个驱动精灵什么的安装,也很快。

出现如下图,就可以松开FEL键了,点yes,进行格式化,格式化完成后,自动开始刷系统。



5.正在刷系统中。。。。整个过程8-10分钟左右。我在刷debian时,到88%不动,我以为坏掉了,过了好久,一下子跳到95%了,所以这里多等一下,刷机过程不能断电。



6.固件刷入成功,这里可以拨下usb线了,接上鼠标键盘显示器,另外操作去了。



此固件的静态IP:192.168.1.124,登录用户名:root/cubie,密码:cubieboard

无线wifi设置方法

nano /etc/network/interfaces

把静态设置删除,加上下面的配置

auto eth0

iface eth0 inet dhcp

auto wlan0

iface wlan0 inet dhcp

wpa-ssid 无线名字

wpa-psk 无线密码

刷固件的方法:

前面我们已把固件刷好了,下面一步就是要连上网。

一:用鼠标键盘和显示器连接。

这种方法是比较简单,也是最实用的方法。Cubieboard3有VGA和HDMI两种接口,自已可以根据自已的需要来连接,下面来说说具体的连接方法。

1.由于要外接键盘,普通的键盘插上后没有反应,是由于主板供电不足造成的。

2.鼠标没有问题,插上就可以使用。

3.供电不足的问题,需要买一个带电源的usb hub,然后在这个hub上插键盘和鼠标。

4.当启动到登录界面时,用户名:cubie,密码:cubieboard。这个只针对前文所刷的固件。

5.这时就会进入桌面,类似win下面一样。本版本用的是LXDE桌面。进入到桌面后,打开桌面上的终端LXTerminal。

6.输入sudo ifconfig,查看一下ip地址是多少。

7.修改静态IP地址:nano /etc/network/interfaces,打开后,改成所需要的ip,然后按ctrl+x,再按y来保存关闭。

增加一个dns,echo "nameserver 8.8.8.8" >> /etc/resolv.conf,重启一下网络:/etc/init.d/networking restart

8.重启reboot

到此,基本的上手完成了,这时可以连网了,可以在局域网内用ssh登录了,更多折腾可以通过ssh来进行了,Cubieboard可以扔到墙角去了。

Cubieboard3 Cubietruck的空间只有8G,只够装一个系统和很少的应用软件,挂载移动硬盘是必须的,手上有一个500G的移动硬盘,于是从硬盘盒里取出来,准备备用了。这个硬盘分了二个区,都是ntfs格式,并且里面还放有电影之类的东西。挂载硬盘在Cubieboard3 Cubietruck上,并不用格式化,nfts一样可以认得出来。以下操作在root下进行,非root用户在命令前加sudo。

1.安装ntfs-3g,让CB3能支持ntfs

apt-get install ntfs-3g

2.查看并列出需要挂载的硬盘分区,用下面的命令,可以看到二个分区了,分别为:/dev/sda1和/dev/sda2

fdisk -l|grep '/dev/sda'| grep -v 'nand'|grep -v 'Disk'| awk '{print $1}'



如果需要查看完整的信息,直接输入fdisk -l

3.新建挂载目录,一个硬盘分区对应一个目录。这里就是说,这二个分区要挂在CB3的哪个目录下面

mkdir -p /mnt/sda1

mkdir -p /mnt/sda2

4.输入挂载命令

root@cubieez:~# mount -t ntfs-3g /dev/sda1 /mnt/sda1

root@cubieez:~# mount -t ntfs-3g /dev/sda2 /mnt/sda2

5.设置开机自动挂载。这里挂载好了以后,如果重新启动,会丢失,所以要设置每次开机时自动挂载。打开/etc/fstab,加入下面二行。

nano /etc/fstab

/dev/sda1 /mnt/sda1 ntfs-3g defaults 0 0

/dev/sda2 /mnt/sda2 ntfs-3g defaults 0 0



根据上面的流程,写了一个一键挂载的脚本,没有实测过,只供参考,也可以自行修改。

#!/bin/bash

#Cubieboard3 Cubietruck一键自动挂载硬盘脚本

apt-get install ntfs-3g

#列出需要挂载的硬盘分区

mount_dev=$(fdisk -l|grep '/dev/sda'| grep -v 'nand'|grep -v 'Disk'| awk '{print $1}')

cat $mount_dev

#新建挂载目录,一个硬盘分区对应一个目录

for i in $mount_dev; do

echo $i

read -p "Please input mount dir: " mount_dir

mkdir -p $mount_dir

mount -t ntfs-3g $i $mount_dir

#强制挂载

#mount -t ntfs-3g /dev/sdb1 /media/usb -o force

#开机自动挂载移动硬盘

echo >> /etc/fstab EOF

$i $mount_dirntfs-3g defaults 0 0

EOF

done

#卸载硬盘的命令如下:

#umount /media/usb

到现在为止,Cubieboard3 Cubietruck折腾的也差不多了,安装了web服务器,samba和下载工具aria2,基本上够用了,还有一些其它的设置,也一起在这分离一下。本文持续更新。。。。。。

1.修改时区。如果时间跟北京时间有差别的话,一条命令搞定

cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

reboot

2.测试了一下nand flash的速度,写入速度6.4M每秒

dd if=/dev/zero of=test.bin bs=64k count=16k conv=fdatasync



3.测试了一下挂的移动硬盘的速度



4.把nand备份到sd卡。可以把nand里面的任何Linux发行版备份到sd卡,从sd卡启动,然后输入以下命令

备份:# dd if=/dev/nand conv=sync,noerror bs=64K | gzip -c -9 > /nand.ddimg.gz

恢复:# cd /; gunzip nand.ddimg.gz; dd if=/nand.ddimg conv=sync,noerror bs=64K of=/dev/nand

5.设置ipv4优先于ipv6。更新源时,如果出现以下错误,是因为源的服务器有ipv6,本机连上了,而本机没有ipv6造成了。我们设置本机为ipv4优先就行了。

W: Failed to fetch http://ftp.debian.org/debian/dists/wheezy-updates/contrib/bin

ary-armhf/Packages Cannot initiate the connection to ftp.debian.org:80 (2001:61

0:1908:b000::148:12). - connect (101: Network is unreachable) [IP: 2001:610:1908

:b000::148:12 80]

打开/etc/gai.conf,找到

#precedence ::ffff:0:0/96 100

去掉前面的#即可,然后重新apt-get update

Cubieboard Linaro 搭建超节能监控平台

更多 0

监控

Cubieboard是一款ARM架构的开发板, 1GHz 的 All Winner A10 Cortex A8 CPU、Mali-400 GPU、1GB RAM、4GB 存储。比Raspberry Pi的配置高出一倍。Cubieboard和Raspberry Pi都可以运行Android和Linux操作系统。最大的特点就是性能高功率小,最适合跑一些长时间运行的程序。

在入手Cubieboard之前看到Raspberry的34个超酷应用,所以想尝试用Cubieboard来实现。目前Cubieboard的资料相对Raspberry少很多,毕竟是新出的单板,但Cubieboard的性能占绝对优势。Linaro 下安装Smplayer放720P很流畅(1080P没测试)。

先来看看Raspberry PI的34个超酷应用:

Web 服务器

家庭自动化

BitTorrent 服务器

Web Cam 服务器

天气预报站

BitCoin Wallet

QuadCopter

VoIP PBX

XMBC 多媒体中心

有声书籍播放器

Arduino Shields

NAS 服务器

Apple Time Machine 支持

Tor 中继

家用 VPN 服务器

GPS 跟踪器(带 3G 支持)

Advice Machine(无用但很酷)

模拟输入

超级电脑

Kindle 作为显示屏

PIC Programmer

PenTesting/Hacking

Android 系统

检查网络状态

Solar 数据记录器

把我发到太空

咖啡

制作一个酷坦克

电子相框

添加 WiFi

OpenSource Kiosk

Node JS

流量监视

超频

有些应用场景实在疯狂,也不是一个人能完成的。家里养了三只陆龟,平时上班没时间观察,于是打算用Cubieboard制作一个监控平台,目标就是能够在任何能上网的环境观察家里三只陆龟的状况。

开工!

硬件条件:Cubieboard一枚、摄像头(罗技C270 当然你也可以试试自己已有的)、变压器一个(5V、1-2A 一般智能手机的USB充电器即可)、无线网卡(RTL8188CUS 我用的水星150M无线网卡)、TF卡(8-32GB、Class 10)。

系统软件:Win32DiskImager(用来将BerryBoot写到TF卡)、BerryBoot(用来部署Linaro系统) 、Linaro(这个不用下载了, BerryBoot安装好可以选择从网络安装Linaro Ubuntu系统)

1.在TF开中安装Linaro,如何在Cubieboard上安装 Linaro Ubuntu系统:http://cubieboard.org/2012/11/15/install-ubuntu-with-berryboot/

2.配置无线网卡,有了无线只需要一根电源就可以随意移动了,如果做短时间监控也可以直接用移动电源。如何在Linaro Ubuntu系统中配置无线:http://ubuntuforums.org/showthread.php?t=202834

3.简单配置一下Linaro系统,开机禁用x桌面(可以节省好多资源):http://blog.csdn.net/liebergott/article/details/7793408

4.安装OpenSSH,有了它就可以远程命令行访问你的CubieBoard了

sudo apt-get install openssh-server

5.SSH登陆系统后 sudo su到root下 看到提示从$变成#后 lsusb看看是否认到你的USB设备,如果摄像头能够正确识别到就可以运行如下命令安装通用摄像头驱动了

sudo apt-get install gspca-source

6.安装抓图软件,用视频流监控对带宽要求太高,所以用图片代替。俄,说了半天忘了说实现方式了!挺简单的,就是先用软件拍照,10秒一张连续10张然后用脚本自动通过ftp上传到外网web空间,每5分钟循环一次,然后再用html输出图片就OK了。

sudo apt-get install fswebcam

7.拍照脚本,可以先尝试拍一张

sudo fswebcam -d /dev/video0 -r 640×480 –font ‘/usr/share/fonts/truetype/freefont/FreeMono.ttf’ –line-colour ‘#FF000000′ –title ‘Logitech C270′ –timestamp ‘%Y-%m-%d %H:%M:%S (%Z)’ /home/linaro/1.jpg

sleep 5

8.将照片上传到FTP脚本,可以直接追加到拍照脚本后面(用sudo apt-get install lftp 安装LFTP)

/usr/bin/lftp << EOF

open 192.168.1.103

user username password

cd photos

put /home/linaro/*.jpg

bye

EOF

9.运行crontab -e 将上面写好的脚本设定计划任务,5分钟一次。

*/5 * * * * /home/linaro/cam.sh

10.在网上随便找个喜欢的jQuery相册输出

看看我做好的 MyTortoise House!过年期间会把他们带回家,只能看到空箱子咯!

二 : AudioToolbox学习笔记(转)

之前公司做的是音乐播放器,用到了AudioToolbox这个音频接口,总结下,希望对需要的朋友有帮助。[www.61k.com]AudioToolbox这个库是C的接口,偏向于底层,用于在线流媒体音乐的播放,可以调用该库的相关接口自己封装一个在线播放器类,AudioStreamer是老外封装的一个播放器类,有兴趣的朋友可以研究下。 
     其实IOS库中有两个可以播放在线音乐的播放器类,AVPlayer和MPMusicPlayerController 
这两个做简单的播放还不错,但是如果要做专业的音乐播放项目,功能还不够强大,例如:边听边存、断点续传、播放事件等等都无法满足。一下是以前做的笔记,仅供参考 

播放流程图: 
toolbox是什么 AudioToolbox学习笔记(转) 

• 数据类型

1.AudioFileStreamID  文件流

2.AudioQueueRef    播放队列 

3.AudioStreamBasicDescription 格式化音频数据

4.AudioQueueBufferRef      数据缓冲

• 回调函数

1.AudioFileStream_PacketsProc  解析音频数据回调

2.AudioSessionInterruptionListener 音频会话被打断

3.AudioQueueOutputCallback 一个AudioQueueBufferRef播放完

• 主要函数

0.AudioSessionInitialize (NULL, NULL, AudioSessionInterruptionListener, self);

初始化音频会话

1.AudioFileStreamOpen(

(void*)self,             

&AudioFileStreamPropertyListenerProc, 

&AudioFileStreamPacketsProc,     

0,                  

&audio_file_stream);

建立一个文件流AudioFileStreamID,传输解析的数据

2.AudioFileStreamParseBytes(

 audio_file_stream,

 datalen,

 [data bytes],

 kAudioFileStreamProperty_FileFormat);

解析音频数据

3.AudioQueueNewOutput(&audio_format, AudioQueueOutputCallback, (void*)self, [[NSRunLoop currentRunLoop] getCFRunLoop], kCFRunLoopCommonModes, 0, &audio_queue);

创建音频队列AudioQueueRef

4.AudioQueueAllocateBuffer(queue, [data length], &buffer);

创建音频缓冲数据AudioQueueBufferRef

5.AudioQueueEnqueueBuffer(queue, buffer, num_packets, packet_descriptions);

把缓冲数据排队加入到AudioQueueRef等待播放

6.AudioQueueStart(audio_queue, nil); 播放

7.AudioQueueStop(audio_queue, true);

 AudioQueuePause(audio_queue);   停止、暂停

• 断点续传

1。在http请求头中设置数据的请求范围,请求头中都是key-value成对

key:Range     value:bytes=0-1000

  [request setValue:range forHTTPHeaderField:@"Range"];

可以实现,a.网络断开后再连接能继续从原来的断点下载

b.可以实现播放进度可随便拉动

扩展:coreaudiotoolbox.dll / audiotoolbox / ios audiotoolbox

三 : WPF and Silverlight 学习笔记(六):WPF窗体

一、窗体类

在Visual Studio和Expression Blend中,自定义的窗体均继承System.Windows.Window类(类型化窗体)。[www.61k.com)定义的窗体由两部分组成:

1、XAML文件

1: <Window
2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4: x:Class="WpfWindow.BasicWindow"
5: x:Name="Window"
6: Title="BasicWindow"
7: Width="300" Height="200">
8: <Canvas>
9: <Button x:Name="btnMessage" Width="79" Height="24" Content="OK"
10: Canvas.Left="172" Canvas.Top="93" Click="btnMessage_Click"/>
11: <TextBox x:Name="txtValue" Width="215" Height="25"
12: Canvas.Left="36" Canvas.Top="48" Text="" TextWrapping="Wrap"/>
13: </Canvas>
14: </Window>

2、后台代码文件

1: using System;
2: using System.Windows;
3: 
4: namespace WpfWindow
5: {
6: public partial class BasicWindow : Window
7: {
8: public BasicWindow()
9: {
10: this.InitializeComponent();
11: }
12: 
13: private void btnMessage_Click(object sender, System.Windows.RoutedEventArgs e)
14: {
15: txtValue.Text = "Hello World";
16: }
17: }
18: }

也可以将后台代码放在XAML文件中,上面的例子可以改写为:

1: <Window
2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4: x:Class="WpfWindow.BasicWindow"
5: x:Name="Window"
6: Title="BasicWindow"
7: Width="300" Height="200">
8: <Canvas>
9: <Button x:Name="btnMessage" Width="79" Height="24" Content="OK"
10: Canvas.Left="172" Canvas.Top="93" Click="btnMessage_Click"/>
11: <x:Code><![CDATA[
12: void btnMessage_Click(object sender, System.Windows.RoutedEventArgs e)
13: {
14: txtValue.Text = "Hello World";
15: }
16: ]]>
17: </x:Code>
18: <TextBox x:Name="txtValue" Width="215" Height="25"
19: Canvas.Left="36" Canvas.Top="48" Text="" TextWrapping="Wrap"/>
20: </Canvas>
21: </Window>

二、窗体的生存周期

1、显示窗体

  • 构造方法
  • Show()、ShowDialog()方法:Show()方法显示非模态窗口,ShowDialog()方法显示模态窗口
  • Loaded事件:窗体第一次Show()或ShowDialog()时引发的事件,通常在此事件中加载窗体的初始化数据

2、关闭窗体

  • Close()方法:关闭窗体,并释放窗体的资源
  • Closing事件、Closed事件:关闭时、关闭后引发的事件,通常在Closing事件中提示用户是否退出。

3、窗体的激活

  • Activate()方法:激活某窗体
  • Activated、Deactivated事件:当窗体激动、失去焦点时引发的事件

4、窗体的生存周期

龙腾于海 WPF and Silverlight 学习笔记(六):WPF窗体

示例程序:

  • 在窗体载入时显示当前日期,并开始播放媒体
  • 当窗体失去焦点时暂停播放媒体
  • 当窗体重新获得焦点时继承播放窗体
  • 当点击窗体的关闭按钮时,询问用户是否退出应用程序

XAML文件:

1: <Window x:Class="WpfWindow.WindowLifeCycle"
2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4: Title="WindowLifeCycle" Height="200" Width="300"
5: Loaded="Window_Loaded"
6: Activated="Window_Activated"
7: Deactivated="Window_Deactivated"
8: Closing="Window_Closing">
9: <Canvas>
10: <TextBlock Canvas.Right="15" Canvas.Bottom="15" Height="21" Name="txtDate"/>
11: <MediaElement Canvas.Left="89" Canvas.Top="12" Height="100" Width="100"

扩展:wpf学习笔记 / silverlight 弹出窗体 / wpf silverlight

12: Name="myMedia" Source="numbers.wmv"
13: Stretch="Fill" LoadedBehavior="Manual" />
14: </Canvas>
15: </Window>

代码文件:

1: using System;
2: using System.Windows;
3: 
4: namespace WpfWindow
5: {
6: public partial class WindowLifeCycle : Window
7: {
8: public WindowLifeCycle()
9: {
10: InitializeComponent();
11: }
12: 
13: // 开关变量,判断是否正在播放媒体
14: private bool isPlaying;
15: 
16: private void Window_Loaded(object sender, RoutedEventArgs e)
17: {
18: // 窗体加载时,显示当前日期及开始播放媒体
19: txtDate.Text = DateTime.Now.ToString("yyyy-MM-dd");
20: 
21: myMedia.Play();
22: isPlaying = true;
23: }
24: 
25: private void Window_Activated(object sender, EventArgs e)
26: {
27: // 如果窗体被激活,则继承播放媒体
28: if (!isPlaying)
29: {
30: myMedia.Play();
31: isPlaying = true;
32: }
33: }
34: 
35: private void Window_Deactivated(object sender, EventArgs e)
36: {
37: // 如果窗体失去焦点,则暂停播放媒体
38: if (isPlaying)
39: {
40: myMedia.Pause();
41: isPlaying = false;
42: }
43: }
44: 
45: private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
46: {
47: // 点击窗体的“关闭”按钮,询问用户是否退出程序
48: 
49: string message = "Quit the application?";
50: string title = "System Information";
51: MessageBoxButton button = MessageBoxButton.OKCancel;
52: MessageBoxImage img = MessageBoxImage.Question;
53: 
54: MessageBoxResult result = MessageBox.Show(
55: message, title, button, img);
56: 
57: if (result == MessageBoxResult.Cancel)
58: {
59: e.Cancel = true; // 取消退出
60: }
61: }
62: }
63: }

三、其他窗体相关的属性、方法、事件

WPF窗体的详细的属性、方法、事件请参考MSDN,有很多的属性、方法、事件与Windows应用程序中System.Windows.Forms.Form类相同或近似,其中常用的一些属性、方法、事件有:

  • 窗体边框模式(WindowStyle属性)和是否允许更改窗体大小(ResizeMode属性)
  • 窗体启动位置(WindowStartupLocation属性)和启动状态(WindowState属性)
  • 窗体标题(Title属性)
  • 始终在最前(TopMost属性)
  • 是否显示在任务栏(ShowInTaskbar)

四、定义异形窗体

使用异形窗体,可以将窗体的背景设置为透明,边框设置为空,然后利用控件做出异形的窗体,例如:

XAML:

1: <Window x:Class="WpfWindow.CustomerWindow"
2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4: Title="NonRectangularWindowSample" SizeToContent="WidthAndHeight"
5: MouseLeftButtonDown="NonRectangularWindow_MouseLeftButtonDown"
6: WindowStyle="None"
7: AllowsTransparency="True"
8: Background="Transparent">
9: <Canvas Width="200" Height="200" >
10: <Path Stroke="DarkGray" StrokeThickness="2">
11: <Path.Fill>
12: <LinearGradientBrush StartPoint="0.2,0" EndPoint="0.8,1" >
13: <GradientStop Color="White" Offset="0"></GradientStop>
14: <GradientStop Color="White" Offset="0.45"></GradientStop>
15: <GradientStop Color="LightBlue" Offset="0.9"></GradientStop>
16: <GradientStop Color="Gray" Offset="1"></GradientStop>

扩展:wpf学习笔记 / silverlight 弹出窗体 / wpf silverlight

17: </LinearGradientBrush>
18: </Path.Fill>
19: <Path.Data>
20: <PathGeometry>
21: <PathFigure StartPoint="40,20" IsClosed="True">
22: <LineSegment Point="160,20"></LineSegment>
23: <ArcSegment Point="180,40" Size="20,20" SweepDirection="Clockwise"></ArcSegment>
24: <LineSegment Point="180,80"></LineSegment>
25: <ArcSegment Point="160,100" Size="20,20" SweepDirection="Clockwise"></ArcSegment>
26: <LineSegment Point="90,100"></LineSegment>
27: <LineSegment Point="90,150"></LineSegment>
28: <LineSegment Point="60,100"></LineSegment>
29: <LineSegment Point="40,100"></LineSegment>
30: <ArcSegment Point="20,80" Size="20,20" SweepDirection="Clockwise"></ArcSegment>
31: <LineSegment Point="20,40"></LineSegment>
32: <ArcSegment Point="40,20" Size="20,20" SweepDirection="Clockwise"></ArcSegment>
33: </PathFigure>
34: </PathGeometry>
35: </Path.Data>
36: </Path>
37: <Label Width="200" Height="120" FontSize="15" HorizontalContentAlignment="Center" VerticalContentAlignment="Center">Drag Me</Label>
38: <Button Canvas.Left="155" Canvas.Top="30" Click="closeButtonRectangle_Click">
39: <Button.Template>
40: <ControlTemplate>
41: <Canvas>
42: <Rectangle Width="15" Height="15" Stroke="Black" RadiusX="3" RadiusY="3">
43: <Rectangle.Fill>
44: <SolidColorBrush x:Name="myAnimatedBrush" Color="Red" />
45: </Rectangle.Fill>
46: </Rectangle>
47: <Line X1="3" Y1="3" X2="12" Y2="12" Stroke="White" StrokeThickness="2"></Line>
48: <Line X1="12" Y1="3" X2="3" Y2="12" Stroke="White" StrokeThickness="2"></Line>
49: </Canvas>
50: </ControlTemplate>
51: </Button.Template>
52: </Button>
53: </Canvas>
54: </Window>

代码文件:

1: using System.Windows;
2: using System.Windows.Input;
3: 
4: namespace WpfWindow
5: {
6: public partial class CustomerWindow : Window
7: {
8: public CustomerWindow()
9: {
10: InitializeComponent();
11: }
12: 
13: void NonRectangularWindow_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
14: {
15: this.DragMove();
16: }
17: 
18: void closeButtonRectangle_Click(object sender, RoutedEventArgs e)
19: {
20: this.Close();
21: }
22: }
23: }

 

龙腾于海 WPF and Silverlight 学习笔记(六):WPF窗体

扩展:wpf学习笔记 / silverlight 弹出窗体 / wpf silverlight

本文标题:学习笔记-cubieboard学习笔记
本文地址: http://www.61k.com/1104047.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1