[源码下载]

重新想象 Windows 8 Store Apps (35) - 通知: Toast 详解

作者:webabcd

介绍
重新想象 Windows 8 Store Apps 之 通知

  • Toast - 基本应用参见 http://www.cnblogs.com/webabcd/archive/2013/06/17/3139740.html
  • Toast - 纯文本 toast
  • Toast - 图文 toast
  • Toast - toast 的提示音
  • Toast - 按计划弹出 toast

示例
1、演示纯文本 toast 的 4 个模板
Notification/Toast/ToastWithText.xaml

<Page
x:Class="XamlDemo.Notification.Toast.ToastWithText"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:XamlDemo.Notification.Toast"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="Transparent">
<StackPanel Margin="120 0 0 0"> <TextBox Name="lblMsg" Height="100" TextWrapping="Wrap" AcceptsReturn="True" FontSize="14.667" Margin="0 0 10 0" /> <Button Name="btnTextBodyWrap" Content="TextBodyWrap" Click="btnTextBodyWrap_Click_1" Margin="0 10 0 0" /> <Button Name="bntTextHeadingTextBodyWrap" Content="TextHeading TextBodyWrap" Click="bntTextHeadingTextBodyWrap_Click_1" Margin="0 10 0 0" /> <Button Name="bntTextHeadingWrapTextBody" Content="TextHeadingWrap TextBody" Click="bntTextHeadingWrapTextBody_Click_1" Margin="0 10 0 0" /> <Button Name="bntTextHeadingTextBody" Content="TextHeading TextBody1 TextBody2" Click="bntTextHeadingTextBody_Click_1" Margin="0 10 0 0" /> </StackPanel>
</Grid>
</Page>

Notification/Toast/ToastWithText.xaml.cs

/*
* 演示纯文本 toast 的 4 个模板
* 本示例的 Toast 的 XmlDocument 内容构造器采用一个开源项目,具体代码见:NotificationsExtensions/ToastContent.cs
*
* XmlDocument GetTemplateContent(ToastTemplateType type) - 获取系统支持的 Toast 模板
* ToastTemplateType.ToastText01, ToastTemplateType.ToastText02, ToastTemplateType.ToastText03, ToastTemplateType.ToastText04
*/ using NotificationsExtensions.ToastContent;
using Windows.UI.Notifications;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; namespace XamlDemo.Notification.Toast
{
public sealed partial class ToastWithText : Page
{
public ToastWithText()
{
this.InitializeComponent();
} private void btnTextBodyWrap_Click_1(object sender, RoutedEventArgs e)
{
IToastText01 templateContent = ToastContentFactory.CreateToastText01();
templateContent.TextBodyWrap.Text = "我是通知正文,可换行,最多三行。我是通知正文,可换行,最多三行。我是通知正文,可换行,最多三行。";
IToastNotificationContent toastContent = templateContent; ToastNotification toast = toastContent.CreateNotification();
ToastNotificationManager.CreateToastNotifier().Show(toast); lblMsg.Text = toastContent.GetContent();
} private void bntTextHeadingTextBodyWrap_Click_1(object sender, RoutedEventArgs e)
{
IToastText02 templateContent = ToastContentFactory.CreateToastText02();
templateContent.TextHeading.Text = "我是通知标题,不可以换行。我是通知标题,不可以换行。";
templateContent.TextBodyWrap.Text = "我是通知正文,可换行,最多两行。我是通知正文,可换行,最多两行。";
IToastNotificationContent toastContent = templateContent; ToastNotification toast = toastContent.CreateNotification();
ToastNotificationManager.CreateToastNotifier().Show(toast); lblMsg.Text = toastContent.GetContent();
} private void bntTextHeadingWrapTextBody_Click_1(object sender, RoutedEventArgs e)
{
IToastText03 templateContent = ToastContentFactory.CreateToastText03();
templateContent.TextHeadingWrap.Text = "我是通知标题,可换行,最多两行。我是通知标题,可换行,最多两行。";
templateContent.TextBody.Text = "我是通知正文,不可以换行。我是通知正文,不可以换行。";
IToastNotificationContent toastContent = templateContent; ToastNotification toast = toastContent.CreateNotification();
ToastNotificationManager.CreateToastNotifier().Show(toast); lblMsg.Text = toastContent.GetContent();
} private void bntTextHeadingTextBody_Click_1(object sender, RoutedEventArgs e)
{
IToastText04 templateContent = ToastContentFactory.CreateToastText04();
templateContent.TextHeading.Text = "我是通知标题,不可以换行。我是通知标题,不可以换行。";
templateContent.TextBody1.Text = "我是通知正文1,不可以换行。我是通知正文1,不可以换行。";
templateContent.TextBody2.Text = "我是通知正文2,不可以换行。我是通知正文2,不可以换行。";
IToastNotificationContent toastContent = templateContent; ToastNotification toast = toastContent.CreateNotification();
ToastNotificationManager.CreateToastNotifier().Show(toast); lblMsg.Text = toastContent.GetContent();
}
}
}

2、演示图文 toast 的 4 个模板
Notification/Toast/ToastWithImageText.xaml

<Page
x:Class="XamlDemo.Notification.Toast.ToastWithImageText"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:XamlDemo.Notification.Toast"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="Transparent">
<StackPanel Margin="120 0 0 0"> <TextBox Name="lblMsg" Height="100" TextWrapping="Wrap" AcceptsReturn="True" FontSize="14.667" Margin="0 0 10 0" /> <Button Name="btnTextBodyWrap" Content="TextBodyWrap" Click="btnTextBodyWrap_Click_1" Margin="0 10 0 0" /> <Button Name="bntTextHeadingTextBodyWrap" Content="TextHeading TextBodyWrap" Click="bntTextHeadingTextBodyWrap_Click_1" Margin="0 10 0 0" /> <Button Name="bntTextHeadingWrapTextBody" Content="TextHeadingWrap TextBody" Click="bntTextHeadingWrapTextBody_Click_1" Margin="0 10 0 0" /> <Button Name="bntTextHeadingTextBody" Content="TextHeading TextBody1 TextBody2" Click="bntTextHeadingTextBody_Click_1" Margin="0 10 0 0" /> </StackPanel>
</Grid>
</Page>

Notification/Toast/ToastWithImageText.xaml.cs

