C#

IMEを監視して現在行の色を変更するVisualStudio2010用拡張

タイトル通りのものを作りました。 ものすごく役に立つ、というわけではありませんが、あるとちょっと幸せになれるかもしれない拡張です。 スクリーンキャプチャだと↓な感じ。 IMEがOFF時。 IMEがON時。 ソースコードはこちら。 拡張をインストールするため…

テキストテンプレートのアセンブリのロードと名前空間の宣言

T4 C#

つーわけで今回はテキストテンプレート中でアセンブリをロードする方法と使用する名前空間の宣言を行う方法です。 と、書いてもピンと来ないかもしれないのでいいかえると、 アセンブリのロード => VisualStudioで参照の設定にdllを追加する。 名前空間の…

DynamicMethodで末尾再帰

C#

唐突ですがC#にはDynamicMethodというクラスがあります。 このクラスではILを直接指定することによって、プログラム実行時に動的にメソッドを作成することができます。 さっそく例 DynamicMethod method = new DynamicMethod("DynamicMethod", typeof(void),…

LINQの遅延評価とキャッシング

C#

C#3.0からLINQという機能が加わったのはいまさらですが、まだ知らない部分があったので今回はそれを紹介します。 ちなみにLINQの基礎的な部分はここでは解説しないので別サイトを参照してください。 まずLINQでは遅延評価というものが行われます。lazy list…

Graphics#DrawStringとTextRenderer.DrawTextとTextOut

C#

.NETで文字列をコントロールに描画するためのメソッドとして一番使うのはGraphicsクラスのDrawStringメソッドだと思います。 ほかにもSystem.Windows.Forms名前空間にTextRendererというクラスがありそのstaticメソッドであるDrawTextというメソッドを使うと…

Bitmapからリージョンの作成

C#

今回のトピックスはBitmapから自動でリージョンを作成する方法です。 何をしたいのかというとBitmapと同じ形のコントロールを作ろうということです。 まずこれを実現する方法の一つに、 FormクラスにはTransparencyKeyというプロパティがあり、そこに任意の…

IMessageFilter

C#

今回は最近知った機能を紹介します。 なにはともあれ次のコードを見てください。 class MessageFilter : IMessageFilter { private const int WM_KEYDOWN = 0x100; public bool PreFilterMessage(ref Message m) { if (m.Msg == WM_KEYDOWN) { switch ((int)…

staticかつabstract

一応前々から知ってはいたけど、staticでabstract(virtual)なメソッドはC#では定義できない。 最初そのことを知った時は「ふーん」と思っただけだった。 けどよくよく考えると結構きつい。 でも絶対にこれがないとどうしようもないというわけではない。 迂回…

Formをアクティブにせず表示

C#

Formクラスのインスタンスを表示する場合は、FormのインスタンスメソッドであるShow()を呼び出します。 もちろんShowなので表示されます。 そして新しいFormが表示されると今までアクティブだったFormはNonアクティブになります。 普通はこれでいいのですが…

XPのエクスプローラ左側っぽいもの

C#

こんなの こんな感じのものも自前で作れます。 もちろんビスタも対応。 当然見た目も変わります。 できるだけ本物をまねることを目標に作っているので、 下部分を閉じたり開いたりすることもできます。 下部分は単なるControlなので、 他のControlであるButt…

最大化できちゃうの

C#

ウィンドウが最大化できちゃうの。というお話。 C#のFormクラスにはMaximizeBoxというプロパティがあって、 それをfalseにすればウィンドウの最大化ボタンを無効にして最大化を出来ないようにするという機能があります。 こうすればキャプション部分をダブル…

C#のGeneric その2

C#

前回Genericについてちょっと書いたり、最近Genericを使ったコードを書いたんで、 気づいたことをちょこちょこと書きます。 まず最初に、継承元もしくは実装するインタフェースがジェネリックの場合自分自身を型引数に渡すことができます。 interface I<T> { vo</t>…

C#のGenerics

C#

C#のGenericsって型引数を継承できないの?っていうお話。 コードに示すと class Foo<T> : T { } こんな感じ。 ん〜。できると便利なんだけど、どうにか抜け道がないかな。 C++だとできたんだけど。 まぁC#はGenericsでC++はtemplateだしね。 C#だとsealedとか</t>…

asfのmuxのつづき

DirectShowのMediaType.asfでマルチプレクサを作ってwmvを吐き出すときになぜかサイズが320×240にリサイズされちゃうってことを書いたことのつづきです。 なんとなく解決はできたので一応書いておこう。 結論から書けば、MediaType.asfで作ったmuxからIConfi…

asfのmux

いまDirectShowを使ったアプリを作ってんだけど、DirectShowって便利なんだけど結構めんどい。 特に僕が作ってるのはC#ベースのアプリケーション。で、DirectShowってのは基本C++というかCOMの技術。 その辺のマーシャリングがとってもメンドウ。 DirectShow…

one time event

C#

前回、まだ続きがあるよと書きつつ今回は別なお話。 今回のタイトルは「one time event」 なんとなくかっこよさげな名前。 と言いつつ、これは僕が勝手につけた名前です。 別に大袈裟なことではないのですがなんとなく思いついたのでメモ代わりに書いておき…

アンマネージコードにC#のデリゲートを渡す

C#

今回はC#のトピックスの紹介です。 内容はタイトル通りアンマネージコードにC#レベルのデリゲートを渡す方法です。 まず前提知識として、アンマネージコードとはWin32APIの関数だとか自分で書いたC,C++のコードを指します。 C#を使っていても、なんだかんだ…

アンマネージコードにC#のデリゲートを渡す つづき

C#

前回の記事でアンマネージコードにC#のデリゲートを渡して実行してもらう方法を説明しました。 その中でC,C++の関数ポインタに__stdcallをつけなければならないと書きましたが、C#のデリゲートを__cdeclにする方法が.netにはあったらしいのです。 方法は前回…