<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>sks blog &#187; プログラミング</title>
	<atom:link href="http://sks.s201.xrea.com/blog/archives/tag/programming/feed" rel="self" type="application/rss+xml" />
	<link>http://sks.s201.xrea.com/blog</link>
	<description>気になったこと、役に立ちそうだなと思ったことなどを公開しています。</description>
	<lastBuildDate>Sun, 19 Apr 2009 06:55:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Emacsのalignが便利</title>
		<link>http://sks.s201.xrea.com/blog/archives/602</link>
		<comments>http://sks.s201.xrea.com/blog/archives/602#comments</comments>
		<pubDate>Wed, 08 Apr 2009 12:50:34 +0000</pubDate>
		<dc:creator>shuichi</dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[Emacs]]></category>
		<category><![CDATA[Verilog]]></category>
		<category><![CDATA[ソフトウェア]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[小技]]></category>

		<guid isPermaLink="false">http://sks.s201.xrea.com/blog/?p=602</guid>
		<description><![CDATA[Emacsのalignがけっこう便利。桁揃えが簡単になるので、特にコーディングするときに重宝する。例えば次のようなコードがあるとする。

input HCLK; // Clock
output [31:0] HADDR; [...]]]></description>
			<content:encoded><![CDATA[<p>Emacsのalignがけっこう便利。桁揃えが簡単になるので、特にコーディングするときに重宝する。例えば次のようなコードがあるとする。</p>
<pre>
input HCLK; // Clock
output [31:0] HADDR; // Address
output [1:0] HTRANS; // Transfer type
output HWRITE; // Transfer direction
output [2:0] HSIZE; // Transfer size
output [2:0] HBURST; // Burst type
output [31:0] HWDATA; // Write data
input [31:0] HRDATA; // Read data
input HREADY; // Transfer done
</pre>
<p>そして次に示すコマンドを実行してみる。</p>
<pre>
コードをリージョンで選択→M-x align-regexp→Align regexp: \[
コードをリージョンで選択→M-x align-regexp→Align regexp: H
コードをリージョンで選択→M-x align-regexp→Align regexp: //
</pre>
<p>するとコードが次のように桁揃えされる。</p>
<pre>
input         HCLK;   // Clock
output [31:0] HADDR;  // Address
output [1:0]  HTRANS; // Transfer type
output        HWRITE; // Transfer direction
output [2:0]  HSIZE;  // Transfer size
output [2:0]  HBURST; // Burst type
output [31:0] HWDATA; // Write data
input  [31:0] HRDATA; // Read data
input         HREADY; // Transfer done
</pre>
<p>
同じようなことを3回繰り返しているのでちょっと面倒だが、手作業でやるよりはマシだと思う。どこで桁揃えするかを正規表現で指定できるのでかなり応用が利く。場合によっては余計面倒になるかもしれないが…。
</p>
<p>
ちなみに<code>C-u M-x align-regexp</code>でもう少し複雑なことができる。詳細は<a href="http://www.emacswiki.org/emacs/AlignCommands">EmacsWiki: Align Commands</a>を参照。さらに、桁揃えのルールをあらかじめ定義しておくことができるので、これを定義しておけばもっと便利になりそう。</p>
]]></content:encoded>
			<wfw:commentRss>http://sks.s201.xrea.com/blog/archives/602/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emacs(verilog-mode)でVerilogの数値リテラルを強調表示</title>
		<link>http://sks.s201.xrea.com/blog/archives/598</link>
		<comments>http://sks.s201.xrea.com/blog/archives/598#comments</comments>
		<pubDate>Wed, 01 Apr 2009 17:01:12 +0000</pubDate>
		<dc:creator>shuichi</dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[Emacs]]></category>
		<category><![CDATA[Verilog]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[小技]]></category>

		<guid isPermaLink="false">http://sks.s201.xrea.com/blog/?p=598</guid>
		<description><![CDATA[Emacsのverilog-modeでは数値リテラルが強調表示されないので、以下のコードで対応。

(font-lock-add-keywords
 'verilog-mode
 '(("\\(\\]]></description>
			<content:encoded><![CDATA[<p>Emacsのverilog-modeでは数値リテラルが強調表示されないので、以下のコードで対応。</p>
<pre>
(font-lock-add-keywords
 'verilog-mode
 '(("\\(\\<[1-9][0-9_]*\\)?'h[0-9_a-fxz]+\\>" . font-lock-number-face)
   ("\\(\\<[1-9][0-9_]*\\)?'d[0-9_xz]+\\>"    . font-lock-number-face)
   ("\\(\\<[1-9][0-9_]*\\)?'o[0-7_xz]+\\>"    . font-lock-number-face)
   ("\\(\\<[1-9][0-9_]*\\)?'b[01_xz]+\\>"     . font-lock-number-face)
   ("\\<[0-9][0-9_]*\\>"                      . font-lock-number-face)))
</pre>
<p>フェイスは好きなものを指定する。ちなみに<code>32'D0</code>とか<code>5e3</code>とか<code>0x</code>とかには未対応。使わないので。</p>
<p>Emacsを本格的に使い始めて1ヶ月もたっていないので間違いがあるかもしれないけど、とりあえず強調表示はできてる。Verilogを書くにはEmacsのverilog-modeが一番便利っぽい。</p>
]]></content:encoded>
			<wfw:commentRss>http://sks.s201.xrea.com/blog/archives/598/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EmEditorのPHP構文ファイル(PHP 5.3)</title>
		<link>http://sks.s201.xrea.com/blog/archives/591</link>
		<comments>http://sks.s201.xrea.com/blog/archives/591#comments</comments>
		<pubDate>Sat, 28 Mar 2009 06:19:23 +0000</pubDate>
		<dc:creator>shuichi</dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[EmEditor]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://sks.s201.xrea.com/blog/?p=591</guid>
		<description><![CDATA[以前作成したEmEditorのPHP構文ファイルをアップデートした。とりあえずPHP 5.3で追加されるキーワードにも対応してみたつもりだが、足りないかもしれない。
ちなみにこのサーバーのPHPで自動生成しているので、関 [...]]]></description>
			<content:encoded><![CDATA[<p>以前作成した<a href="http://sks.s201.xrea.com/php/php.esy">EmEditorのPHP構文ファイル</a>をアップデートした。とりあえずPHP 5.3で追加されるキーワードにも対応してみたつもりだが、足りないかもしれない。</p>
<p>ちなみにこのサーバーのPHPで自動生成しているので、関数名などはサーバーのPHPにロードされている拡張に依存するので注意。</p>
]]></content:encoded>
			<wfw:commentRss>http://sks.s201.xrea.com/blog/archives/591/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2005 Service Pack 1 適用済みディスクを作成</title>
		<link>http://sks.s201.xrea.com/blog/archives/485</link>
		<comments>http://sks.s201.xrea.com/blog/archives/485#comments</comments>
		<pubDate>Sun, 11 Mar 2007 15:25:50 +0000</pubDate>
		<dc:creator>shuichi</dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[ソフトウェア]]></category>
		<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://sks.s201.xrea.com/blog/archives/484</guid>
		<description><![CDATA[
Visual Studio 2005 Service Pack 1をインストールするためには数GBのハードディスク容量が必要でインストールにかかる時間がパソコンのスペックにもよりますが1時間ほどかかります。OSインスト [...]]]></description>
			<content:encoded><![CDATA[<p>
Visual Studio 2005 Service Pack 1をインストールするためには数GBのハードディスク容量が必要でインストールにかかる時間がパソコンのスペックにもよりますが1時間ほどかかります。OSインストールの次に時間がかかる作業ではないかと。再インストール時の手間を考えてSP1適用済みインストールディスクを作成しておきました。
</p>
<p>
SP1適用作業は<a href="http://blogs.msdn.com/heaths/archive/2006/12/16/slipstreaming-visual-studio-2005-service-pack-1.aspx">Slipstreaming Visual Studio 2005 Service Pack 1</a>の手順どおりに行うことで成功。DVDに記録する場合はボリュームラベルをオリジナルインストールディスクのものと同じにする必要があるので注意。</p>
]]></content:encoded>
			<wfw:commentRss>http://sks.s201.xrea.com/blog/archives/485/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ContextMenuStripをタスクバー上に表示する</title>
		<link>http://sks.s201.xrea.com/blog/archives/469</link>
		<comments>http://sks.s201.xrea.com/blog/archives/469#comments</comments>
		<pubDate>Fri, 27 Oct 2006 19:38:23 +0000</pubDate>
		<dc:creator>shuichi</dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[小技]]></category>

		<guid isPermaLink="false">http://sks.s201.xrea.com/blog/archives/469</guid>
		<description><![CDATA[
.NET Framework 2.0では.NET Framework 1.xのContextMenuの代わりにContextMenuStripというコントロールが追加されました。このContextMenuStripは多 [...]]]></description>
			<content:encoded><![CDATA[<p>
.NET Framework 2.0では.NET Framework 1.xのContextMenuの代わりにContextMenuStripというコントロールが追加されました。このContextMenuStripは多機能で便利ですが、タスクバー上に表示させようとするとうまく表示できません(タスクバーに重ならないように表示される)。SHAppBarMessageでデスクトップツールバーを作成したときなどは困るんじゃないかと。ということでContextMenuStripをタスクバー上に表示させるためにいろいろと調べてみました。
</p>
<p>
最初に注目したのはNotifyIcon。NotifyIconにContextMenuStripを設定すると正常にタスクバー上に表示されます。MSIL逆アセンブラでNotifyIconを覗いてみると、ContextMenuStripのShowInTaskbarというプライベートメソッドを呼び出していることが分かります。とりあえず、
</p>
<pre>
contextMenuStrip.GetType().InvokeMember(
    "ShowInTaskbar",
    System.Reflection.BindingFlags.NonPublic |
    System.Reflection.BindingFlags.InvokeMethod |
    System.Reflection.BindingFlags.Instance,
    null,
    contextMenuStrip,
    new Object[] { Cursor.Position.X, Cursor.Position.Y } );
</pre>
<p>
とすることでcontextMenuStripをタスクバー上に表示させることができました。
</p>
<p>
ただし、この方法では何故かメニューが常にマウスポインタの右上に表示されるようです。いまいちスッキリしないのでShowInTaskbarメソッドの中をさらに覗いてみると、ToolStripDropDownにWorkingAreaConstrainedプロパティが存在するらしい。強制的に作業領域に表示させるという意味なので、
</p>
<pre>
contextMenuStrip.GetType().InvokeMember(
    "WorkingAreaConstrained",
    System.Reflection.BindingFlags.NonPublic |
    System.Reflection.BindingFlags.SetProperty |
    System.Reflection.BindingFlags.Instance,
    null,
    contextMenuStrip,
    new Object[] { false } );
contextMenuStrip.Show( Cursor.Position );
</pre>
<p>
としてみるとうまく表示させることができました。ただし、メニューが表示されるとWorkingAreaConstrainedがtrueに設定されるようなので、表示させる前に毎回WorkingAreaConstrainedをfalseに設定しないと駄目なようです。
</p>
<p>
これらの方法は本来アクセスできないメソッドやプロパティに強引にアクセスしているわけで、実際はこのような方法は好ましくありません。とりあえずこのような方法もあるというだけです。</p>
]]></content:encoded>
			<wfw:commentRss>http://sks.s201.xrea.com/blog/archives/469/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iアプリのストップウォッチ</title>
		<link>http://sks.s201.xrea.com/blog/archives/458</link>
		<comments>http://sks.s201.xrea.com/blog/archives/458#comments</comments>
		<pubDate>Wed, 11 Oct 2006 13:18:48 +0000</pubDate>
		<dc:creator>shuichi</dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[iアプリ]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[携帯電話]]></category>

		<guid isPermaLink="false">http://sks.s201.xrea.com/blog/archives/458</guid>
		<description><![CDATA[
iアプリのストップウォッチを作ってみました。自分の携帯電話に(アラームはあるけど)ストップウォッチがなかったので。iアプリのストップウォッチは探せば無料のものがいくらでも見つかりますが、iアプリプログラミングの練習とし [...]]]></description>
			<content:encoded><![CDATA[<p>
iアプリのストップウォッチを作ってみました。自分の携帯電話に(アラームはあるけど)ストップウォッチがなかったので。iアプリのストップウォッチは探せば無料のものがいくらでも見つかりますが、iアプリプログラミングの練習として作成しました。今のところSH902iで動作確認しました。恐らくFOMA 90xシリーズで動作可能です。
</p>
<p>
http://sks.s101.xrea.com/i/stopwatch/ に携帯電話でアクセスして、DOWNLOADからダウンロードしてください。このURLのQRコードも載せておきます。
</p>
<p>
<img id="image456" src="/blog/wp-content/stopwatch-qrcode.png" alt="Stopwatch QRコード" />
</p>
<p>
ストップウォッチをエミュレータ上で動作させた場合の動作画面と設定画面は以下のような感じです。1/100秒単位まで表示していますが実際どの程度の精度なのかは分かりません。設定画面では画面の更新間隔、文字サイズ、動作モードを設定することができます。
</p>
<p>
<a class="imagelink" href="/blog/wp-content/stopwatch.png" title="Stopwatch"><img id="image461" src="/blog/wp-content/stopwatch.thumbnail.png" alt="Stopwatch" /></a><br />
<a class="imagelink" href="/blog/wp-content/stopwatch-setting.png" title="Stopwatch 設定"><img id="image462" src="/blog/wp-content/stopwatch-setting.thumbnail.png" alt="Stopwatch 設定" /></a>
</p>
<p>
操作方法は動作モードによって異なります。スプリットタイムモードおよびラップタイムモードにおける操作方法は以下のとおりです。
</p>
<dl>
<dt>スタート、ストップ</dt>
<dd>決定ボタン</dd>
<dt>リセット</dt>
<dd>ストップ状態のときに左ボタン</dd>
<dt>スプリット、ラップ</dt>
<dd>スタート状態のときに左ボタン</dd>
<dt>スプリット、ラップモード切替</dt>
<dd>右ボタン</dd>
<dt>スプリット、ラップタイムのスクロール</dt>
<dd>上下ボタン</dd>
</dl>
<p>
マルチタイムモードにおける操作方法は以下のとおりです。マルチタイムモードでは5つのストップウォッチをそれぞれ操作することができます。</p>
<dl>
<dt>スタート、ストップ</dt>
<dd>決定ボタン、2、5、8、0</dd>
<dt>リセット</dt>
<dd>左ボタン、1、4、7、*</dd>
<dt>全てスタート</dt>
<dd>上ボタン</dd>
<dt>全てストップ</dt>
<dd>下ボタン</dd>
</dl>
<p>
ストップウォッチの動作中に電話がかかってきた場合iアプリはサスペンド状態に移行しますが、通話を終えてiアプリに復帰したときストップウォッチは通話前と変わらず動作しているはずです(通話中の時間もカウントしています)。ただし、通話中はスタートやストップ、リセットなどの操作は行うことができません。これを回避するには携帯電話を公共モードに設定すれば可能ですが、そういう場合は素直にちゃんとしたストップウォッチを。
</p>
<p>
DoCoMoが配布しているiアプリ開発ツールにはEclipse用のプラグインも同梱されていましたので比較的楽にソースコードを書くことができました。ただ、iアプリのサイズを考慮せずに書いたためサイズは約7 kBで、この程度のものとしてはちょっと大きめだと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://sks.s201.xrea.com/blog/archives/458/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iTunes COM SDK</title>
		<link>http://sks.s201.xrea.com/blog/archives/423</link>
		<comments>http://sks.s201.xrea.com/blog/archives/423#comments</comments>
		<pubDate>Mon, 05 Jun 2006 18:02:25 +0000</pubDate>
		<dc:creator>shuichi</dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[iTunes]]></category>
		<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://sks.s201.xrea.com/blog/archives/423</guid>
		<description><![CDATA[
半年くらい前にiTunes COM for Windows SDKというものがあることを知りました。COMを扱えるプログラミング言語からiTunesをコントロールすることができます。ということでC#からも簡単にiTun [...]]]></description>
			<content:encoded><![CDATA[<p>
半年くらい前に<a href="http://developer.apple.com/sdk/itunescomsdk.html">iTunes COM for Windows SDK</a>というものがあることを知りました。COMを扱えるプログラミング言語からiTunesをコントロールすることができます。ということでC#からも簡単にiTunesをコントロールすることができるみたいです。ただ、これを使って何を作ればいいのか…ネタが思いつかない。ちなみに<a href="http://www.blogpeople.net/loves-music.html">BlogPeople loves Music &#8211; AutoPlay</a>というイントロ再生するためのソフトがあるんですけど、これもiTunesをCOMインターフェース経由でコントロールしているんだと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://sks.s201.xrea.com/blog/archives/423/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.NETのWildcard(ワイルドカード)クラス</title>
		<link>http://sks.s201.xrea.com/blog/archives/44</link>
		<comments>http://sks.s201.xrea.com/blog/archives/44#comments</comments>
		<pubDate>Fri, 16 Sep 2005 08:00:45 +0000</pubDate>
		<dc:creator>shuichi</dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://sks.s201.xrea.com/blog/archives/44</guid>
		<description><![CDATA[ファイル名を指定するときなどに用いるワイルドカードを.NETで扱う方法がCode ProjectのConverting Wildcards to Regexesにあります。タイトルのとおりワイルドカードを正規表現に変換し [...]]]></description>
			<content:encoded><![CDATA[<p>ファイル名を指定するときなどに用いるワイルドカードを.NETで扱う方法がCode Projectの<a href="http://www.codeproject.com/useritems/WildcardToRegex.asp">Converting Wildcards to Regexes</a>にあります。タイトルのとおりワイルドカードを正規表現に変換しているだけですけど、このようにWildcardクラスを定義するとワイルドカードを直感的に扱えますね。</p>
<p>そういえばファイル検索やウェブ検索で正規表現を扱えたらなぁってたまに思うんですけど、デスクトップ検索アプリケーションなどで対応しているものありますかね。</p>
]]></content:encoded>
			<wfw:commentRss>http://sks.s201.xrea.com/blog/archives/44/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C#用のBigIntegerクラス</title>
		<link>http://sks.s201.xrea.com/blog/archives/47</link>
		<comments>http://sks.s201.xrea.com/blog/archives/47#comments</comments>
		<pubDate>Sat, 10 Sep 2005 13:46:56 +0000</pubDate>
		<dc:creator>shuichi</dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://sks.s201.xrea.com/blog/archives/47</guid>
		<description><![CDATA[Javaには任意精度の整数演算を行うことができるBigIntegerクラスがありますが、これのC#版をThe Code Project &#8211; C# BigInteger Classで見つけました(かなり今更感が [...]]]></description>
			<content:encoded><![CDATA[<p>Javaには任意精度の整数演算を行うことができるBigIntegerクラスがありますが、これのC#版を<a href="http://www.codeproject.com/csharp/biginteger.asp">The Code Project &#8211; C# BigInteger Class</a>で見つけました(かなり今更感がありますが…)。実はJ#を使えばBigIntegerを使えるらしいのですが、やはりC#でも使えたほうがいいですよね。さらっとドキュメントを見て試してみたところなかなか使いやすい感じです。</p>
]]></content:encoded>
			<wfw:commentRss>http://sks.s201.xrea.com/blog/archives/47/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C#(.NET)におけるメッセージフック</title>
		<link>http://sks.s201.xrea.com/blog/archives/50</link>
		<comments>http://sks.s201.xrea.com/blog/archives/50#comments</comments>
		<pubDate>Sun, 04 Sep 2005 13:17:03 +0000</pubDate>
		<dc:creator>shuichi</dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[小技]]></category>

		<guid isPermaLink="false">http://sks.s201.xrea.com/blog/archives/50</guid>
		<description><![CDATA[昔にVisual Basicをやっていたころ色々と凝ったことをやろうとするとVisual Basicの標準機能では実現できないということが多くありました。こういう時はサブクラス化でメッセージをフックするのが最終手段だった [...]]]></description>
			<content:encoded><![CDATA[<p>昔にVisual Basicをやっていたころ色々と凝ったことをやろうとするとVisual Basicの標準機能では実現できないということが多くありました。こういう時はサブクラス化でメッセージをフックするのが最終手段だったのですが、まぁこれが面倒くさい。最初からVisual C++などで書いたほうが良かったと思うくらいでした。</p>
<p>で、C#やVisual Basic.NETなどの.NET対応の言語においてコントロールに送られてくるメッセージを受け取るには、コントロールのクラスを継承してWndProcをオーバーライドすればメッセージを処理することができます。継承のできなかったVisual Basicと比較するとかなり扱いやすくなっていると思います。</p>
<p>一応これで十分なのですが他にも方法があり、<a href="http://www.geocities.jp/eco21426/">Eco-Soft</a>さんの<a href="http://www.geocities.jp/eco21426/TipsNET/Miscellaneous.htm">コントロールのサブクラス化(フック)を行う</a>に書かれているように、Windows APIを用いる方法もあります(GCHandle.Allocがポイントなんですよね)。これはVisual Basicにおけるサブクラス化と同じ方法なんですけどね…。</p>
<p>また、さらに<a href="http://ant0x.udap.jp/">Memory of the future</a>さんの<a href="http://ant0x.udap.jp/tips/tips_NativeWindow.htm">NativeWindowクラスを用いたサブクラス化</a>を見て知ったのですが.NETのNativeWindowクラスを用いる方法があるようです。</p>
<p>自分のコントロールのメッセージを処理したい場合は継承してWndProcのオーバーライドでいいと思いますが、他のコントロールに送られてくるメッセージを拝借してこちら側で処理をしたい場合などにはNativeWindowクラスを用いる方法がいいかもしれませんね。</p>
]]></content:encoded>
			<wfw:commentRss>http://sks.s201.xrea.com/blog/archives/50/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
