N88モードで作成したものをノーマルウィンドゥにしたい

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
トモカズ

N88モードで作成したものをノーマルウィンドゥにしたい

#1 投稿記事 by トモカズ »

初めての投稿です。ActiveBasic初心者のトモカズと申します。
以下の線中は読み飛ばしていただいて構いません。
-------------------------------------------------------------------------------
私が高校生の時(20数年前!)に作成したプログラムソース(対戦オセロソフト)が押入れの奥から出てきました。
懐かしさのあまり、どうしても実行してみたくなったのですが、残念ながら当時のマシンはありません。
そこでActive Basicの存在を知り、どうにか N88BASICモードにて移植が出来ました。
さほど手を入れる事が無く移植が出来ましたが、どうせWindows版ならば、それらしくしたいと考えるようになりました。
しかし、私自身プログラムを組むのも20年ぶりですし、最近の言語による作り方は何と様変わりしたのだろうと感じております。
こちらのフォーラムの記事を見ても(頭が固いのか)良く理解出来ず、四苦八苦しております。
------------------------------------------------------------------------------
さて、ここから本題です。
現在のN88BASICモードで作成したソースをノーマルウィンドゥモードに変更したいと思います。
そこで、マウス位置のキャプチャー及びマウスボタンの判定、ビットマップ表示、テキスト文字の表示をするそれぞれのサブルーチン(・・とは最近言わないのでしょうか?)を、どの様に組み込んだら良いのかをご教授いただきたいのです。
どうぞ、よろしくお願いいたします。

なお、N88モードで作成したものが以下のファイルです。石をビットマップにして見栄えを良くし、マウス操作による動作にしたいと思っております。
http://homepage3.nifty.com/ae85fcmxs/re ... ab-21a.lzh
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#2 投稿記事 by konisi »

マウス位置の取得にはGetCursorPosとScreenToClientが使えます。
判定にはイベントを使ってください。 テキストの表示にはTextOutやDrawTextがあります。GetDCについても調べてください。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

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

#3 投稿記事 by トモカズ »

早々の返信ありがとうございます。
また、サンプルまで作成いただきまして感謝いたします。

早速、実行してみました。ビットマップの表示に成功しました。
基本的な質問で恐縮ですが、メインルーチン(現在N88モードで作成したコード)は「ここから下は、イベントプロシージャを記述するための領域になります。」と書かれている下に記述すればよろしいのでしょうか?
また、メインルーチンからサブルーチンを呼び出すにはどうしたらよいのでしょうか?
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#4 投稿記事 by konisi »

いいえ、その領域に書いてもあまり意味がありません。

もしコンピュータ側がオセロのコマを置く場所を考えるプログラムが
一瞬で終わるなら、MainWndのLButtonUpイベント内に全部記述してもいいと思います。
もし一瞬で終わらないなら(3秒程度からそれ以上かかるなら)、CreateThread関数を使用するなど、フリーズさせないための仕掛けが必要です。

コード: 全て選択

Sub MainWnd_MouseMove(flags As Long, x As Integer, y As Integer)
    'マウスが動いた時に呼び出される。
    'オセロのコマの再描画が必要なら行う。
End Sub

Sub MainWnd_LButtonUp(flags As Long, x As Integer, y As Integer)
/*
マウスが左クリックされた瞬間に呼び出される。
引数のxとyにクライアント座標が入ってる。
その座標を元に石が置けるかどうかをチェックして
置けるなら置いて
置けないならExit Sub
SendMessageで自分宛にWM_PAINTを送りつけて、再描画要求をする。
コンピュータが置ける場所を考えて置く
SendMessageで自分宛にWM_PAINTを送りつけて、再描画要求をする。
*/
End Sub

Sub MainWnd_Paint(hDC As HDC)
    '再描画が必要な時に呼び出される
    'コマを書き直す処理を行う。
End Sub
メインルーチンからサブルーチンを呼び出す方法は、FunctionやSubを使ったプログラムで練習してください。
最近のABでは、関数内部でgosubを使えるかどうかが怪しいので。

コード: 全て選択

#N88BASIC
Sub1()
Sub2()
Sleep(-1)

Sub Sub1()
    Print "呼び出されるサブルーチン1"
End Sub

Sub Sub2()
    Print "呼び出されるサブルーチン2"
End Sub
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

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

#5 投稿記事 by トモカズ »

konisiさん、ありがとうございました。
また、返事が遅くなってしまい申しわけありません。

なかなか一筋縄ではいかないですね。やはり一足飛びに実現は難しいものです。
コツコツと勉強し慣れていくしかなさそうです。
まずは、N88BASICモードでbmpファイルの表示(は出来ました),マウスによる操作(出来るのでしょうか?)を作成してみたいと思います。
その後、ノーマルウィンドゥ化に挑戦してみます。
返信する