ウインドウ無しでbmpのみを表示できますか?
ウインドウ無しでbmpのみを表示できますか?
1週間前からAB始めましたarremsと申します。
プログラム知識は無いに等しいので色々とお世話になります。
今回の質問は、ウインドウの表示を消してbmpだけを表示したいと言う事です。
ゲームの開始時にウインドウ無しでゲームロゴみたいなものが出てくるものがあります。そんな事ってできるのでしょうか?もし出来るのならサンプルコードを教えてください。
プログラム知識は無いに等しいので色々とお世話になります。
今回の質問は、ウインドウの表示を消してbmpだけを表示したいと言う事です。
ゲームの開始時にウインドウ無しでゲームロゴみたいなものが出てくるものがあります。そんな事ってできるのでしょうか?もし出来るのならサンプルコードを教えてください。
最後に編集したユーザー arrems [ 2007年1月01日(月) 11:11 ], 累計 1 回
Re: ウインドウ無しでbmpのみを表示できますか?
> 今回の質問は、ウインドウの表示を消してbmpだけを表示したいと言う事です。
> ゲームの開始時にウインドウ無しでゲームロゴみたいなものが出てくるものがあります。そんな事ってできるのでしょうか?
出来ました。ビットマップを表示するというか、ディスプレイに描写するっていう感じなんですけど。
ビットマップを消すときのチラつきが気にはなりますけどね~...。他のアプリケーションがどうやって解決しているのか気になりますね。
> もし出切るのならサンプルコードを教えてください。
http://www.activebasic.com/help_center/ ... index.html
ここのコードを参考にしていくといつか出来ます。それなりの知識と応用力が必要ですけど...。
勉強しようという姿勢をあまり感じないので、とりあえずStep9をやっつけてみてはどうでしょう。
そして分からないことがあったらまた質問してください。
> ゲームの開始時にウインドウ無しでゲームロゴみたいなものが出てくるものがあります。そんな事ってできるのでしょうか?
出来ました。ビットマップを表示するというか、ディスプレイに描写するっていう感じなんですけど。
ビットマップを消すときのチラつきが気にはなりますけどね~...。他のアプリケーションがどうやって解決しているのか気になりますね。
> もし出切るのならサンプルコードを教えてください。
http://www.activebasic.com/help_center/ ... index.html
ここのコードを参考にしていくといつか出来ます。それなりの知識と応用力が必要ですけど...。
勉強しようという姿勢をあまり感じないので、とりあえずStep9をやっつけてみてはどうでしょう。
そして分からないことがあったらまた質問してください。
Re: ウインドウ無しでbmpのみを表示できますか?
> ビットマップを消すときのチラつきが気にはなりますけどね~...。他のアプリケーションがどうやって解決しているのか気になりますね。
枠なしのウィンドウにBMPをのっける。という方法を僕は前とっていました。
しかし、最近はロゴまで作る暇がないのでやってはいませんが(^^;
手順は以下です。
1.枠なしのウィンドウを作る。
2.BMPを枠なしのウィンドウに描画
3.何秒か表示(というかプログラムを実行させるための準備)
4.枠なしのウィンドウを削除
こんな感じですかね。
しかし、ActiveBasicではやったことがないので...
コードは今すぐにはかけません。
完成したら載せようと思います。
枠なしのウィンドウにBMPをのっける。という方法を僕は前とっていました。
しかし、最近はロゴまで作る暇がないのでやってはいませんが(^^;
手順は以下です。
1.枠なしのウィンドウを作る。
2.BMPを枠なしのウィンドウに描画
3.何秒か表示(というかプログラムを実行させるための準備)
4.枠なしのウィンドウを削除
こんな感じですかね。
しかし、ActiveBasicではやったことがないので...
コードは今すぐにはかけません。
完成したら載せようと思います。
僕の場合は、GetCapture関数+GetDC関数で何とか表示しますが。(ためしに作ってみたら割とうまくいったので。)
だいたいこんなイメージ
追記 2006/12/31 20時頃
bmpを表示するとかそういう割と応用的な事よりも、1週間目のビギナーさんなら基礎基本をしっかり固める方が先だと思います。
だいたいこんなイメージ
コード: 全て選択
#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)
bmpを表示するとかそういう割と応用的な事よりも、1週間目のビギナーさんなら基礎基本をしっかり固める方が先だと思います。
最後に編集したユーザー konisi [ 2006年12月31日(日) 19:41 ], 累計 1 回
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
むむむ...。
今日はなにやら皆さん気前がいいですね...。
サンプルがウィンドウ作成時になってますけど、ShowTitleBitmap関数はウィンドウと関係ありません。ビットマップを表示したいタイミングで関数をコールしてください。
じゃあ僕も... [ここをクリックすると内容が表示されます]
追記。コード: 全て選択
' 第一引数はビットマップイメージを示すリソースID、または識別文字列を指定します。
' 第二引数は表示する時間を秒単位で指定します。
Sub ShowTitleBitmap(ByVal lpBitmapName As LPSTR,ByVal dwSeconds As DWord)
Dim hDC As HDC, hMemDC As HDC
Dim hBmp As HBITMAP, Bmp As BITMAP, hOldBmp As HBITMAP
Dim rc As RECT
hDC=GetDC(0)
hMemDC=CreateCompatibleDC(hDC)
hBmp=LoadBitmap(GetModuleHandle(0),lpBitmapName)
hOldBmp=SelectObject(hMemDC,hBmp)
GetObject(hBmp,SizeOf(BITMAP),Bmp)
GetWindowRect(GetDesktopWindow(),rc)
BitBlt(hDC,
(rc.right/2)-(Bmp.bmWidth/2),(rc.bottom/2)-(Bmp.bmHeight/2),
Bmp.bmWidth,Bmp.bmHeight,
hMemDC,0,0,SRCCOPY)
Sleep(dwSeconds*1000)
InvalidateRect(0,ByVal NULL,FALSE)
SelectObject(hMemDC,hOldBmp)
DeleteObject(hBmp)
DeleteDC(hMemDC)
ReleaseDC(0,hDC)
End Sub
' ウィンドウ作成時のイベント
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
ShowTitleBitmap(IDB_BITMAP1,1)
End Sub
サンプルがウィンドウ作成時になってますけど、ShowTitleBitmap関数はウィンドウと関係ありません。ビットマップを表示したいタイミングで関数をコールしてください。
楽する事はとても大切な事だと思います。
電卓を使わずに手計算で平方根を求める事はできますが、電卓にその機能があるならそれを使った方がずっと速い。それと同じ理屈で。
自分の失敗を元に助言しておくと、アイデアは出るうちに紙に書いておけって事ですかね。
あれも出来る、これも出来るってなってくると何を作っていいか分からなくなってしまうので。
電卓を使わずに手計算で平方根を求める事はできますが、電卓にその機能があるならそれを使った方がずっと速い。それと同じ理屈で。
自分の失敗を元に助言しておくと、アイデアは出るうちに紙に書いておけって事ですかね。
あれも出来る、これも出来るってなってくると何を作っていいか分からなくなってしまうので。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
かなり乱暴ですが
これで描けてしまうような気がします。
これは、本当にwindowを作っていないので、その部分を使っているプログラムが再描画を行うと消えるし、プログラムが終了しても放置されます。
従って、プログラムがwindowを作成するときにそこに表示してやれば勝手に消えます。
コード: 全て選択
Dim hDC As HDC
hDC=GetDC(0)'デスクトップのHDCを取得
'ここから描画するための文を書く
TextOut(hDC,100,100,"変なところに落書きしてみるテスト",32)'(ただの例です)
'ここまで
ReleaseDC(0,hDC)'デスクトップのHDCを開放
これは、本当にwindowを作っていないので、その部分を使っているプログラムが再描画を行うと消えるし、プログラムが終了しても放置されます。
従って、プログラムがwindowを作成するときにそこに表示してやれば勝手に消えます。