-PR-
解決済み

ダイアログアプリのウィンドウ領域について

  • 暇なときにでも
  • 質問No.94617
  • 閲覧数319
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 10% (4/39)

いつもお世話になります。

VC++6.0MFCダイアログベースでアプリを開発しているのですが、
ビットマップ画像(100×100)をダイアログに貼り付けています。
円の画像ですが、ビットマップなので四角の画像になっています。
そこで楕円のリージョンを作って、

// 楕円のリージョンを作る
m_rgn.CreateEllipticRgn(0,0,100,100);

// ウィンドウのリージョンを設定する
SetWindowRgn((HRGN)m_rgn ,TRUE);

こんな感じで表示したらウィンドウは丸くなっています。
そこで上記で作成したリージョンの上をマウスがオーバーしたら
画像を差し替えたいのですが、どうしても、ダイアログ
の領域(四角)で反応してしまいます。

CPoint pos;
CRect rect;
GetCursorPos(&pos);
GetWindowRect(&rect);

if (rect.PtInRect(pos)) {
// マウスが上に来ている
m_bMouseOver = TRUE;
} else {
// マウスは上にはない
m_bMouseOver = FALSE;
}

こんな感じでm_bMouseOverの中身を見て画像を差し替えています。
リージョンで作成した楕円の上だけで反応させるには
どのようにすればいいのでしょうか?
わかりにくいかもしれませんがアドバイスよろしくお願い致します。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

あまり MFC には詳しくないのですが、

> GetWindowRect(&rect);
> if (rect.PtInRect(pos)) {

CRect は「矩形領域」を表すクラスですから、四角で反応するのは当たり前でしょう。

リージョンを表すクラス CRgn にも PtInRegion() メソッドがあるので、
それを使ってマウスが上にあるかどうかを判定すれば良いんじゃないか、と。

if (rect.PtInRect(pos)) {
 ↓
if (m_rgn.PtInRect(pos)) {

って。
お礼コメント
yomogikun

お礼率 10% (4/39)

ご教授ありがとうございます。
m_rgn.PtInRegion(pos)
で正常動作いたしました。
CRgn にも PtInRegion ってのがあるんですねー。
勉強になりました。
投稿日時 - 2001-06-24 16:17:25
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