ウインドウ無しでbmpのみを表示できますか?

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
arrems
記事: 5
登録日時: 2006年12月31日(日) 10:07

ウインドウ無しでbmpのみを表示できますか?

#1 投稿記事 by arrems »

1週間前からAB始めましたarremsと申します。
プログラム知識は無いに等しいので色々とお世話になります。

今回の質問は、ウインドウの表示を消してbmpだけを表示したいと言う事です。
ゲームの開始時にウインドウ無しでゲームロゴみたいなものが出てくるものがあります。そんな事ってできるのでしょうか?もし出来るのならサンプルコードを教えてください。
最後に編集したユーザー arrems [ 2007年1月01日(月) 11:11 ], 累計 1 回
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: ウインドウ無しでbmpのみを表示できますか?

#2 投稿記事 by 7 »

> 今回の質問は、ウインドウの表示を消してbmpだけを表示したいと言う事です。
> ゲームの開始時にウインドウ無しでゲームロゴみたいなものが出てくるものがあります。そんな事ってできるのでしょうか?
出来ました。ビットマップを表示するというか、ディスプレイに描写するっていう感じなんですけど。
ビットマップを消すときのチラつきが気にはなりますけどね~...。他のアプリケーションがどうやって解決しているのか気になりますね。

> もし出切るのならサンプルコードを教えてください。
http://www.activebasic.com/help_center/ ... index.html
ここのコードを参考にしていくといつか出来ます。それなりの知識と応用力が必要ですけど...。
勉強しようという姿勢をあまり感じないので、とりあえずStep9をやっつけてみてはどうでしょう。
そして分からないことがあったらまた質問してください。
MML
記事: 154
登録日時: 2006年5月02日(火) 16:27

Re: ウインドウ無しでbmpのみを表示できますか?

#3 投稿記事 by MML »

