﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-wintysのブログ-随笔分类-.NET</title><link>http://www.blogjava.net/wintys/category/41959.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 02 Apr 2013 07:29:13 GMT</lastBuildDate><pubDate>Tue, 02 Apr 2013 07:29:13 GMT</pubDate><ttl>60</ttl><item><title>[原]开发自己的Windows Live Writer插件</title><link>http://www.blogjava.net/wintys/archive/2009/10/05/dotNET_WindowLiveWriter_WintyCodeArea.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Mon, 05 Oct 2009 11:26:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/10/05/dotNET_WindowLiveWriter_WintyCodeArea.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/297273.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/10/05/dotNET_WindowLiveWriter_WintyCodeArea.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/297273.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/297273.html</trackback:ping><description><![CDATA[<p>[标题]: 开发自己的Windows Live Writer插件 <br />
[时间]:2009-10-04 <br />
[摘要]: 开发一个Windows Live Writer插件，在写博客时，添加自己的代码样式。最终效果是，在Windows Live Writer中选中代码，然后点击插件，将代码包含在&lt;div class="mycode"&gt;your code&lt;/div&gt;中。 <br />
[关键字]: plugin、Windows Live Writer、code、format、highlight、 插件、博客、blog、msi、package、打包、C#、前缀、后缀、简单代码、样式<br />
[环境]: Windows Live Writer 14.0.8089.726 zh-cn, Visual Studio 2008 , Windows XP SP3 , Wordpress 2.8.4 <br />
[作者]:Winty&nbsp; (wintys@gmail.com) <a href="http://www.blogjava.net/wintys">http://www.blogjava.net/wintys</a></p>
<p>[正文]: </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开发一个Windows Live Writer插件，在写博客时，添加自己的代码样式。最终效果是，在Windows Live Writer中选中代码，然后点击插件，将代码包含在&lt;div class="mycode"&gt;your code&lt;/div&gt;中。当然要在最终发表的博客上添加.mycode 的CSS样式才有效果。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .mycode样式如下:</p>
<div class="mycode">.mycode { <br />
&nbsp;&nbsp;&nbsp; margin: 10px; <br />
&nbsp;&nbsp;&nbsp; padding: 10px; <br />
&nbsp;&nbsp;&nbsp; background: #DDEDFB; <br />
&nbsp;&nbsp;&nbsp; border: 1px solid #428EDE;&nbsp; <br />
&nbsp;&nbsp;&nbsp; text-align: left; <br />
&nbsp;&nbsp;&nbsp; /*width:500px;*/ <br />
&nbsp;&nbsp;&nbsp; overflow-x:auto; <br />
&nbsp;&nbsp;&nbsp; font-size:20px; <br />
&nbsp;&nbsp;&nbsp; white-space:nowrap; <br />
&nbsp;&nbsp;&nbsp; *white-space: normal; <br />
&nbsp;&nbsp;&nbsp; WORD-WRAP: break-word;/*IE*/ <br />
&nbsp;&nbsp;&nbsp; word-break:break-all;/*IE*/ <br />
}</div>
<pre>选中代码，点击"WintyCodeArea":</pre>
<pre><a href="http://www.blogjava.net/images/blogjava_net/wintys/WindowsLiveWriter/WindowsLiveWriter_11843/image_4.png"><img style="border-width: 0px; display: inline;" title="image" alt="image" src="http://www.blogjava.net/images/blogjava_net/wintys/WindowsLiveWriter/WindowsLiveWriter_11843/image_thumb_1.png" border="0" height="253" width="598" /></a> </pre>
<pre>&nbsp;</pre>
<pre>效果如下图</pre>
<pre>(在Writer需启用"使用主题编辑"，并已从博客中获取主题，才能立即看到效果):</pre>
<pre><a href="http://www.blogjava.net/images/blogjava_net/wintys/WindowsLiveWriter/WindowsLiveWriter_11843/image_6.png"><img style="border-width: 0px; display: inline;" title="image" alt="image" src="http://www.blogjava.net/images/blogjava_net/wintys/WindowsLiveWriter/WindowsLiveWriter_11843/image_thumb_2.png" border="0" height="226" width="605" /></a> </pre>
<pre>&nbsp;</pre>
<h3>0、准备工作</h3>
<ul>
    <li>在Visual Studio 2008中新建C#"Class Library"项目
    </li>
    <li>在项目中添加References:"C:\Program Files\Windows Live\Writer\WindowsLive.Writer.Api.dll"
    </li>
    <li>在项目属性的"Build Events"=&gt;"Post Build Event command line"添加:(XCOPY /D /Y /R "$(TargetPath)" "C:\Program Files\Windows Live\Writer\Plugins") </li>