/*
* 演示图文 toast 的 4 个模板(注:图片不能大于 1024*1024 像素,不能大于 200KB)
* 本示例的 Toast 的 XmlDocument 内容构造器采用一个开源项目,具体代码见:NotificationsExtensions/ToastContent.cs
*
* XmlDocument GetTemplateContent(ToastTemplateType type) - 获取系统支持的 Toast 模板
* ToastTemplateType.ToastImageAndText01, ToastTemplateType.ToastImageAndText02, ToastTemplateType.ToastImageAndText03, ToastTemplateType.ToastImageAndText04
*
* 注:图片可以来自程序包内,可以来自 Application Data(仅支持对 local 中图片文件的引用),可以来自一个 http 的远程地址
*/ using NotificationsExtensions.ToastContent;
using System;
using Windows.UI.Notifications;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; namespace XamlDemo.Notification.Toast
{
public sealed partial class ToastWithImageText : Page
{
public ToastWithImageText()
{
this.InitializeComponent();
} private void btnTextBodyWrap_Click_1(object sender, RoutedEventArgs e)
{
IToastImageAndText01 templateContent = ToastContentFactory.CreateToastImageAndText01();
templateContent.TextBodyWrap.Text = "我是通知正文,可换行,最多三行。我是通知正文,可换行,最多三行。我是通知正文,可换行,最多三行。";
templateContent.Image.Src = "Assets/Logo.png"; // 用程序包内文件作通知图片
templateContent.Image.Alt = "altText";
IToastNotificationContent toastContent = templateContent; ToastNotification toast = toastContent.CreateNotification();
ToastNotificationManager.CreateToastNotifier().Show(toast); lblMsg.Text = toastContent.GetContent();
} private void bntTextHeadingTextBodyWrap_Click_1(object sender, RoutedEventArgs e)
{
IToastImageAndText02 templateContent = ToastContentFactory.CreateToastImageAndText02();
templateContent.TextHeading.Text = "我是通知标题,不可以换行。我是通知标题,不可以换行。";
templateContent.TextBodyWrap.Text = "我是通知正文,可换行,最多两行。我是通知正文,可换行,最多两行。";
templateContent.Image.Src = "ms-appx:///Assets/Logo.png"; // 用程序包内文件作通知图片
templateContent.Image.Alt = "altText";
IToastNotificationContent toastContent = templateContent; ToastNotification toast = toastContent.CreateNotification();
ToastNotificationManager.CreateToastNotifier().Show(toast); lblMsg.Text = toastContent.GetContent();
} private void bntTextHeadingWrapTextBody_Click_1(object sender, RoutedEventArgs e)
{
IToastImageAndText03 templateContent = ToastContentFactory.CreateToastImageAndText03();
templateContent.TextHeadingWrap.Text = "我是通知标题,可换行,最多两行。我是通知标题,可换行,最多两行。";
templateContent.TextBody.Text = "我是通知正文,不可以换行。我是通知正文,不可以换行。";
templateContent.Image.Src = "ms-appdata:///local/Logo.png"; // 用 Application Data 内文件作通知图片(注:仅支持 local 中的图片)
templateContent.Image.Alt = "altText";
IToastNotificationContent toastContent = templateContent; ToastNotification toast = toastContent.CreateNotification();
ToastNotificationManager.CreateToastNotifier().Show(toast); lblMsg.Text = toastContent.GetContent();
} private void bntTextHeadingTextBody_Click_1(object sender, RoutedEventArgs e)
{
IToastImageAndText04 templateContent = ToastContentFactory.CreateToastImageAndText04();
templateContent.TextHeading.Text = "我是通知标题,不可以换行。我是通知标题,不可以换行。";
templateContent.TextBody1.Text = "我是通知正文1,不可以换行。我是通知正文1,不可以换行。";
templateContent.TextBody2.Text = "我是通知正文2,不可以换行。我是通知正文2,不可以换行。";
templateContent.Image.Src = "http://pic.cnblogs.com/avatar/a14540.jpg?id=24173245"; // 用远程文件作通知图片
templateContent.Image.Alt = "altText";
IToastNotificationContent toastContent = templateContent; ToastNotification toast = toastContent.CreateNotification();
ToastNotificationManager.CreateToastNotifier().Show(toast); lblMsg.Text = toastContent.GetContent();
}
}
}

3、演示 Toast 的提示音
Notification/Toast/ToastWithSound.xaml

<Page
x:Class="XamlDemo.Notification.Toast.ToastWithSound"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:XamlDemo.Notification.Toast"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="Transparent">
<StackPanel Margin="120 0 0 0"> <TextBox Name="lblMsg" Height="100" TextWrapping="Wrap" AcceptsReturn="True" FontSize="14.667" Margin="0 0 10 0" /> <TextBlock Text="通知提示音列表" Margin="0 10 0 0" />
<ListBox Name="listBox" SelectionChanged="listBox_SelectionChanged_1" Margin="0 10 10 0">
<ListBoxItem Content="Default" />
<ListBoxItem Content="Mail" />
<ListBoxItem Content="SMS" />
<ListBoxItem Content="IM" />
<ListBoxItem Content="Reminder" />
<ListBoxItem Content="LoopingCall" />
<ListBoxItem Content="LoopingCall2" />
<ListBoxItem Content="LoopingAlarm" />
<ListBoxItem Content="LoopingAlarm2" />
<ListBoxItem Content="Silent" />
</ListBox>
</StackPanel>
</Grid>
</Page>

Notification/Toast/ToastWithSound.xaml.cs

