![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
こんにちは、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;
中略...
}
No.1ベストアンサー
- 回答日時:
参考になるか分かりませんが昔似たようなものを作った時は
下記のようにしました
1.ダイアログベースで作成
2.OnInitDialogでSetWindowRgn/Timer設定
3.OnTimerでSetWindowRgn/リペイント
4.OnPaintで画像の表示
ってな感じでした。
SDIで作る場合にはViewの親ウィンドウのCMainFrameに対してもSetWindowRgnを行わないといけない気がします(自信ないですが・・・)
あとOnDraw内でSetWindowRgnを行うのもあまりよくない気がします。
お答えありがとうございます。
あと、お返事が送れて、申し訳ありませんでした(ぺこり)。
SDIだとCMainFrameにもSetWindowRgnしないといけないというのは、
わかるようなきがします。(まだ試していませんが)
やはり、ダイアログベースで作成しようかと思います。
それと、あるサンプルソースが手元にありますが、
私がVC++初心者ということもあり、それがダイアログで作られたのかどうか、
確かめるのにどうすればいいのかよくわかりません。
たとえば、「TEST」というプロジェクトで「TESTDLG.CPP」が作られていれば、
ダイアログベースで作成されたと思っていいのでしょうか?
あつかましくお尋ねしてすみませんが、
よろしくお願いします。
No.2
- 回答日時:
>たとえば、「TEST」というプロジェクトで「TESTDLG.CPP」が>作られていれば、
>ダイアログベースで作成されたと思っていいのでしょうか?
そうとも言えますけど、実際にはCWinApp::InitInstanceで
ダイアログクラスを生成/表示していればダイアログベース
なんじゃないでしょうか。
お答え、ありがとうございます。
そもそものアプリの構造を把握していないのは致命的ですね(汗)。
MFCの勉強をしつつ、目的のアプリを作れるよう頑張ってみますね。
お答え、本当に参考になりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- その他(OS) Windowsで大量の画像サイズを半自動で変更する方法 6 2023/02/17 08:45
- Excel(エクセル) [Excel2016] 相関表等の自動作成 2 2022/08/01 20:34
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- PDF AutoCAD図面をPDF fileに変換した際、画像情報やブロック名はわかるのでしょうか。 1 2022/06/03 09:42
- HTML・CSS 詳しい方に質問です。 早急に解決したいと思っています。 ポートフォリオをMacBook で作成したと 2 2023/05/12 17:40
- 数学 『Cの微分.2』 3 2023/02/15 19:47
- その他(ソフトウェア) Figma 1 2023/06/23 14:22
- Windows 10 2つのウィンドウ選択時の表示について 10 2023/07/25 08:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
ゲームでは結局どっちが良いの?
-
VBA .Value=.Value ?
-
勝手にウィンドウが開いて止ま...
-
ウィンドウにキー送信で ENTER ...
-
VBA SendMessage 無限ループに...
-
エクセルで1行目から3行目が消...
-
Vba LongPtrについて教えてくだ...
-
【VB2008】 マウス操作の一時的...
-
検索の画面がでなくなってしま...
-
アクティブウインドウのIME...
-
VBで作成したフォーム上に電卓...
-
ダイアログでのDragDropでマウ...
-
MFC ダイアログ上のID取得につ...
-
VBで外部プログラムを位置のみ...
-
[VBA] UserForm を Excel の W...
-
VC++でタスクバーに表示させな...
-
EXCEL2016で新しいウィンドウを...
-
親ウインドウにあるOKボタンを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
ゲームでは結局どっちが良いの?
-
検索の画面がでなくなってしま...
-
勝手にウィンドウが開いて止ま...
-
VBA .Value=.Value ?
-
ラジオボタンの初期指定
-
作成したウインドウのサイズを...
-
Vba LongPtrについて教えてくだ...
-
Excelの上下を固定したい
-
他のアプリケーションの終了処理
-
【VB2008】 マウス操作の一時的...
-
「&HFFFF」「&H1A」とは?
-
VBで外部プログラムを位置のみ...
-
ExcelのBOOKが消えた!
-
Alt+P,Alt+NをPostmessageで送...
-
UWSCで特定のChromeのタブをア...
-
Console.WriteLine で表示されない
-
MFC ダイアログ上のID取得につ...
-
最大化と最小化ボタン
おすすめ情報