ActiveBasic 再描写処理時に描写物を削除しない方法

このQ&Aのポイント
  • ActiveBasic4.23.00を使用してプログラムを書いています。再描写処理時に描写していた物を削除せずに残す方法を教えてください。
  • お絵かきのプログラムで再描写を行うと、描画された線が消えてしまいます。描写物を削除せずに残す方法についてお教えください。
  • ActiveBasic4.23.00を使用してプログラムを書いていますが、再描写処理を行うと描画した物が消えてしまいます。描写物を削除せずに残す方法を教えてください。
回答を見る
  • ベストアンサー

ActiveBasic 再描写処理が読み出されても、描写していた物を削除しない方法

ActiveBasic4.23.00を使ってプログラムを書いています。 例えば、次のようなコードがあったとします。 'グローバル Dim DragFlag As Long Dim hDC As HDC '此処まで Sub MainWnd_Destroy() ReleaseDC(hMainWnd,hDC) test_DestroyObjects() PostQuitMessage(0) End Sub Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT) hDC = GetDC(hMainWnd) End Sub Sub MainWnd_LButtonDown(flags As Long, x As Integer, y As Integer) DragFlag = 1 MoveToEx(hDC,x,y,ByVal NULL) End Sub Sub MainWnd_MouseMove(flags As Long, x As Integer, y As Integer) If DragFlag = 0 Then Exit Sub LineTo(hDC,x,y) End Sub Sub MainWnd_LButtonUp(flags As Long, x As Integer, y As Integer) DragFlag = 0 End Sub (ABWiki様を参考にさせていただきました。) これで、簡単なお絵かきが出来ますが、再描写(例えば、ウインドウの大きさを変えるなど)をするとすべて消えてしまいます。 これを、描いた線を消さずに再描写することは出来ないのでしょうか。 すみませんがご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

まぁ おおざっぱに言えば 1) 入力された点群データを配列などに記憶しておいて Paintイベントで描画 2) 裏画面(Bitmap)を使った ダブルバッファを実装 といった具合でしょう WM_CRATEイベントなどで 画面(デスクトップ)の大きさと同じビットマップを作成 HDCやHPEN、HBRUSHなども必要に応じて作成 LButonDownイベントで 表画面の描画のHDCでMoveToEx 同様に裏画面でもMoveToEx MouseMoveで表画面へLineToで描画 ... 裏画面へは描画しない LButtonUpで裏画面へLineToで描画 始点と終点の範囲を RECT構造体にセットして InvalidateRect Paintイベントで 裏画面から表画面へ BitBltなどで転送 といった具合で ...

