リージョンについて

[戻る]
R 2008/10/10(金) 17:20:35
お世話になります。

現在、SDIのViewを領域ごとに分けたくて
CreateRectRgn関数で領域を分けたのですが


領域を分けることができているのか
試しに、DeleteObject関数を読んでみたところ
すべてのViewが空洞となってしまっています。

    CRgn hPView1;
    hPView1.CreateRectRgn(0, 0, 100, 100);

    CRgn hPView2;
    hPView2.CreateRectRgn(100,100,100,100);

    SetWindowRgn(hPView1,TRUE);
    DeleteObject(hPView1);

うまくいきません。アドバイス宜しくお願い致します。

PATIO 2008/10/10(金) 18:03:46
やっている事の意味がわかりません。
リージョンをDeleteObjectして何がしたいのでしょう?
あと、リージョンの設定は描画範囲の指定をしているだけで
GDIオブジェクトを削除する事とは直接関係があるとは思えないのですが。

変数名も紛らわしいような気がします。
hPViewだとViewのハンドル用に見えます。
もっと直感的にわかる変数名の付け方の方が良いと思います。

あと、使っている開発環境の説明が全く無いので
質問をする時は毎回必ず書くようにお願いします。

PATIO 2008/10/10(金) 18:09:37
あと、MSDNを確認すると

SetWindowRgn 関数が成功すると、システムは、パラメータ hRgn で指定したリージョン
を所有します。
システムは、このリージョンのコピーを作成しません。
したがって、これ以降はこのリージョンハンドルに対して関数を呼び出すべきではありま
せん。
特に、このリージョンハンドルを削除しないでください。
必要がなくなると、システムはこのリージョンハンドルを自動的に削除します。

とあります。
ご自分でも確認してみてください。

たいちう 2008/10/10(金) 18:24:25
> 現在、SDIのViewを領域ごとに分けたくて
> CreateRectRgn関数で領域を分けたのですが

Viewの分割は、CSplitterWndを使うのが一般的かと。
http://www.athomejp.com/goldfish/mfc/cobject/3viewwindow.asp

リージョンの使用例としては、次のようなもの。
http://www.kumei.ne.jp/c_lang/sdk/sdk_48.htm
http://www.kumei.ne.jp/c_lang/sdk2/sdk_125.htm
(いずれも非MFCのサンプルなので、CRgnでなくHRGNが使われてる)

その上で、何がやりたいのか分かりやすく書いてもらえると良いと思う。

古いスレッドには追加発言できません。