かなり実用でも使ってみて、

画面ハードコピーをCntl+Alt+PrtScrで取得して、ペイントへペースト、メモとして裏紙印刷

という工程が多用されるので、この一連を機能化してみることにする。

『フォームの印刷』ということになるので、すぐ見つかるだろうとたかをくくっていたら甘かった。

ボタンに割り付ける例題が多くて、それは所謂Hello,Worldなので当然ではあるが、今回は懸案の標準メニューを貼り付けて試行する。

外形は比較的簡単で、その定石は、
http://uchukamen.com/Programming1/Print/index.htm
に良い資料としてまとまっている。

ポイントは、フォーム状態の画像化。検索にかかる多くは、「Win32 APIを使用した方法」であり、本質的に手動で画面ハードコピーを取る手続きと同一。msdnにも同じ記述がヒットするから(こっちがソースなんだろうが…)これが一般的なんだろうかと『印刷プレビュー』に割り付けてテストしてみた。問題発覚。

ボタン割付でのテストだと気づかないかも知れない、プリントプレビュー画面が肝心のフォームを隠してしまった画像がキャプチャーされてしまって使い物にならない。(追記;別のmsdn解説にWin32 APIBitBltではなく「CopyFromScreen を使う方法」が紹介されていたが、確認すると振る舞いはBitBltと同じでした。)キャプチャータイミングを、フォームのロードやメニュー選択などいろいろ変えて試してみたが、妙な混ざった画面がキャプチャーされたりしてあまりうまくいかない。確保したメモリーの肥大化も気になる。

検索に『隠れる』のキーワードを追加して検索し直したところ、いつもお世話になってるDOBON.NETさんのところの情報で、「Control.DrawToBitmap メソッド」にて解決。

今回、嵌って得たお駄賃は、逆に任意のシーン(たとえばメニューがプルダウンされてビローンと垂れ下がっている画面)でもプログラムから容易にキャプチャー可能なんだなと分かったこと。

それは良いんだが、インテリセンスで時々陥る症状《いちいちインプットメソッドが日本語に勝手に切り替わってしまう》のは何とかなんないのかな。煩わしくて仕方がない。