/*
* 演示 Toast 的提示音
*
* 目前支持的 Toast 提示音共有以下几种:
* Default, Mail, SMS, IM, Reminder, LoopingCall, LoopingCall2, LoopingAlarm, LoopingAlarm2, Silent
*/ using NotificationsExtensions.ToastContent;
using System;
using Windows.UI.Notifications;
using Windows.UI.Xaml.Controls; namespace XamlDemo.Notification.Toast
{
public sealed partial class ToastWithSound : Page
{
public ToastWithSound()
{
this.InitializeComponent();
} private void listBox_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
{
string audioType = (listBox.SelectedItem as ListBoxItem).Content.ToString(); IToastText02 toastContent = ToastContentFactory.CreateToastText02();
toastContent.TextHeading.Text = "Sound:";
toastContent.TextBodyWrap.Text = audioType;
toastContent.Audio.Content = (ToastAudioContent)Enum.Parse(typeof(ToastAudioContent), audioType); /*
* LoopingCall, LoopingCall2, LoopingAlarm, LoopingAlarm2 这 4 种提示音仅针对长时通知,且需指定为循环提示音
*/
if (audioType == "LoopingCall" || audioType == "LoopingCall2" || audioType == "LoopingAlarm" || audioType == "LoopingAlarm2")
{
toastContent.Duration = ToastDuration.Long;
toastContent.Audio.Loop = true;
} ToastNotification toast = toastContent.CreateNotification();
ToastNotificationManager.CreateToastNotifier().Show(toast); lblMsg.Text = toastContent.GetContent();
}
}
}

4、演示如何按计划显示 Toast 通知
Notification/Toast/ScheduledToast.xaml

<Page
x:Class="XamlDemo.Notification.Toast.ScheduledToast"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:XamlDemo.Notification.Toast"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="Transparent">
<StackPanel Margin="120 0 0 0"> <!--显示当前 app 的全部 ScheduledToastNotification 对象列表-->
<ListBox Name="listBox" Width="800" Height="300" HorizontalAlignment="Left">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding ToastId}" VerticalAlignment="Center" />
<TextBlock Text="{Binding Text}" Margin="15 0 0 0" VerticalAlignment="Center" />
<HyperlinkButton Name="btnRemove" Content="删除此 ScheduledToastNotification" Tag="{Binding ToastId}" Margin="15 0 0 0" Click="btnRemove_Click_1" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox> <Button Name="btnScheduledToast" Content="ScheduledToastNotification 的 Demo(3 秒后弹出 Toast 通知,然后每隔 60 秒再弹出一次,共重复 5 次)" Click="btnScheduledToast_Click_1" Margin="0 10 0 0" /> </StackPanel>
</Grid>
</Page>

Notification/Toast/ScheduledToast.xaml.cs

