デスクトップにBMPを描画 – プログラミング – Home

デスクトップにBMPを描画
 
通知
すべてクリア

デスクトップにBMPを描画


nauchi
 nauchi
(@nauchi)
ゲスト
結合: 17年前
投稿: 2
Topic starter  

初めてお世話になります。nauchiです。
表題の件について質問させてください。m(__)m

(開発環境)
開発:VisualStudio2005 VC++ (MFCは使っていません)
OS:WindowsXPpro

(困っていること)
あるアプリケーションを起動するときに、ジュワっとかっこよく
画像を表示したあとでアプリケーションのウィンドウを表示したい
と思っているのですが、うまくいきません。
あるサイトのサンプルを見て文字の描画は出来たのですが、
ビットマップの描画ができないです。

(ソースコード)
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmd, int
showCmd)
{
HDC hDC = CreateDC(DISPLAY, NULL, NULL,NULL);
HWND hWnd = FindWindowEx(NULL, NULL, Progman, Program Manager);
HINSTANCE hInst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
HBITMAP hBitmap = LoadBitmap(hInst, aaa.bmp);
BITMAP bmp;
int BMP_W, BMP_H;
GetObject(hBitmap, sizeof(BITMAP), &bmp);
BMP_W = (int)bmp.bmWidth;
BMP_H = (int)bmp.bmHeight;
SelectObject(hDC, hBitmap);
BitBlt(hDC, 0, 0, BMP_W, BMP_H, hDC, 0, 0, SRCCOPY);

... 3秒間ウェイト ...

ReleaseDC(hWnd, hDC);

... ウィンドウ表示処理 ...

... メッセージループ ...

}

------------------
こんな感じで記述しています。
ほとんどWebのサンプルを見ながら書いています。
問題点をご教授頂ける方いらっしゃいましたらお願いいたします。


引用解決済
トピックタグ
とおりすがり
 とおりすがり
(@とおりすがり)
ゲスト
結合: 23年前
投稿: 180
 

>BitBlt(hDC, 0, 0, BMP_W, BMP_H, hDC, 0, 0, SRCCOPY);
hDC->hDC!?


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

各処理の戻り値hDCとかhInst,hBitmapなどがNULLなどではなく正しい値か確認した?
ビットマップなら自分のプログラムのリソースなんじゃない?
ビットマップは表示先と互換のあるメモリDCを用意してこれにSelectObjectだよ


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

ビットマップを描画する手順はWeb上を探せば、ゴロゴロしていますから
まずはそれを勉強するのが先決でしょうねぇ。
MFCは使っていないと言う話なので定番のここで勉強してはどうでしょう。

「猫でもわかるプログラミング」
http://www.kumei.ne.jp/c_lang/index.html


返信引用
オレンジフィッシュ
 オレンジフィッシュ
(@オレンジフィッシュ)
ゲスト
結合: 18年前
投稿: 58
 

僕も「猫でもわかるプログラミング」を参考にしています。
次のリンクで「第347章 ジュワッと出てくるウィンドウを作る」となっています。
http://www.kumei.ne.jp/c_lang/sdk4/sdk_347.htm
読むと SetLayeredWindowAttributes 関数を使うようです。
でも単に「スプラッシュウィンドウ」を出したいだけならモードレスダイアログを
出せばいいと思うよ。次のリンクを参考にして下さい。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200510/05100001.txt


返信引用
nauchi
 nauchi
(@nauchi)
ゲスト
結合: 17年前
投稿: 2
Topic starter  

お返事遅くなりましてすいません。

wclrpさん>
 SelectObjectで最初書いていたのですが、描画すらできなく
 なってしまっていたので一時的に消していました。
 きっと書き方が間違っていたんでしょうね。

PATIOさん>
 ウィンドウへの描画は難なくできているのですが、
 デスクトップへの描画に切り替える時点でなにか
 根本的なミスをおかしているのかも知れませんが
 それに気づけていません。

オレンジフィッシュさん>
 スプラッシュウィンドウ参考にさせて頂きます。
 目的はスプラッシュウィンドウに限りなく近い
 のですが、デスクトップそのものにBMPを描画
 しておいて、アプリケーションのウィンドウが起動
 された後でも消したくないのです。
 ⇒ずっとデスクトップに描画されたままにしたいです。

 なので、スプラッシュウィンドウとは扱うデバイス
 コンテキストが違うと思ってるのですが、間違って
 ますでしょうか??

悩ましいですがもう少し頑張って調べてみます。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

もし、最初に書いているソースに全く間違いが無いなら
やはり、根本的に勘違いがあると思います。
通常は、転送するビットマップを一旦DC上に展開する為に
転送先のDCとは別に転送先のDCとコンパチブルなメモリDCを作成し、
ビットマップはそちらのDCに選択するのが普通です。
wclrpさんが書かれている「hDC->hDC!?」と言うのはそういう事です。
他の部分のコードがその流れに沿った物になっている事からすると
やはり勘違いされているのではないかと思います。
だから、「猫でもわかる・・・」を紹介したのですけれど。
上記のやり方はもっとも基本的な方法になりますので
もし勘違いしているようであれば、再度確認してみてください。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました