ゲームを作りたい人のための ソースコード集

私がその日作った短めのソースを簡単な解説とともに載せていきます
ゲーム制作初心者にとって参考になるかもしれないソースが多いです


<< メッセージ点滅 | main | 10進数を2進数へ変換 >>



メニューバー

ウィンドウにメニューバーを表示させるプログラムです。

ツールを作りたい時などに使えるかもしれません。


;メニューID
#enum Menu_Main=0
#enum Menu_File
#enum Menu_Check
#enum Menu_Radio
#enum Menu_Sub
#enum Menu_Sub2
#enum Menu_Sub3
#enum Menu_Right
;メニュー項目ID
#enum Idm_FileOpen=0
#enum Idm_Save
#enum Idm_SaveAs
#enum Idm_Quit
#enum Idm_Check1
#enum Idm_Check2
#enum Idm_Check3
#enum Idm_Radio1
#enum Idm_Radio2
#enum Idm_Radio3
#enum Idm_Sub
#enum Idm_Right

#include "user32.as"
#define ctype LOWORD(%1) (%1 & $FFFF)

#uselib "kernel32.dll"
#cfunc CopyFile "CopyFileA" sptr,sptr,int

#module
#uselib "comdlg32"
#func GetOpenFileName "GetOpenFileNameA" int
#func GetSaveFileName "GetSaveFileNameA" int
#deffunc dialogEx int v0, str v1, str v2, str v3, str v4
    sdim lpstrFilter, 256 : lpstrFilter = v1
    sdim lpstrInitialDir, 128 : lpstrInitialDir = v4
    sdim lpstrFile, 128 : lpstrFile = v2
    sdim lpstrTitle, 64 : lpstrTitle = v3

    repeat strlen (lpstrFilter)
        x = peek (lpstrFilter, cnt)
        if x>$80 & x<$A0 | x>$DF & x<$FD : continue cnt+2
        if x = $7C : poke lpstrFilter, cnt, $00
    loop

    prm = 76, hwnd, hinstance, varptr (lpstrFilter), 0, 0, 0, varptr (lpstrFile), 256, 0, 0, varptr (lpstrInitialDir), varptr (lpstrTitle)

    if v0 {
        prm.13 = $806 : GetSaveFileName varptr (prm)
    } else {
        prm.13 = $1004 : GetOpenFileName varptr (prm)
    }

    if stat = 0 : return
    return lpstrFile
#global

;WM_COMMANDメッセージ
oncmd gosub *command, $111

;ファイルのポップアップメニュー
CreatePopupMenu
hMenu(Menu_File) = stat
AppendMenu hMenu(Menu_File), $0, Idm_FileOpen, "開く"
AppendMenu hMenu(Menu_File), $3, Idm_Save, "上書き保存"
AppendMenu hMenu(Menu_File), $3, Idm_SaveAs, "名前を付けて保存"
;第2パラ$800は区切り線
AppendMenu hMenu(Menu_File), $800, 0, ""
AppendMenu hMenu(Menu_File), $0, Idm_Quit, "終了"

;チェックボックスのポップアップメニュー
CreatePopupMenu
hMenu(Menu_Check) = stat
AppendMenu hMenu(Menu_Check), $8, Idm_Check1, "チェック1"
AppendMenu hMenu(Menu_Check), $0, Idm_Check2, "チェック2"
AppendMenu hMenu(Menu_Check), $0, Idm_Check3, "チェック3"
;チェックボックスの値を記録する変数
dim checkmenu,3
checkmenu(0)=1

;ラジオボタンのポップアップメニュー
CreatePopupMenu
hMenu(Menu_Radio) = stat
AppendMenu hMenu(Menu_Radio), $0, Idm_Radio1, "ラジオ1"
AppendMenu hMenu(Menu_Radio), $0, Idm_Radio2, "ラジオ2"
AppendMenu hMenu(Menu_Radio), $0, Idm_Radio3, "ラジオ3"
;Idm_Radio1〜Idm_Radio3まで設置し、デフォルトをIdm_Radio1にする
CheckMenuRadioItem hMenu(Menu_Radio), Idm_Radio1, Idm_Radio3, Idm_Radio1, $100

;サブのポップアップメニュー
CreatePopupMenu
hMenu(Menu_Sub3)=stat
AppendMenu hMenu(Menu_Sub3), $0, Idm_Sub, "サブ3"
CreatePopupMenu
hMenu(Menu_Sub2)=stat
AppendMenu hMenu(Menu_Sub2), $10, hMenu(Menu_Sub3), "サブ2"
CreatePopupMenu
hMenu(Menu_Sub)=stat
AppendMenu hMenu(Menu_Sub), $10, hMenu(Menu_Sub2), "サブ1"