/*
* 演示如何按计划显示 Toast 通知
*
* ScheduledToastNotification - 按计划显示 Toast 通知
* Content - Toast 的内容,XmlDocument 类型的数据,只读,其需要在构造函数中指定
* DeliveryTime - 显示 Toast 通知的时间,只读,其需要在构造函数中指定
* SnoozeInterval - 循环显示 Toast 通知的间隔时长(60 秒 - 60 分之间),只读,其需要在构造函数中指定
* MaximumSnoozeCount - 循环的最大次数(1 - 5 次)
* Id - ScheduledToastNotification 的标识
*
* ToastNotifier - Toast 通知器
* AddToSchedule() - 将指定的 ScheduledToastNotification 添加到计划列表
* RemoveFromSchedule() - 从计划列表中移除指定的 ScheduledToastNotification
* GetScheduledToastNotifications() - 获取当前 app 的全部 ScheduledToastNotification 集合
*/ using NotificationsExtensions.ToastContent;
using System;
using System.Collections.Generic;
using Windows.UI.Notifications;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation; namespace XamlDemo.Notification.Toast
{
public sealed partial class ScheduledToast : Page
{
public ScheduledToast()
{
this.InitializeComponent();
} protected override void OnNavigatedTo(NavigationEventArgs e)
{
ShowScheduledToasts();
} // 添加指定的 ScheduledToastNotification 到计划列表中
private void btnScheduledToast_Click_1(object sender, RoutedEventArgs e)
{
IToastText02 toastContent = ToastContentFactory.CreateToastText02();
toastContent.TextHeading.Text = "ScheduledToastNotification Demo";
toastContent.TextBodyWrap.Text = "received: " + DateTime.Now.ToString("hh:mm:ss"); // 3 秒后显示 Toast,然后每隔 60 秒再显示一次 Toast(循环显示 5 次)
ScheduledToastNotification toast = new ScheduledToastNotification(toastContent.GetXml(), DateTime.Now.AddSeconds(), TimeSpan.FromSeconds(), ); string toastId = new Random().Next(, ).ToString();
toast.Id = toastId; // 将指定的 ScheduledToastNotification 添加进计划列表
ToastNotifier toastNotifier = ToastNotificationManager.CreateToastNotifier();
toastNotifier.AddToSchedule(toast); ShowScheduledToasts();
} // 显示当前 app 的全部 ScheduledToastNotification 列表
private void ShowScheduledToasts()
{
List<MyScheduledToast> dataSource = new List<MyScheduledToast>(); // 获取当前 app 计划列表中的全部 ScheduledToastNotification 对象列表
ToastNotifier toastNotifier = ToastNotificationManager.CreateToastNotifier();
IReadOnlyList<ScheduledToastNotification> scheduledToasts = toastNotifier.GetScheduledToastNotifications(); int toastCount = scheduledToasts.Count;
for (int i = ; i < toastCount; i++)
{
ScheduledToastNotification toast = scheduledToasts[i]; dataSource.Add(new MyScheduledToast()
{
ToastId = toast.Id,
Text = toast.Content.GetElementsByTagName("text")[].InnerText
});
} listBox.ItemsSource = dataSource;
} // 根据 ToastId 删除指定的 ScheduledToastNotification
private void btnRemove_Click_1(object sender, RoutedEventArgs e)
{
string toastId = (string)(sender as FrameworkElement).Tag; // 获取当前 app 计划列表中的全部 ScheduledToastNotification 对象列表
ToastNotifier toastNotifier = ToastNotificationManager.CreateToastNotifier();
IReadOnlyList<ScheduledToastNotification> scheduledToasts = toastNotifier.GetScheduledToastNotifications(); int toastLength = scheduledToasts.Count;
for (int i = ; i < toastLength; i++)
{
if (scheduledToasts[i].Id == toastId)
{
// 从计划列表中移除指定的 ScheduledToastNotification 对象
toastNotifier.RemoveFromSchedule(scheduledToasts[i]); ShowScheduledToasts(); break;
}
}
} class MyScheduledToast
{
public string ToastId { get; set; }
public string Text { get; set; }
}
}
}

OK
[源码下载]