関連するQ&A

  • Active Basic 再描写処理

    最近デバイスコンテキストを何とか理解してきたので、実験的に『上から物体が振ってくるのを避ける』というゲームを作ってみようと思い作り始めました。 『←』が押されれば、棒人間を左に、『→』が押されれば、棒人間を右に移動させる処理と、ランダムで●が上から落ちてくるという処理をタイマーを使ってやってみました。(スレッドとかはまだ勉強していないので) 一応完成はしたのですが、棒人間を動かすと、どうしても●がちらつきます。 この場合は、どういう風に処理をすればいいのでしょうか? プログラムはこう書きました。 グローバル変数 Dim hBmp01 As HWND Dim hBmp02 As HWND Dim hBmp03 As HWND Dim hBmp04 As HWND Dim hMemDC As HDC Dim BmpInfo As Long Dim hBomDC As HWND Dim Bomxy As RECT Dim x As Long Dim y As Long Dim bx As Long Dim by As Long Dim n As Long '---------------------------------------------------- 省略 '----------------------------------------------------- Sub MainWnd_Destroy() DeleteObject(hBmp01) DeleteObject(hBmp02) DeleteObject(hBmp03) DeleteObject(hBmp04) YokeGame_DestroyObjects() PostQuitMessage(0) End Sub Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT) SetWindowText(hMainWnd,"画像描写テスト ~爆弾的なものを避けるゲーム~") hBmp01 = LoadImage(0,".\画像\人\普通.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE) hBmp02 = LoadImage(0,".\画像\人\右.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE) hBmp03 = LoadImage(0,".\画像\人\左.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE) hBmp04 = LoadImage(0,".\画像\爆弾\ボム.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE) GetWindowRect(hBmp04,Bomxy) If hBmp01=0 or hBmp02=0 or hBmp03=0 or hBmp04=0 Then MessageBox(hMainWnd,Ex"画像の読み込みに失敗しました\r\n強制終了します。","Error",MB_OK or MB_ICONHAND) DeleteObject(hBmp01) DeleteObject(hBmp02) DeleteObject(hBmp03) DeleteObject(hBmp04) SendMessage(hMainWnd,WM_CLOSE,0,0) End If x=290 y=275 BmpInfo=1 bx = 320 by = 0 SetTimer(hMainWnd,0,300,0) End Sub Sub Kettei() Dim ok As Long by=0 Do Randomize bx = Fix(Rnd()*100) If bx>0 and 630>bx Then ok=TRUE End If Loop Until ok=TRUE End Sub Sub MainWnd_Paint(hDC As HDC) hMemDC = CreateCompatibleDC(hDC) hBomDC = CreateCompatibleDC(hDC) If BmpInfo = 1 Then SelectObject(hMemDC,hBmp01) Else If BmpInfo = 2 Then SelectObject(hMemDC,hBmp02) Else If BmpInfo = 3 Then SelectObject(hMemDC,hBmp03) End If BitBlt(hDC,x,y,40,50,hMemDC,0,0,SRCCOPY) Sleep(30) SelectObject(hMemDC,hBmp01) BitBlt(hDC,x,y,40,50,hMemDC,0,0,SRCCOPY) Sleep(30) SelectObject(hBomDC,hBmp04) BitBlt(hDC,bx,by,9,9,hBomDC,0,0,SRCCOPY) DeleteDC(hMemDC) DeleteDC(hBomDC) BmpInfo = 1 End Sub Sub MainWnd_KeyDown(KeyCode As Long, flags As Long) If KeyCode = 37 Then If x<=0 Then x=0 Exit Sub End If x = x - 10 BmpInfo=3 End If If KeyCode = 39 Then If x>=600 Then x = 600 Exit Sub End If x = x + 10 BmpInfo=2 End If InvalidateRect(hMainWnd,ByVal 0,TRUE) End Sub Sub MainWnd_Timer(TimerID As DWord) If TimerID = 0 Then by = by + 10 InvalidateRect(hMainWnd,Byval 0,TRUE) If by >=360 Then Kettei() End If End If End Sub っと、このようになりました。(一応動きます) strictには、チェックを入れていません。 バージョンは、4.23.00を使っています。 それと、InvalidateRect関数なのですが、 InvalidateRect(hMainWnd,Byval 0,TRUE) の、二つ目のパラメータ(?)部分に、全体を再描写させるときに何故『Byval 0』と表記するのでしょうか? ヘルプには、NULL を指定すると、クライアント領域全体が更新領域に設定されますと書かれていますが、NULLを指定すると無効な識別となります。 すみませんが、分かる方がいらっしゃいましたら、ご教授をお願いします。

  • Active Basic 枠無しウインドウをマウスで移動させる

    枠なしのウインドウ(スタイル:ポップアップ/枠無し)を、 ドラッグで任意の場所に移動させたいのですが、知識が足りません。 一応抵抗はしてみたのですが、あっけなく弾き飛ばされました。 'グローバル Dim LClickFlag As Long Sub MainWnd_LButtonDown(flags As Long, x As Integer, y As Integer) LClickFlag=TRUE End Sub Sub MainWnd_LButtonUp(flags As Long, x As Integer, y As Integer) LClickFlag=FALSE End Sub Sub MainWnd_MouseMove(flags As Long, x As Integer, y As Integer) If LClickFlag=TRUE Then SetWindowPos(hMainWnd,NULL,x,y,0,0,SWP_NOSIZE) End If End Sub 動きはしますが、ちょこちょこちょこちょこ動いて、移動させたい場所に移動できません。 すみませんが、どのようにやれば良いかのご教授をお願いします。 それと、ずっと参考にしていた、Active Basicの非公式WIKI様(http://www.2chab.net/pukiwiki/index.php?ActiveBasic%20Wiki-TopPage)は、もう復活しないのでしょうか。 こちらも知っていらっしゃる方がいらっしゃいましたら、ご教授をお願いします。

  • [Active Basic]BitBltで画像を表示

    ActiveBasicでプログラムを書いています。 少しずつデバイスコンテキストが使えるようになってきて、簡単なブロック崩しを作ってみようと思い、作り始めました。 以前、デバイスコンテキストを使えるようになろうと、上から物体が降ってきて、それを避けるというゲームを書いてみたのですが、画像(ビットマップ)の表示方法が分からず、すべて MainWnd_Paint(hDC As HDC) に中に書きました。 すると、処理ごとにいらないものまで描写されるので画面がかなりちらついてしまいました。 ActiveBasicのヘルプ(http://www.activebasic.com/help_center/articles/win32/step16/index.html)を参考にして、プログラムを書いてみたのですが、背景が描写されません。 コードを下に書きますので、すみませんが添削の方をお願いします。 まだ、プログラムを始めたばかりのほやほやですので、なるべくやさしくお願いします。 '------------グローバル------------ Dim ImgBack As HBITMAP '背景画像 Dim hBackDC As HDC '背景画像用デバイスコンテキスト Dim hMemDC As HDC 'BitBlt用のデバイスコンテキスト '------------グローバル------------ Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT) Dim hDC As HDC 'イメージを読み込んでいく ImgBack = LoadImage(0,".\pic\back.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE) 'デバイスコンテキストをそれぞれ作成 hDC = GetDC(hMainWnd) hBackDC = CreateCompatibleDC(hDC)'背景用DC hMemDC = CreateCompatibleDC(hDC)'BitBlt用DC '背景を描写 SelectObject(hBackDC,ImgBack) BitBlt(hMemDC,0,0,640,480,hBackDC,0,0,SRCCOPY) '最後にhDCだけ開放 ReleaseDC(hMainWnd,hDC) End Sub Sub MainWnd_Paint(hDC As HDC) End Sub 後、BitBltを MainWnd_Paint(hDC As HDC) の中に表記すると、画像が表示されます。 何故か、いまいち分かっていません・・・ すみませんが、ご教授ください。

  • ActiveBasic 複数の画像表示をしたい

    ActiveBasic4.23.00を使っています。 簡単なゲームを作りたいのですが、なかなか画像の描写が出来ません。 すみませんが、以下のコードの添削をしていただけないでしょうか。 出来れば、詳しいやり方がほしいです。 (まだ、途中なので、DCの開放などはかいていない部分があります) 'デバイスコンテキスト Dim hMemDC As HDC Dim hBackDC As HDC Dim hMyDC As HDC 'ビットマップ Dim hBackBmp As HANDLE Dim hMyBmp As HANDLE Dim hMemBmp As HANDLE 'ハンドル Dim hBackHand As HANDLE Dim hMyHand As HANDLE 'プログラムの変数 Dim WhereDir As String '----------------------------------------------------------------------------- ' ウィンドウメッセージを処理するためのコールバック関数 Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord ' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。 ' イベントプロシージャの呼び出しを行います。 MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam) End Function '----------------------------------------------------------------------------- ' ここから下は、イベントプロシージャを記述するための領域になります。 Sub MainWnd_Destroy() DeleteDC(hMemDC) DeleteDC(hMyDC) Game_DestroyObjects() PostQuitMessage(0) End Sub Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT) /* 作成時 */ '自分自身のファイルパスを取得 Dim dir[MAX_PATH+1] As Byte GetCurrentDirectory(MAX_PATH,dir) WhereDir=dir 'メモリデバイスコンテキストを準備 Dim img As HDC img=GetDC(hMainWnd) hMemDC=CreateCompatibleDC(img) hBackDC=CreateCompatibleDC(img) hMyDC=CreateCompatibleDC(img) '画像をよみこむ hBackBmp=LoadImage(0,WhereDir+"\背景.bmp",IMAGE_BITMAP,0,0,LR_DEFAULTSIZE or LR_LOADFROMFILE) hMyBmp=LoadImage(0,WhereDir+"\人.bmp",IMAGE_BITMAP,0,0,LR_DEFAULTSIZE or LR_LOADFROMFILE) '画像処理 hMemBmp=CreateCompatibleBitmap(img,640,480) hBackHand=CreateCompatibleBitmap(img,640,480) hMyHand=CreateCompatibleBitmap(img,40,50) SelectObject(hBackDC,hBackBmp) BitBlt(hMemDC,0,0,40,50,hBackDC,0,0,SRCCOPY) SelectObject(hMyDC,hMyBmp) BitBlt(hMemDC,0,0,40,50,hMyDC,0,0,SRCCOPY) SelectObject(hMemDC,hMemBmp) ReleaseDC(hMainWnd,img) End Sub Sub MainWnd_Paint(hDC As HDC) BitBlt(hDC,0,0,640,480,hMemDC,0,0,SRCCOPY) End Sub わかりにくいとは思いますが、お願いします。

  • ActiveBasic 音楽のループ再生

    Active Basic4.23.00でプログラムを書いています。 音楽再生ソフトを作ってみようと思い、作り始めたのですが、なかなかループ再生が出来ません。 チェックボックス1がチェックされていると、ループさせようと思っています。 ↓問題のコード Sub MainWnd_MciNotify(flags As Long, DevID As DWord) If SendMessage(GetDlgItem(hMainWnd,CheckBox1),BM_GETCHECK,0,0)=BST_CHECKED Then Dim bErr As Long Dim mpp As MCI_PLAY_PARMS mpp.dwCallback=hMainWnd mpp.dwFrom=0 bErr=mciSendCommand(mop.wDeviceID,MCI_PLAY,MCI_NOTIFY or MCI_FROM,mpp) If bErr Then MessageBox(hMainWnd,"デバイス再生エラー","Error",MB_OK or MB_ICONHAND) Exit Sub End If Else mpp.dwCallback=hMainWnd mpp.dwFrom=0 End If End Sub 一見、(少なくとも自分は)成功しているように見えるのですが、 2回ループした後、フリーズしてしまいます。 すみませんが、何故そうなるかが分かる方がいらっしゃいましたら、すみませんが、ご教授ください。 お願いします。

  • Active Basic 画像表示 添削願い

    AB4.23.00を使っています。 複数画像を表示しようと頑張っているのですが、どうやっても出来ません。 すみませんが、コードの添削の方をお願いします。 '----------------------------------------------------------------------------- ' イベント プロシージャ '----------------------------------------------------------------------------- ' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。 ' ウィンドウ ハンドル: hMainWnd ' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。 /*全体*/ Dim hMemDC As HDC /*背景*/ Dim hBackDC As HDC Dim hBackBmp As HBITMAP /*自機*/ Dim hMyDC As HDC Dim hMyBmp As HBITMAP /*プログラムの設定など*/ Dim Dir As String '----------------------------------------------------------------------------- ' ウィンドウメッセージを処理するためのコールバック関数 Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord ' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。 ' イベントプロシージャの呼び出しを行います。 MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam) End Function '----------------------------------------------------------------------------- ' ここから下は、イベントプロシージャを記述するための領域になります。 Sub MainWnd_Destroy() stg_DestroyObjects() PostQuitMessage(0) End Sub Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT) Dim hDC As HDC Dim OldBmp As HBITMAP SetWindowText(hMainWnd,"しゅーてぃんぐ") 'ディレクトリ取得 Dim path[MAX_PATH+1] As Byte GetCurrentDirectory(MAX_PATH,path) Dir=path 'MainWndのDC取得 hDC=GetDC(hMainWnd) '全体DCメモリ作成 hMemDC=CreateCompatibleDC(hDC) '背景 hBackBmp=LoadImage(0,back.bmp",IMAGE_BITMAP,0,0,LR_DEFAULTSIZE or LR_LOADFROMFILE) hBackDC=CreateCompatibleDC(hDC) 'キャラクター hMyBmp=LoadImage(0,A.bmp",IMAGE_BITMAP,0,0,LR_DEFAULTSIZE or LR_LOADFROMFILE) hMyDC=CreateCompatibleDC(hBackDC) '描写 SelectObject(hMemDC,hBackBmp) BitBlt(hMemDC,0,0,640,480,hBackDC,0,0,SRCCOPY) SelectObject(hMemDC,hMyBmp) BitBlt(hMemDC,0,0,40,50,hMyDC,0,0,SRCCOPY) ReleaseDC(hMainWnd,hDC) End Sub Sub MainWnd_Paint(hDC As HDC) BitBlt(hDC,0,0,640,480,hMemDC,0,0,SRCCOPY) End Sub back.bmpの上にA.bmpを描写したいです。 透過処理などはいらないので、どうすれば表示することが出来るかを教えてください。 今は、どちらか片一方しか表示されません。 また、 http://www.geocities.jp/debu0510/basic/main17.html を参考にさせていただいたのですが、CreateCompatibleBitmap関数の使い方が分かりません。 これは、どのようにして使用するのでしょうか。 こちらもご教授お願いします。

  • Active Basic 画像の透過処理

    AB4.23.00を使っています。 簡単なゲームを作ろうと思って作成を進めているのですが、 画像を透過する処理でつまずいてしまいました。 Sub ShowPictures() /*ピクチャを描写する*/ Dim n As Long Dim hDC As HDC Dim hMyMaskDC As HDC '自機マスク用 Dim hMyMaskBmp As HBITMAP '自機マスク用 Dim hMyTempDC As DWord Dim hMyTempBmp As DWord hDC=GetDC(hMainWnd) '背景 BitBlt(hMemDC,0,0,640,480,hBackDC,0,0,SRCCOPY) '敵画像 For n=0 to 100 Step 1 BitBlt(hMemDC,ex[n],ey[n],30,30,hEneDC[n],0,0,SRCCOPY) Next '自機描写 hMyMaskDC=CreateCompatibleDC(hDC) hMyMaskBmp=CreateBitmap(40,50,1,1,0) SelectObject(hMyMaskDC,hMyMaskBmp) BitBlt(hMyMaskDC,0,0,x,y,hMyDC,0,0,SRCCOPY) hMyTempDC=CreateCompatibleDC(hDC) hMyTempBmp=CreateCompatibleBitmap(hDC,40,50) SelectObject(hMyTempDC,hMyTempBmp) BitBlt(hMyTempDC,0,0,x,y,hMyMaskDC,0,0,NOTSRCCOPY) 'BitBlt(hMyTempDC,0,0,x,y,hMyDC,x,y,SRCAND) 'キャラクタ画像をOR転送 BitBlt(hMemDC,0,0,x,y,hMyTempDC,0,0,SRCPAINT) 'マスク画像をAND転送 BitBlt(hMemDC,0,0,x,y,hMyMaskDC,0,0,SRCAND) 'マスク用画像をメモリから解放 DeleteDC(hMyMaskDC) DeleteObject(hMyMaskBmp) 'キャラクタの一時画像をメモリから解放 DeleteDC(hMyTempDC) DeleteObject(hMyTempBmp) InvalidateRect(hMainWnd,ByVal 0,FALSE) DeleteObject(hMyMaskBmp) DeleteDC(hMyMaskDC) End Sub 描写処理のルーチンです。 これを実行すると、黒い塊になってしまいます。 どのように書けば、ちゃんと表示できるようになるのでしょうか。 すみませんが、ご教授をお願いします。

  • Active Basic Paintイベントを通らずに再描写

    Active Basicでゲームを作っています。 最終目標は『東方』のような弾幕避けシューティングです。 スレッドを何とか勉強して、ちらつきも抑えようと頑張っています。 このとき、画像を描写する場合には、 InvalidateRect(hMainWnd, ByVal 0, TRUE) を使って最描写を連続して繰り返してきました。 しかし、これを繰り返すと、『プレイヤー』『弾』『敵』を何度も連続して再描写するため、どうしてもちらついてしまいます。 この、『プレイヤー』『弾』『敵』を別々に描写するとちらつき現象はなくなると思うのですが、どうしてもやり方がわかりません。 InvalidateRect(hMainWnd, ByVal 0, TRUE)を使うと、結局Paintイベントが呼び出されるため、Sub MainWnd_Paint(hDC As HDC)の中に『プレイヤー』『弾』『敵』の描写処理を書いて、 プレイヤー描写、弾(約50個)のループ描写、敵のループ描写が一度にまとめて描写されてしまいます。 これらを別々に表示させるにはどうすればいいのでしょうか? すみませんが、出来るだけやさしくご教授ください。 お願いします。

  • ActiveBasic リソースの追加/読み込み

    ActiveBasic 4.23.00 を使用しています。 今回、ファイルの暗号化ソフトを作成しようと思い、手段を考えていたところ、ON ERROR RESUME NEXT様のリソースの追加/読み込みの項目を見つけ、 これでやってみようと作成を始めました。 Declare Function BeginUpdateResource Lib "kernel32" Alias "BeginUpdateResourceA" (pFileName As BytePtr,bDeleteExistingResources As Long) As Long Declare Function UpdateResource Lib "kernel32" Alias "UpdateResourceA" (hUpdate As Long,lpType As BytePtr,lpName As BytePtr,wLanguage As Long,lpData As VoidPtr,cbData As Long) As Long Declare Function EndUpdateResource Lib "kernel32" Alias "EndUpdateResourceA" (hUpdate As Long,fDiscard As Long) As Long '定数 Const RT_MANIFESTID=1 Const RT_MANIFEST="BINTYPE" Sub MainWnd_CommandButton1_Click() Dim IsUpdate As Long Dim Update As Long Dim temp As String 'EditBoxをチェック Dim Ed1 As Long Dim Ed2 As Long Dim buf1 As BytePtr Dim buf2 As BytePtr Ed1=GetWindowTextLength(GetDlgItem(hMainWnd,EditBox1)) Ed2=GetWindowTextLength(GetDlgItem(hMainWnd,EditBox2)) If Ed1=0 Then MessageBox(hMainWnd,"埋め込み用物質が選択されていません","Error 1",MB_OK or MB_ICONHAND) Exit Sub End If If Ed2=0 Then MessageBox(hMainWnd,"埋め込み先物質が選択されていません","Error 2",MB_OK or MB_ICONHAND) Exit Sub End If buf1=malloc(Ed1+1) buf2=malloc(Ed2+1) GetDlgItemText(hMainWnd,EditBox1,buf1,Ed1) GetDlgItemText(hMainWnd,EditBox2,buf2,Ed2) temp=MakeStr(buf2) IsUpdate=BeginUpdateResource(buf1,TRUE)'FileName はターゲットファイルのフルパス。Ex:"C:\test.exe" にリソースを埋め込む場合、FileName="C:\test.exe" If IsUpdate=0 Then'エラー free(buf1) free(buf2) MessageBox(hMainWnd,"リソースの埋め込み先に異常あり","Error 3",MB_OK or MB_ICONHAND) Exit Sub EndIf Update=UpdateResource(IsUpdate,RT_MANIFEST,RT_MANIFESTID,MAKELANGID(LANG_JAPANESE,SUBLANG_SYS_DEFAULT),temp,Len(temp)) If Update=0 Then'エラー EndUpdateResource(IsUpdate,TRUE) free(buf1) free(buf2) MessageBox(hMainWnd,"リソースの埋め込み時に異常事態発生","Error 4",MB_OK or MB_ICONHAND) Exit Sub End If EndUpdateResource(IsUpdate,FALSE) free(buf1) free(buf2) MessageBox(hMainWnd,"たぶんエラーなく書き込みを完了しました。","Success!!",MB_OK or MB_ICONINFORMATION) End Sub このように書いてみたのですが、IsUpdate=0でいつもエラーが返ってきます。 何故かが分かりません。 すみませんが、ご存知の方がいらっしゃいましたら、ご教授の方をお願いします。

  • ボタンが押されたときの反応 Basic

    Active Basicでゲームプログラムを書いています。 ボタンを押したときの反応で、上下左右に画像を動かしたいのですが、 ボタンを押すと、いったん静止してから、連打処理(?)のように動きます。 やりたいことは、ボタンを押すとすぐに上下左右に一定間隔で画像を動かすことです。 Sub MainWnd_KeyDown(KeyCode As Long, flags As Long) If KeyCode=37 Then If x<=3 Then Exit Sub End If MyBmpInfo=2 x=x-5 Else If KeyCode=38 Then If y<=0 Then Exit Sub End If MyBmpInfo=1 y=y-5 Else If KeyCode=39 Then If x>=600 Then Exit Sub End If MyBmpInfo=3 x=x+5 Else If KeyCode=40 Then If y>=400 Then Exit Sub End If y=y+5 End If InvalidateRect(hMainWnd,ByVal 0,TRUE) End Sub と書きました。 すみませんが、どなたかご存知の方がいらっしゃいましたら、ご教授ください。 お願いします。

専門家に質問してみよう