※ ChatGPTを利用し、要約された質問です(原文:MFCでウィンドウ枠をアニメーションさせたい)
MFCでウィンドウ枠をアニメーションさせる方法
このQ&Aのポイント
VC++初心者の方がMFCでデスクトップマスコットを作成中です。現在、BMP画像の表示はC***ViewクラスのOnDraw関数で行っています。しかし、ウィンドウ枠の作成に問題があり、リージョンを使ってBMP画像の形のウィンドウを作成する方法を知りたいとのことです。また、OnDraw関数内でのSetWindowRgn関数の動作もうまくいっていないそうです。
CTestViewクラスのコンストラクタでは、ビットマップの読み込みとリージョンの設定が行われています。OnDraw関数内では、画像の表示とリージョンの切り替えが行われていますが、SetWindowRgn関数が正常に動作していないようです。
質問者さんは、ウィンドウ枠をアニメーションさせたいというニーズを持っています。現在MFCを使用してデスクトップマスコットを作成中で、BMP画像の表示はOnDraw関数で行っていますが、ウィンドウ枠の作成に問題があります。具体的には、リージョンを使ってBMP画像の形のウィンドウを作成する方法が分からないため、質問をしています。また、SetWindowRgn関数の動作もうまくいっていないため、助けが必要だとのことです。
こんにちは、VC++初心者です。
今MFCでデスクトップマスコットを作りたいと思っています。
MFCのSDIアプリでとりあえず作成している最中で、
BMP画像の表示はC***ViewクラスのOnDraw関数で表示させています。
問題はウィンドウ枠です。
スタイル指定をWS_POPUPにして、クライアント領域にのみ表示させていますが、
リージョンを使って、BMP画像を切り取った形のウィンドウにするのにてこずっています。
ちうか、そもそもOnDraw関数内でBMP表示とともに行っている、
SetWindowRgn関数がうまく動いてくれていない状態です(泣)。
ソースの一部をのせておきますで、どうかご判断ください。
宜しくお願いします。
CTestView::CTestView()
{
//コンストラクタでビットマップの読み込みとリージョンの設定
gazou.LoadBitmap( IDB_GAZOU); //CBitmapのメンバ変数
m_rgn[0].CreateEllipticRgn(0, 0, 48,48); //CRgnのメンバ変数1
m_rgn[1].CreateRectRgn(0, 0, 48,48); //CRgnのメンバ変数1
}
void CTestView::OnDraw(CDC* pDC)
{
//画像表示及びリージョンの切り替え
中略...
static int anim = 0;
CDC dc;
dc.CreateCompatibleDC( pDC);
dc.SelectObject( gazou);
pDC->BitBlt(0,0,48,48,&dc,0,0,SRCAND); //48*48ドットのBMP
HRGN hrgn =(HRGN)m_rgn[anim].Detach();
SetWindowRgn( hrgn, true);
dc.DeleteDC();
anim ^= 1;
中略...
}
お礼
お答えありがとうございます。 あと、お返事が送れて、申し訳ありませんでした(ぺこり)。 SDIだとCMainFrameにもSetWindowRgnしないといけないというのは、 わかるようなきがします。(まだ試していませんが) やはり、ダイアログベースで作成しようかと思います。 それと、あるサンプルソースが手元にありますが、 私がVC++初心者ということもあり、それがダイアログで作られたのかどうか、 確かめるのにどうすればいいのかよくわかりません。 たとえば、「TEST」というプロジェクトで「TESTDLG.CPP」が作られていれば、 ダイアログベースで作成されたと思っていいのでしょうか? あつかましくお尋ねしてすみませんが、 よろしくお願いします。