アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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の中身を見て画像を差し替えています。
リージョンで作成した楕円の上だけで反応させるには
どのようにすればいいのでしょうか?
わかりにくいかもしれませんがアドバイスよろしくお願い致します。

A 回答 (1件)

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



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

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

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

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

って。
    • good
    • 0
この回答へのお礼

ご教授ありがとうございます。
m_rgn.PtInRegion(pos)
で正常動作いたしました。
CRgn にも PtInRegion ってのがあるんですねー。
勉強になりました。

お礼日時:2001/06/24 16:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!