はじめに
前回は、
「Windows phoneでテキストエディタを作ろう!」
- サンプルプログラム
(91KB)
切り取りと貼り付け機能の実装は難しい……
「切り取り」
この
TextBoxコントロールは入力したテキストをTextプロパティを通して取得したり設定したりすることが可能ですが、
それでは困りました。さてどうしましょうか。
.NET Compact FrameworkでWindows メッセージに触れる
Windowsでは、
.NET Frameworkでは、
Microsoft.
参照の追加
Message構造体とMessageWindowsクラスの解説の中に以下の記載があります。名前空間 | Microsoft. |
---|---|
アセンブリ | Microsoft. |
Microsoft.
ソリューション エクスプローラーのプロジェクト以下にある参照設定を右クリックして、

参照の追加ダイアログが立ち上がりますので、
![図2 [参照の追加]ダイアログ 図2 [参照の追加]ダイアログ](/assets/images/dev/serial/01/windows-phone/0004/thumb/TH800_002.png)
参照設定にMicrosoft.

Windows メッセージを使ってコピーを実装する
テキストボックスで現在選択されているテキストをCF_
int WM_COPY = 0x0301;
Createメソッドを使って、
Microsoft.WindowsCE.Forms.Message msg
= Microsoft.WindowsCE.Forms.Message.Create(textEdit.Handle,
WM_COPY,
IntPtr.Zero,
IntPtr.Zero);
このmsgを引数にして、
Microsoft.WindowsCE.Forms.MessageWindow.SendMessage(ref msg);
以上のコードをまとめてCopyExメソッドを作りました。
private void CopyEx()
{
// エディットコントロール現在選択されているテキストを
// CF_TEXT フォーマットでクリップボードにコピー
int WM_COPY = 0x0301;
// メッセージの送信先になるtextEditのメッセージウィンドウの
// ハンドルに対して、WM_COPYの識別子を持つWindows メッセージの作成
Microsoft.WindowsCE.Forms.Message msg
= Microsoft.WindowsCE.Forms.Message.Create(textEdit.Handle,
WM_COPY,
IntPtr.Zero,
IntPtr.Zero);
// メッセージをパッシングしてメッセージを処理するまで待機
Microsoft.WindowsCE.Forms.MessageWindow.SendMessage(ref msg);
}
「切り取り」「貼り付け」の実装
切り取り機能や貼り付け機能を実装する場合も、
Windows Mobile SDK 6 Professionalをインストールしていれば、
C:\Program Files (x86)\Windows Mobile 6 SDK\PocketPC\Include\Armv4i\winuser.h
C/
#define WM_CUT 0x0300
#define WM_COPY 0x0301
#define WM_PASTE 0x0302
さて前置きが長くなってしまいましたが、
private void menuCut_Click(object sender, EventArgs e)
{
// エディットコントロールでテキストを現在選択されていれば
// その部分のテキストをエディットコントロールから削除し、
// CF_TEXT フォーマットでクリップボードにコピー
int WM_CUT = 0x0300;
Microsoft.WindowsCE.Forms.Message msg
= Microsoft.WindowsCE.Forms.Message.Create(textEdit.Handle,
WM_CUT,
IntPtr.Zero,
IntPtr.Zero);
Microsoft.WindowsCE.Forms.MessageWindow.SendMessage(ref msg);
}
private void menuPaste_Click(object sender, EventArgs e)
{
// エディットコントロールまたはコンボボックスの
// 現在のキャレットの位置にクリップボードの内容をコピーします。
int WM_PASTE = 0x0302;
Microsoft.WindowsCE.Forms.Message msg
= Microsoft.WindowsCE.Forms.Message.Create(textEdit.Handle,
WM_PASTE,
IntPtr.Zero,
IntPtr.Zero);
Microsoft.WindowsCE.Forms.MessageWindow.SendMessage(ref msg);
}
これで実装ができました。エミュレータ上で実行すると、
まとめ
今回は、
次回はテキストの
以上で今回は終わりです。ありがとうございました。