;右端のサブのポップアップメニュー
CreatePopupMenu
hMenu(Menu_Right)=stat
AppendMenu hMenu(Menu_Right), $0, Idm_Right, "初期化"

;メインのメニューバー
CreateMenu
hMenu(Menu_Main) = stat
;第2パラ$10はポップアップメニュー、第3パラにポップアップメニューハンドル
AppendMenu hMenu(Menu_Main), $10, hMenu.Menu_File, "ファイル"
AppendMenu hMenu(Menu_Main), $10, hMenu.Menu_Check, "チェックボックス"
AppendMenu hMenu(Menu_Main), $10, hMenu.Menu_Radio, "ラジオボタン"
AppendMenu hMenu(Menu_Main), $10, hMenu.Menu_Sub, "サブ"
;第2パラ$4000を加えて以降のメニュー位置が右側に
AppendMenu hMenu(Menu_Main), $10 | $4000, hMenu.Menu_Right, "初期化メニュー"

;ウィンドウにメニューを付ける
SetMenu hwnd, hMenu.0
DrawMenuBar hwnd

filename=""
stop

//    WM_COMMANDメッセージ
*command
    ;メニューからのウィンドウメッセージ
    if lparam != 0 :return
    
    ;wparamの下位ワードにメニュー項目ID
    wID = LOWORD(wparam)

    switch wID
    ;ファイルメニュー
    case Idm_FileOpen
        dialogEx 0, "すべてのファイル (*.*)|*.*|", "*.*", "ファイルを開く", dirinfo(1)
        if stat=1{
            filename=refstr
            color 255,255,255:boxf:color
            pos 0,0
            mes"開いているファイル¥n"+filename
            dim prm,12 : prm = 48, $11 : menustr="上書き保存"
            prm.9 = varptr(menustr), strlen(menustr)
            SetMenuItemInfo hMenu(Menu_File),Idm_Save,0,varptr(prm)
            dim prm,12 : prm = 48, $11 : menustr="名前を付けて保存"
            prm.9 = varptr(menustr), strlen(menustr)
            SetMenuItemInfo hMenu(Menu_File),Idm_SaveAs,0,varptr(prm)
        }
    swbreak
    case Idm_Save
        ret = CopyFile(varptr(filename),varptr(filename),0)
    swbreak
    case Idm_SaveAs
        dialogEx 1, "すべてのファイル (*.*)|*.*|", filename, "名前を付けて保存", ""
        trefstr=refstr
        ret = CopyFile(varptr(filename),varptr(trefstr),0)
        pos 0,0
        mes"開いているファイル¥n"+filename+"¥n"
        mes"保存したファイル¥n"+trefstr
    swbreak
    case Idm_Quit
        dialog"終了しますか?",2
        if stat=6:end
    swbreak
    ;チェックボックスメニュー
    case Idm_Check1
        checkmenu(0)^1
        ;第3パラに$0(チェックはずす)、$8(チェックする)
        CheckMenuItem hMenu(Menu_Check), Idm_Check1, $8*checkmenu(0)
    swbreak
    case Idm_Check2
        checkmenu(1)^1
        CheckMenuItem hMenu(Menu_Check), Idm_Check2, $8*checkmenu(1)
    swbreak
    case Idm_Check3
        checkmenu(2)^1
        CheckMenuItem hMenu(Menu_Check), Idm_Check3, $8*checkmenu(2)
    swbreak
    ;ラジオボタンメニュー
    case Idm_Radio1
    case Idm_Radio2
    case Idm_Radio3
        CheckMenuRadioItem hMenu(Menu_Radio), Idm_Radio1, Idm_Radio3, wID, $100
    swbreak
    ;サブメニュー
    case Idm_Sub
        dialog"クリックしました"
    swbreak
    ;初期化メニュー
    case Idm_Right
        filename=""
        color 255,255,255:boxf
        dim prm,12 : prm = 48, $1, 0, $3 : menustr="上書き保存"
        SetMenuItemInfo hMenu(Menu_File),Idm_Save,0,varptr(prm)
        dim prm,12 : prm = 48, $1, 0, $3 : menustr="名前を付けて保存"
        SetMenuItemInfo hMenu(Menu_File),Idm_SaveAs,0,varptr(prm)
    swbreak
    swend
    
    return

0
    posted by higashijugem 17:54comments(0)|-|


    この記事に対するコメント