連載:VB 6ユーザーのための
|
|
|
■フレーム・ウィンドウのハンドルを取得する関数
引数として渡されたウィンドウ・ハンドルを基に、そのフレーム・ウィンドウのハンドルを取得する関数は、以下のようなFunctionプロシージャとして作成した。
| ||||||||||||||||||
フレーム・ウィンドウのハンドルを取得するGetFrameWindow関数 | ||||||||||||||||||
|
この関数の中では、GetDesktopWindow APIとGetParent APIを呼び出しているが、処理そのものは地道に親ウィンドウを探しているだけである。
実のことをいうと、この関数を自作しなくても、GetAncestorというAPIを利用すれば同じことが簡単にできてしまう。が、先に触れたWin32API.txtにはこのAPIが掲載されていなかったので、今回はあえてGetFrameWindow関数を自作してみたというわけだ。
ちなみに、GetAncestor APIの宣言と、関連する定数の宣言は、以下のようになる。
|
このように宣言しておけば、ウィンドウのサイズを変えるコード(MyBase.MouseDownイベント・ハンドラ)の中にある、
hWndTarget = GetFrameWindow(hWndTarget)
は、
hWndTarget = GetAncestor(hWndTarget, GA_ROOT)
と記述できる。2番目の引数は、どのように親ウィンドウを探すかを指定する。GA_PARENT(=1)ならば、直接の親ウィンドウのハンドルを返し、GA_ROOT(=2)ならば親をたどっていきルート・ウィンドウ(これまでフレーム・ウィンドウと呼んできたもの)のハンドルを探して、それを返す。GA_ROOTOWNER(=3)ならばオーナー・ウィンドウのルート・ウィンドウを返す。
例えば、対象となるウィンドウがダイアログ・ボックスであれば、GA_ROOTの場合はダイアログ・ボックスのウィンドウ・ハンドルが返され、GA_ROOTOWNERの場合はダイアログ・ボックスを表示した元のウィンドウのハンドルが返される。
■そのほかのコード
残りのコードの説明は恐らく不要だろう。ラジオボタンをクリックしたときに、テキストボックスにウィンドウの幅と高さを入れるコードと、プログラムを終了させるためのコードだ。コードが煩雑になるのを避けるために、テキストボックスに値を入れるコードはSubプロシージャにまとめてある。
| |
ラジオボタンのイベント・ハンドラと終了のためのコード | |
4つのラジオボタンでイベント・ハンドラを共有している。それぞれのCheckedプロパティを調べ、チェックされているラジオボタンに従って、テキストボックスの値を設定している。 |
結び − クラス・ライブラリとWin32 APIの使い分け
Win32 APIの機能のうち、かなりの部分は.NET Frameworkのクラス・ライブラリを利用しても実現できる。使い分けの基本的な方針としては、.NET Frameworkのクラス・ライブラリでできるならそれを使うのがベスト。Win32 APIを使うのはどうしてもWin32 APIでしかできない機能を利用したいときに限定したおいた方がよい。
機能の対応については「Microsoft Win32 と Microsoft .NET Framework API との対応」というページに詳しいのでそちらを参照されるといいだろう。ただし、完全に1対1に対応しているわけではないことにも注意してほしい。
例えば、親ウィンドウを取得するGetParent APIに対応するものとして、フォームのParentプロパティが取り上げられている。しかし、フォーム内で親コントロールやコンテナを探すことはできるが、今回のサンプル・プログラムのように、ほかのウィンドウの親ウィンドウを探すことはできない。
■
さて、この連載もこれで終わりとなりました。筆者としては、やはり人気度が気になるところで、白状すると、毎週月曜日になるとランキング(トップ・ページの「過去30日の人気記事 Top10」)をチェックしていました(さすがに、自分でアクセスして、ページビューを稼ぐなんてことはしませんでしたが)。
幸い、ランキングにおいては好評なようで、何回か1位に輝くこともありました。それもこれも、つたない文章にもかかわらず、我慢して読んでくださった読者の皆さんのおかげです。また、私の不勉強に鋭いツッコミを入れてくださった編集担当の遠藤さんや一色さんにもずいぶんとお世話になりました。この場を借りて感謝の意を表したいと思います。どうもありがとうございました。そして、またお会いしましょう。
INDEX | ||
VB 6ユーザーのためのこれならマスターできるVB 2005超入門 | ||
第12回 VB 2005でWin32 APIを利用する | ||
1.サンプル・プログラム18 − ウィンドウのサイズを変更するプログラム | ||
2.プログラムの考え方とWin32 APIの宣言 | ||
3.マウスのャプチャとウィンドウのリサイズ | ||
4.フレーム・ウィンドウのハンドル取得 | ||
「これならマスターできるVB 2005超入門」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|
- - PR -