</ul>
<p>&nbsp;</p>
<h3>1、"Class Library"主类，继承于ContentSource</h3>
<p>WintyCodeArea.cs:</p>
<div class="mycode">
<p>using System.Windows.Forms; <br />
using WindowsLive.Writer.Api; </p>
<p>/* <br />
2009-10-02</p>
<p><a href="http://www.blogjava.net/wintys" target="_blank">Winty</a></p>
<p><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#119;&#105;&#110;&#116;&#121;&#115;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">wintys@gmail.com</a></p>
<p><a href="http://www.blogjava.net/wintys&quot;">http://www.blogjava.net/wintys</a> <br />
&nbsp; */ <br />
namespace MyWindowsLiveWriterPlugin <br />
{ <br />
&nbsp;&nbsp;&nbsp; /*Plugin 主类*/ <br />
&nbsp;&nbsp;&nbsp; [WriterPlugin("{7DFB5431-D7DA-4e61-9E4B-056D30DFDB63}", <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "WintyCodeArea", <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PublisherUrl = "<a href="http://www.blogjava.net/wintys&quot;">http://www.blogjava.net/wintys"</a>, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImagePath = "image.jpg", <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HasEditableOptions = true, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Description = "Insert &lt;div class=\"mycode\"&gt;your code&lt;/div&gt;\nhttp://www.blogjava.net/wintys\nwintys@gmail.com")] <br />
&nbsp;&nbsp;&nbsp; [InsertableContentSource("WintyCodeArea")] <br />
&nbsp;&nbsp;&nbsp; public class WintyCodeArea : <strong>ContentSource</strong> <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WintyCodeAreaSettings m_settings; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public override void Initialize(IProperties pluginOptions) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.Initialize(pluginOptions); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_settings = new WintyCodeAreaSettings(pluginOptions); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public override DialogResult CreateContent(IWin32Window dialogOwner, ref string content) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string originalContent = content; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; content = m_settings.FrontCode; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(m_settings.EscapeCode) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; content +=&nbsp; System.Web.HttpUtility.HtmlEncode(originalContent); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; content += originalContent; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; content += m_settings.BackCode; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return DialogResult.OK; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public override void EditOptions(IWin32Window dialogOwner) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SettingForm settingForm = new SettingForm(m_settings); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; settingForm.ShowDialog(dialogOwner); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp; } <br />
} </p>
</div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Initialize()、EditOptions()并不是必须的，这里因为用到了"设置选项"窗口，才需要。</p>
<p>CreateContent(IWin32Window dialogOwner, ref string content)在此为必须，content传入值为Live Writer<strong>当前被选中的高亮区的HTML代码</strong>，无论在编辑还是在源代码视图中都是这样的。content的传出值为你修改后的HTML代码，最终将在Live Writer中显示的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在CreateContent()中也可以弹出窗体，此处并未用到。以下是代码示例:</p>
<div class="mycode">
<p>public override DialogResult CreateContent(IWin32Window dialogOwner, ref string content) <br />
{ <br />
&nbsp;&nbsp;&nbsp; using (InsertCodeForm insertCodeForm = new InsertCodeForm()) <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DialogResult result = insertCodeForm.ShowDialog(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; content = insertCodeForm.MyCode; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result; <br />
&nbsp;&nbsp;&nbsp; } <br />
} </p>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 相应的InsertCodeForm类的部分代码如下:</p>
<div class="mycode">
<p>public partial class InsertCodeForm : Form <br />
{ <br />
&nbsp;&nbsp;&nbsp; private string m_MyCode; <br />
&nbsp;&nbsp;&nbsp; public string MyCode <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get { return m_MyCode; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set { m_MyCode = value; } <br />
&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp; public InsertCodeForm() <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InitializeComponent(); <br />
&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp; private void buttonInsert_Click(object sender, EventArgs e) <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (textBoxCode.Text == string.Empty) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_MyCode = "&lt;div class=\"mycode\"&gt;"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_MyCode += System.Web.HttpUtility.HtmlEncode(textBoxCode.Text); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_MyCode += "&lt;/div&gt;";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.DialogResult = DialogResult.OK; <br />
&nbsp;&nbsp;&nbsp; } <br />
} </p>
</div>
<p><br />
&nbsp;</p>
<h3>2、用于设置WintyCodeArea插件行为的类 </h3>
<p>WintyCodeAreaSettings.cs: </p>
<div class="mycode">
<p>using WindowsLive.Writer.Api; </p>
<p>namespace MyWindowsLiveWriterPlugin <br />
{ <br />
&nbsp;&nbsp;&nbsp; class WintyCodeAreaSettings <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>IProperties m_properties;</strong> </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private const string FRONT_CODE = "FRONT_CODE";//前缀代码 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private const string BACK_CODE = "BACK_CODE";//后缀代码 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private const string ESCAPE_CODE = "ESCAPE_CODE";//是否转义代码 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public const string DEFAULT_FRONT_CODE = "&lt;div class=\"mycode\"&gt;"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public const string DEFAULT_BACK_CODE = "&lt;/div&gt;"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public const bool&nbsp;&nbsp; DEFAULT_ESCAPE_CODE = false; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public WintyCodeAreaSettings(IProperties properties) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_properties = properties; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string FrontCode <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return m_properties.GetString(FRONT_CODE, DEFAULT_FRONT_CODE); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_properties.SetString(FRONT_CODE, value); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string BackCode <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return m_properties.GetString(BACK_CODE, DEFAULT_BACK_CODE); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_properties.SetString(BACK_CODE, value); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public bool EscapeCode <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return m_properties.GetBoolean(ESCAPE_CODE, DEFAULT_ESCAPE_CODE); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_properties.SetBoolean(ESCAPE_CODE, value); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp; } <br />
} </p>
</div>
<p>&nbsp; </p>
<h3>3、"设置窗口"的代码 </h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 点击"工具=&gt;选项"就可以找到这个设置窗口。</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/wintys/WindowsLiveWriter/WindowsLiveWriter_11843/image_8.png"><img style="border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="image" alt="image" src="http://www.blogjava.net/images/blogjava_net/wintys/WindowsLiveWriter/WindowsLiveWriter_11843/image_thumb_3.png" border="0" height="408" width="565" /></a></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WintyCodeArea的设置窗口: </p>
<p><a href="http://www.blogjava.net/images/blogjava_net/wintys/WindowsLiveWriter/WindowsLiveWriter_11843/image_2.png"><img style="border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="image" alt="image" src="http://www.blogjava.net/images/blogjava_net/wintys/WindowsLiveWriter/WindowsLiveWriter_11843/image_thumb.png" border="0" height="308" width="447" /></a></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所谓的转义原始内容，就是将所选内容中的特殊HTML字符进行编码(空格与换行不变)。</p>
<p>&nbsp;</p>
<p>SettingForm.cs: </p>
<div class="mycode">
<p>using System; <br />
using System.Windows.Forms; </p>
<p>namespace MyWindowsLiveWriterPlugin <br />
{ <br />
&nbsp;&nbsp;&nbsp; partial class SettingForm : Form <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>WintyCodeAreaSettings</strong> m_settings; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public SettingForm(WintyCodeAreaSettings settings) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InitializeComponent(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Winty's initialization <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_settings = settings; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtFrontCode.Text = m_settings.FrontCode; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chkEscapeCode.Checked = m_settings.EscapeCode; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; textBackCode.Text = m_settings.BackCode; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*保存设置*/ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void btnOK_Click(object sender, EventArgs e) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_settings.FrontCode = txtFrontCode.Text; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_settings.EscapeCode = chkEscapeCode.Checked; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_settings.BackCode = textBackCode.Text; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Close(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*恢复默认设置*/ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void btnRestoreDefault_Click(object sender, EventArgs e) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_settings.FrontCode = WintyCodeAreaSettings.DEFAULT_FRONT_CODE; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_settings.EscapeCode = WintyCodeAreaSettings.DEFAULT_ESCAPE_CODE; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_settings.BackCode = WintyCodeAreaSettings.DEFAULT_BACK_CODE; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtFrontCode.Text = m_settings.FrontCode; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chkEscapeCode.Checked = m_settings.EscapeCode; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; textBackCode.Text = m_settings.BackCode; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp; } <br />
} </p>
</div>
<p>&nbsp; </p>
<p>SettingForm.Designer.cs(这是Visual Studio根据设计的窗体生成的代码): </p>
<div class="mycode">
<p>namespace MyWindowsLiveWriterPlugin <br />
{ <br />
&nbsp;&nbsp;&nbsp; partial class SettingForm <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Required designer variable. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private System.ComponentModel.IContainer components = null; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Clean up any resources being used. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="disposing"&gt;true if managed resources should be disposed; otherwise, false.&lt;/param&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected override void Dispose(bool disposing) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (disposing &amp;&amp; (components != null)) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; components.Dispose(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.Dispose(disposing); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #region Windows Form Designer generated code </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Required method for Designer support - do not modify <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// the contents of this method with the code editor. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void InitializeComponent() <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.btnOK = new System.Windows.Forms.Button(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.chkEscapeCode = new System.Windows.Forms.CheckBox(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.labelFont = new System.Windows.Forms.Label(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.labelBack = new System.Windows.Forms.Label(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.txtFrontCode = new System.Windows.Forms.TextBox(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.textBackCode = new System.Windows.Forms.TextBox(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.btnRestoreDefault = new System.Windows.Forms.Button(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.SuspendLayout(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // btnOK <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.btnOK.Location = new System.Drawing.Point(222, 211); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.btnOK.Name = "btnOK"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.btnOK.Size = new System.Drawing.Size(113, 29); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.btnOK.TabIndex = 0; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.btnOK.Text = "设置"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.btnOK.UseVisualStyleBackColor = true; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.btnOK.Click += new System.EventHandler(this.btnOK_Click); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // chkEscapeCode <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.chkEscapeCode.AutoSize = true; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.chkEscapeCode.Location = new System.Drawing.Point(127, 94); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.chkEscapeCode.Name = "chkEscapeCode"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.chkEscapeCode.Size = new System.Drawing.Size(96, 16); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.chkEscapeCode.TabIndex = 1; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.chkEscapeCode.Text = "转义原始内容"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.chkEscapeCode.UseVisualStyleBackColor = true; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // labelFont <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.labelFont.AutoSize = true; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.labelFont.Location = new System.Drawing.Point(48, 12); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.labelFont.Name = "labelFont"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.labelFont.Size = new System.Drawing.Size(53, 12); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.labelFont.TabIndex = 2; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.labelFont.Text = "前缀代码"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // labelBack <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.labelBack.AutoSize = true; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.labelBack.Location = new System.Drawing.Point(48, 125); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.labelBack.Name = "labelBack"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.labelBack.Size = new System.Drawing.Size(53, 12); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.labelBack.TabIndex = 4; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.labelBack.Text = "后缀代码"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // txtFrontCode <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.txtFrontCode.Location = new System.Drawing.Point(125, 12); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.txtFrontCode.Multiline = true; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.txtFrontCode.Name = "txtFrontCode"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.txtFrontCode.Size = new System.Drawing.Size(247, 64); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.txtFrontCode.TabIndex = 5; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // textBackCode <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.textBackCode.Location = new System.Drawing.Point(125, 125); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.textBackCode.Multiline = true; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.textBackCode.Name = "textBackCode"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.textBackCode.Size = new System.Drawing.Size(247, 64); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.textBackCode.TabIndex = 6; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // btnRestoreDefault <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.btnRestoreDefault.Location = new System.Drawing.Point(88, 211); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.btnRestoreDefault.Name = "btnRestoreDefault"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.btnRestoreDefault.Size = new System.Drawing.Size(106, 29); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.btnRestoreDefault.TabIndex = 7; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.btnRestoreDefault.Text = "恢复默认设置"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.btnRestoreDefault.UseVisualStyleBackColor = true; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.btnRestoreDefault.Click += new System.EventHandler(this.btnRestoreDefault_Click); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // SettingForm <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.ClientSize = new System.Drawing.Size(420, 252); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Controls.Add(this.btnRestoreDefault); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Controls.Add(this.textBackCode); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Controls.Add(this.txtFrontCode); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Controls.Add(this.labelBack); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Controls.Add(this.labelFont); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Controls.Add(this.chkEscapeCode); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Controls.Add(this.btnOK); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Name = "SettingForm"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Text = "WintyCodeArea Settings"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.ResumeLayout(false); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.PerformLayout(); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private System.Windows.Forms.Button btnOK; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private System.Windows.Forms.CheckBox chkEscapeCode; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private System.Windows.Forms.Label labelFont; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private System.Windows.Forms.Label labelBack; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private System.Windows.Forms.TextBox txtFrontCode; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private System.Windows.Forms.TextBox textBackCode; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private System.Windows.Forms.Button btnRestoreDefault; <br />
&nbsp;&nbsp;&nbsp; } <br />
} </p>
</div>
<p>&nbsp;</p>
<h3>4、总结</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 工程最终生成WintyCodeArea.dll，将其复制到"C:\Program Files\Windows Live\Writer\Plugins"目录，启动Windows Live Writer就可以使用这个插件了。或将其做成WintyCodeAreaWLWPluginSetup.msi(见附件)，点安装即可(msi制作方法参考[11])。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此插件主要供自己使用，其他人可能不会想要我的这种效果，所以暂命名WintyCodeArea。但是除了添加&lt;div class="mycode"&gt;your code&lt;/div&gt;外，还可以进行代码转义设置，并且前后缀代码都可以自定义，根据需要自己添加前缀后缀代码就行了，所以，希望对别人有点用处。</p>
<p>&nbsp;</p>
<p>补充:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果插件需要访问剪贴板，可参考如下代码:</p>
<p>//System.Windows.Forms.Clipboard</p>
<p>IDataObject iData = Clipboard.GetDataObject(); <br />
if (iData.GetDataPresent(DataFormats.Text)) <br />
{ <br />
&nbsp;&nbsp;&nbsp; str = (String)iData.GetData(DataFormats.Text); <br />
&nbsp;&nbsp;&nbsp; ...... <br />
}</p>
<p>&nbsp;</p>
<p>[参考资料]: </p>
<p>[1]*《<a href="http://www.devx.com/codemag/Article/38214/1954">Developing Plugins for Windows Live Writer</a> 》 : <a title="http://www.devx.com/codemag/Article/38214/1954" href="http://www.devx.com/codemag/Article/38214/1954">http://www.devx.com/codemag/Article/38214/1954</a></p>
<p>[2]*《<a href="http://www.cnblogs.com/dflying/archive/2006/12/03/580602.html">为Windows Live Writer开发插件&#8212;&#8212;InsertSearchPageLink</a>》 : <a title="http://www.cnblogs.com/dflying/archive/2006/12/03/580602.html" href="http://www.cnblogs.com/dflying/archive/2006/12/03/580602.html">http://www.cnblogs.com/dflying/archive/2006/12/03/580602.html</a></p>
<p>[3]*《<a href="http://blog.boyet.com/blog/blog/writing-a-simple-windows-live-writer-plugin/">Writing a simple Windows Live Writer plugin</a>》 : <a title="http://blog.boyet.com/blog/blog/writing-a-simple-windows-live-writer-plugin/" href="http://blog.boyet.com/blog/blog/writing-a-simple-windows-live-writer-plugin/">http://blog.boyet.com/blog/blog/writing-a-simple-windows-live-writer-plugin/</a></p>
<p>[4] 《<a href="http://www.liveside.net/developer/archive/2008/06/03/the-new-live-writer-sdk.aspx">The New Live Writer SDK</a>》: <a title="http://www.liveside.net/developer/archive/2008/06/03/the-new-live-writer-sdk.aspx" href="http://www.liveside.net/developer/archive/2008/06/03/the-new-live-writer-sdk.aspx">http://www.liveside.net/developer/archive/2008/06/03/the-new-live-writer-sdk.aspx</a></p>
<p>[5] 《<a href="http://www.liveside.net/developer/archive/2006/10/19/Writing-Plugins-For-Windows-Live-Writer-_2D00_-Working-With-Forms.aspx">Writing Plugins For Windows Live Writer - Working With Forms</a>》&nbsp; : <a title="http://www.liveside.net/developer/archive/2006/10/19/Writing-Plugins-For-Windows-Live-Writer-_2D00_-Working-With-Forms.aspx" href="http://www.liveside.net/developer/archive/2006/10/19/Writing-Plugins-For-Windows-Live-Writer-_2D00_-Working-With-Forms.aspx">http://www.liveside.net/developer/archive/2006/10/19/Writing-Plugins-For-Windows-Live-Writer-_2D00_-Working-With-Forms.aspx</a></p>
<p>[6] 《<a href="http://www.liveside.net/developer/archive/2007/10/20/writing-plugins-for-windows-live-writer-using-pluginhttprequest-instead-of-httpwebrequest.aspx">Writing Plugins For Windows Live Writer - Using PluginHttpRequest Instead of HttpWebRequest</a>》 : <a title="http://www.liveside.net/developer/archive/2007/10/20/writing-plugins-for-windows-live-writer-using-pluginhttprequest-instead-of-httpwebrequest.aspx" href="http://www.liveside.net/developer/archive/2007/10/20/writing-plugins-for-windows-live-writer-using-pluginhttprequest-instead-of-httpwebrequest.aspx">http://www.liveside.net/developer/archive/2007/10/20/writing-plugins-for-windows-live-writer-using-pluginhttprequest-instead-of-httpwebrequest.aspx</a></p>
<p>[7] 《<a href="http://blog.benhall.me.uk/2007/09/windows-live-writer-plugin-properties.html">Windows Live Writer Plugin - Properties Panel</a>》 : <a title="http://blog.benhall.me.uk/2007/09/windows-live-writer-plugin-properties.html" href="http://blog.benhall.me.uk/2007/09/windows-live-writer-plugin-properties.html">http://blog.benhall.me.uk/2007/09/windows-live-writer-plugin-properties.html</a></p>
<p>[8] 《<a href="http://blog.benhall.me.uk/2007/09/windows-live-writer-plugin-display-form.html">Windows Live Writer Plugin - Display a form / OpenFileDialog</a>》 :&nbsp; <a title="http://blog.benhall.me.uk/2007/09/windows-live-writer-plugin-display-form.html" href="http://blog.benhall.me.uk/2007/09/windows-live-writer-plugin-display-form.html">http://blog.benhall.me.uk/2007/09/windows-live-writer-plugin-display-form.html</a></p>
<p>[9] LiveSide Source Code : <a title="http://cid-fabdddc5cad93494.skydrive.live.com/self.aspx/LiveSide%20-%20Public/SourceCode/MyNewPlugin%20-%20Adding%20An%20Icon.zip?wa=wsignin1.0&amp;sa=732043521" href="http://cid-fabdddc5cad93494.skydrive.live.com/self.aspx/LiveSide%20-%20Public/SourceCode/MyNewPlugin%20-%20Adding%20An%20Icon.zip?wa=wsignin1.0&amp;sa=732043521">http://cid-fabdddc5cad93494.skydrive.live.com/self.aspx/LiveSide%20-%20Public/SourceCode/MyNewPlugin%20-%20Adding%20An%20Icon.zip?wa=wsignin1.0&amp;sa=732043521</a></p>
<p>[10] 《<a href="http://blog.benhall.me.uk/2007/09/windows-live-writer-plugin-hello-world.html">Windows Live Writer Plugin - Hello World!</a>》 : <a title="http://blog.benhall.me.uk/2007/09/windows-live-writer-plugin-hello-world.html" href="http://blog.benhall.me.uk/2007/09/windows-live-writer-plugin-hello-world.html">http://blog.benhall.me.uk/2007/09/windows-live-writer-plugin-hello-world.html</a></p>
<p>[11]*《<a href="http://blog.benhall.me.uk/2007/10/windows-live-writer-plugin-installation.html">Windows Live Writer Plugin - Installation</a>》 : <a title="http://blog.benhall.me.uk/2007/10/windows-live-writer-plugin-installation.html" href="http://blog.benhall.me.uk/2007/10/windows-live-writer-plugin-installation.html">http://blog.benhall.me.uk/2007/10/windows-live-writer-plugin-installation.html</a></p>
<p>[12] MSDN Windows Live Writer SDK : <a title="http://msdn.microsoft.com/en-us/library/aa738906.aspx" href="http://msdn.microsoft.com/en-us/library/aa738906.aspx">http://msdn.microsoft.com/en-us/library/aa738906.aspx</a></p>
<p>[13] Windows Live Writer Blog : <a title="http://www.live-writer.net/" href="http://www.live-writer.net/">http://www.live-writer.net/</a></p>
<p>[14] Windows Live Gallery : <a title="http://gallery.live.com/results.aspx?bt=9&amp;pl=8" href="http://gallery.live.com/results.aspx?bt=9&amp;pl=8">http://gallery.live.com/results.aspx?bt=9&amp;pl=8</a></p>
<p><br />
[附件]:</p>
<p>[1] WintyCodeAreaProject.zip(Visual Studio工程) : <a href="/Files/wintys/WintyCodeAreaProject.zip">WintyCodeAreaProject.zip</a></p>
<p>[2] WintyCodeAreaWLWPluginSetup.zip(WintyCodeArea插件安装程序,msi格式) : <a href="/Files/wintys/WintyCodeAreaWLWPluginSetup.zip">http://www.blogjava.net/Files/wintys/WintyCodeAreaWLWPluginSetup.zip</a></p>
<div id="mycopyright" style="border-width: 1px 0pt 0pt; border-top: 1px solid red; padding: 5px; margin-top: 5px;">
<span style="color: #ff0000;">原创作品，转载请注明出处。<br />
作者:Winty (wintys@gmail.com)<br />
博客:http://www.blogjava.net/wintys</span>
</div>
<p>&nbsp;</p><img src ="http://www.blogjava.net/wintys/aggbug/297273.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-10-05 19:26 <a href="http://www.blogjava.net/wintys/archive/2009/10/05/dotNET_WindowLiveWriter_WintyCodeArea.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>