連載: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超入門」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
は.NET開発者中心に生まれ変わりました
スポンサーからのお知らせ
.NET開発者中心コーナー
- - PR -
イベントカレンダー
- - PR -