> ビットマップを消すときのチラつきが気にはなりますけどね~...。他のアプリケーションがどうやって解決しているのか気になりますね。
枠なしのウィンドウにBMPをのっける。という方法を僕は前とっていました。
しかし、最近はロゴまで作る暇がないのでやってはいませんが(^^;

手順は以下です。

1.枠なしのウィンドウを作る。
2.BMPを枠なしのウィンドウに描画
3.何秒か表示(というかプログラムを実行させるための準備)
4.枠なしのウィンドウを削除

こんな感じですかね。
しかし、ActiveBasicではやったことがないので...
コードは今すぐにはかけません。
完成したら載せようと思います。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#4 投稿記事 by konisi »

僕の場合は、GetCapture関数+GetDC関数で何とか表示しますが。(ためしに作ってみたら割とうまくいったので。)

だいたいこんなイメージ

コード: 全て選択

#include "test.idx"

'NoWindow Base

Function draw(X As Long,Y As Long,CX As Long,CY As Long)
    Dim hdc As HDC
    hdc=GetDC(GetCapture())
    Dim memdc As HDC
    memdc=CreateCompatibleDC(hdc)

    Dim hBmp As VoidPtr
    hBmp=LoadImage(GetModuleHandle(0),IDB_BITMAP1 As *Byte,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE)
    SelectObject(memdc,hBmp)

    Dim hBrush As VoidPtr, hOldBrush As VoidPtr
    hBrush=GetStockObject(LTGRAY_BRUSH)
    hOldBrush=SelectObject(hdc,hBrush)

    BitBlt(hdc,X,Y,CX,CY,memdc,0,0,SRCCOPY)

    SelectObject(hdc,hOldBrush)

    DeleteDC(memdc)

    DeleteObject(hBmp)
End Function

draw(0,0,320,320)
Sleep(10000)
ExitProcess(0)
追記 2006/12/31 20時頃
bmpを表示するとかそういう割と応用的な事よりも、1週間目のビギナーさんなら基礎基本をしっかり固める方が先だと思います。
最後に編集したユーザー konisi [ 2006年12月31日(日) 19:41 ], 累計 1 回
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

むむむ...。

#5 投稿記事 by 7 »

今日はなにやら皆さん気前がいいですね...。 追記。

サンプルがウィンドウ作成時になってますけど、ShowTitleBitmap関数はウィンドウと関係ありません。ビットマップを表示したいタイミングで関数をコールしてください。
arrems
記事: 5
登録日時: 2006年12月31日(日) 10:07

#6 投稿記事 by arrems »

皆さんご親切にして頂いてありがとうございます。

>勉強しようという姿勢をあまり感じないので

7様、御もっともでございます・・・。ちょっと楽しようとしすぎでした・・・。とりあえず講座を全てクリアしてから出直します。大変失礼しました。

その他のサンプル頂いた方、とても参考になります。先ずは初心者講座をクリアしてから取り組んでみたいと思いますので、その時つまづいたらまたご教授お願いします。

やっぱり昔のBASICしかやった事の無い人間にはもう一度1からやり直す事が大事みたいですね^^;
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#7 投稿記事 by konisi »

楽する事はとても大切な事だと思います。
電卓を使わずに手計算で平方根を求める事はできますが、電卓にその機能があるならそれを使った方がずっと速い。それと同じ理屈で。


自分の失敗を元に助言しておくと、アイデアは出るうちに紙に書いておけって事ですかね。
あれも出来る、これも出来るってなってくると何を作っていいか分からなくなってしまうので。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ゲスト

#8 投稿記事 by ゲスト »

>楽する事はとても大切な事だと思います。
>電卓を使わずに手計算で平方根を求める事はできますが、電卓にその機能があるならそれを使った方がずっと速い。それと同じ理屈で。

それとはまた違う。例えば、√6 の近似値の求め方を知らずに電卓を使っていると、
電卓なしでは近似値は求められなくなってしまう。
98765432*87654321 の計算の仕方を分かっていて、手間を省くために電卓を使うのは良い。
あるプログラムを組むときに、どういった関数を使っていくかを理解した上でサンプルなどをコピーするのは良いが、
「よくわからないけど、とりあえずコピーしておけばいいか」という考えでは上達できない。
arrems
記事: 5
登録日時: 2006年12月31日(日) 10:07

#9 投稿記事 by arrems »

> あるプログラムを組むときに、どういった関数を使っていくかを理解した上でサンプルなどをコピーするのは良いが、
> 「よくわからないけど、とりあえずコピーしておけばいいか」という考えでは上達できない。

ごもっともで。
そもそも、誰かの「サンプル」であってもそれは「知的財産」だと僕は考えていますから、それをそのまま使うような事はしませんし、上達したいと思っているのでそのソースをしっかり理解したいと思っています。

大変貴重なご意見をありがとうございました。
Tatsuro
記事: 3
登録日時: 2007年1月09日(火) 23:44
お住まい: 福島県

#10 投稿記事 by Tatsuro »

かなり乱暴ですが

コード: 全て選択


Dim hDC As HDC
hDC=GetDC(0)'デスクトップのHDCを取得
'ここから描画するための文を書く
TextOut(hDC,100,100,"変なところに落書きしてみるテスト",32)'(ただの例です)
'ここまで
ReleaseDC(0,hDC)'デスクトップのHDCを開放
これで描けてしまうような気がします。
これは、本当にwindowを作っていないので、その部分を使っているプログラムが再描画を行うと消えるし、プログラムが終了しても放置されます。
従って、プログラムがwindowを作成するときにそこに表示してやれば勝手に消えます。
arrems
記事: 5
登録日時: 2006年12月31日(日) 10:07

#11 投稿記事 by arrems »

なるほど。
出来てしまいそうですがちょっと実用性に欠けてしまいますね^^;
とりあえずこの質問は初心者の僕には早すぎるようなので、もっと勉強してから出直します。
貴重なサンプルを皆さんに頂いているのでシッカリ勉強して使いこなせるよう頑張ります!
ありがとうございました。
返信する