重新想象 Windows 8 Store Apps (35) - 通知: Toast 详解的更多相关文章

  1. 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解

    [源码下载] 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 通知 Tile ...

  2. 重新想象 Windows 8 Store Apps (34) - 通知: Toast Demo, Tile Demo, Badge Demo

    [源码下载] 重新想象 Windows 8 Store Apps (34) - 通知: Toast Demo, Tile Demo, Badge Demo 作者:webabcd 介绍重新想象 Wind ...

  3. 重新想象 Windows 8 Store Apps 系列文章索引

    [源码下载][重新想象 Windows 8.1 Store Apps 系列文章] 重新想象 Windows 8 Store Apps 系列文章索引 作者:webabcd 1.重新想象 Windows ...

  4. 重新想象 Windows 8 Store Apps (67) - 后台任务: 推送通知

    [源码下载] 重新想象 Windows 8 Store Apps (67) - 后台任务: 推送通知 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 后台任务 推送通 ...

  5. 重新想象 Windows 8 Store Apps (38) - 契约: Search Contract

    [源码下载] 重新想象 Windows 8 Store Apps (38) - 契约: Search Contract 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 ...

  6. 重新想象 Windows 8 Store Apps (39) - 契约: Share Contract

    [源码下载] 重新想象 Windows 8 Store Apps (39) - 契约: Share Contract 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之  ...

  7. 重新想象 Windows 8 Store Apps (40) - 剪切板: 复制/粘贴文本, html, 图片, 文件

    [源码下载] 重新想象 Windows 8 Store Apps (40) - 剪切板: 复制/粘贴文本, html, 图片, 文件 作者:webabcd 介绍重新想象 Windows 8 Store ...

  8. 重新想象 Windows 8 Store Apps (51) - 输入: 涂鸦板

    [源码下载] 重新想象 Windows 8 Store Apps (51) - 输入: 涂鸦板 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 涂鸦板 通过 Poin ...

  9. 重新想象 Windows 8 Store Apps (53) - 绑定: 与 ObservableCollection CollectionViewSource VirtualizedFilesVector VirtualizedItemsVector 绑定

    [源码下载] 重新想象 Windows 8 Store Apps (53) - 绑定: 与 ObservableCollection CollectionViewSource VirtualizedF ...

随机推荐

  1. BW:如何加载和生成自定义的层次结构,在不使用平面文件的SAP业务信息仓库

    介绍 通常情况下,报告需要在一个类似树的结构来显示数据.通过启用此特性在SAP BW层次结构.高级数据显示的层次结构的顶层节点.更详细的数据可以向下钻取到的层次结构中的下级节点的可视化. 考虑一个例子 ...

  2. 移动应用安全开发指南(Android)--完结篇(http://www.bubuko.com/infodetail-577312.html)

    1.认证和授权 概述 认证是用来证明用户身份合法性的过程,授权是用来证明用户可以合法地做哪些事的过程,这两个过程一般是在服务器端执行的,但也有的APP出于性能提升或用户体验等原因,将其做在客户端完成, ...

  3. CHECK MEMBER TYPE

    检查类里是否存在某种类型的几种方法,以检查xxx类型为例:方法1: template<class T> class has_member_type_Type { ]; }; templat ...

  4. Mac eclipse找不到source的解决办法

    因为要搞hadoop,最终还是逃不过写java的命运... eclipse里想查具体函数源代码时,如果报错说找不到源: 试试ls -l which java,在这个目录周围看看能不能找到src.zip ...

  5. dell新服务器安装系统

    公司新采购的dell 630服务器,但是第一次安装操作系统的时候比较麻烦,每次都要重新琢磨下. 现在记录一下,以供下次参考 1.插入服务器自带光盘,设置CD启动,选择部署OS 2.配置raid,然后插 ...

  6. SAP GUI SAPLOGON.INI

    GUI是SAP系统最常用的客户端,在一台客户机上,利用GUI可以连接多套SAP系统(连接方法参见<客户端连接配置(SAP GUI 710)>),也可以设置多个快捷方式登录(参见<用快 ...

  7. 关于Task类处理多线程简单示例

    1.定义一个线程 var task1 = Task.Factory.StartNew(() => DoSomeWork()):方法如下:          private static obje ...

  8. Eplan中电缆源和目标的确定规则

    使用过Eplan的都知道,生成电缆总览时会有源和目标,电缆是怎么定义源和目标的呢,下面给大家讲解.确定源和目标按照下列规则确定电缆的源和目标: 首先考虑结构标识符中标识性的层结构说明.如果两端都是端子 ...

  9. 【原创】14. MYSQL++之SSQLS(原理解析)

    从之前所介绍的SSQLS的介绍中我们可以感受到,SSQLS的精髓应该在sql_create_#这个宏,他所创建出来的这个结构体将会是突破的关键,所以我将会从以下顺序入手. 1. sql_create_ ...

  10. 《Programming with Objective-C》第八章 Working with Blocks

    Blocks are Objective-C objects, which means they can be added to collections like NSArray or NSDicti ...