コード: 全て選択
'-----------------------------------------------------------------------------
' イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Declare Function GetLongPathName Lib "kernel32" Alias "GetLongPathNameA" (lpszShortPath As String,lpszLongPath As String,cchBuffer As Long) As Long
Declare Function PathGetArgs Lib "shlwapi" Alias "PathGetArgsA" (psz As BytePtr) As BytePtr
Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As VoidPtr, bInitialOwner As Long, lpName As String) As Long
Sub SetTbButtonData(ByRef ptb As TBBUTTON, iBitmap As Long, idCommand As Long, fsState As Byte, fsStyle As Byte)
'ptb(TBBUTTON構造体)にボタン情報を格納する
With ptb
.iBitmap=iBitmap
.idCommand=idCommand
.fsState=fsState
.fsStyle=fsStyle
.dwData=0
.iString=0
End With
End Sub
Const ID_TOOLBAR = 70 'ツールバーのID
Dim hToolbar As DWord 'ツールバーのハンドル
Dim hImageList As DWord 'イメージリストのハンドル
Const ID_STATUS = 71
Dim hStatus As DWord
Dim file_path As String
Dim FileName[MAX_PATH-1] As Byte
Dim ofn As OPENFILENAME'OPENFILENAME型構造体の宣言
'グローバル領域に整数型変数cntを宣言
Dim cnt=0 As Long
Sub RefreshExt()
Dim hKey As HKEY
Dim udtMenuItemInfo As MENUITEMINFO
With udtMenuItemInfo
.cbSize=44
.fMask=MIIM_STATE
If RegOpenKeyEx(HKEY_CLASSES_ROOT As HKEY,"AppendMissionFile",0,KEY_QUERY_VALUE,hKey)=ERROR_SUCCESS Then
RegCloseKey(hKey)
.fState=MFS_CHECKED
Else
.fState=MFS_UNCHECKED
End If
End With
End Sub
Dim fChanged As Long
Dim hFont As HFONT
hFont=CreateFont(-12,0,0,0,400,0,0,0,128,3,2,1,50,"MS Pゴシック")
Sub AddEditBoxText(ByVal hDlg As HWND,ByVal nIDDlgItem As Long,ByVal lpString As BytePtr)
Dim hEdit As HWND
hEdit=GetDlgItem(hDlg,nIDDlgItem)
SendMessage(hEdit,EM_SETSEL,GetWindowTextLength(hEdit),-1)
SendMessage(hEdit,EM_REPLACESEL,TRUE,lpString As LPARAM)
SetFocus(hEdit)
End Sub
Function GetWindowTextStr(hwnd As HWND, ByRef str As String) As Long
Dim Length As Long
Length = GetWindowTextLength(hwnd)
str = ZeroString(Length)
If Length = 0 Then
GetWindowTextStr = 0
Exit Function
End If
GetWindowTextStr = GetWindowText(hwnd, StrPtr(str), Length + 1)
SetDWord(StrPtr(str) - SizeOf (DWord), GetWindowTextStr)
End Function
Function GetDlgItemTextStr(hDlg As HWND, idDlgItem As Long, ByRef str As String) As Long
GetDlgItemTextStr = GetWindowTextStr(GetDlgItem(hDlg, idDlgItem), str)
End Function
Function GetListBoxStr(hLB As HWND, pos As Long, ByRef str As String) As Long
Dim Length As Long
Length = SendMessage(hLB,LB_GETTEXTLEN,pos,0)
str = ZeroString(Length)
If Length = 0 Then
GetListBoxStr = 0
Exit Function
End If
GetListBoxStr = SendMessage(hLB,LB_GETTEXT,pos,StrPtr(str))
SetDWord(StrPtr(str) - SizeOf (DWord), GetListBoxStr)
End Function
Function GetDlgLisBoxStr(hDlg As HWND, idLB As Long, pos As Long, ByRef str As String) As Long
GetDlgLisBoxStr = GetListBoxStr(GetDlgItem(hDlg, idLB), pos, str)
End Function
Sub DestroyObjects()
DeleteObject(hFont_Combo)
End Sub
Function GetFileName(Name As String) As String
If Name="" then Exit Sub
Dim i As Long
Dim j As Long
Dim Ret(1023) As Byte
For i=Len(Name)-1 To 0 Step -1
If Name(i)=Asc("/") then Exit For
If Name(i)=Asc("\") then Exit For
Next i
i+=1
j=0
Do
Ret(j)=Name(i+j)
If i+j=Len(Name)-1 then Exit Do
j+=1
Loop
GetFileName=Ret
End Function
Dim NameFile As String
Dim rgb As DWord
Dim hEdit As HWND
' ウィンドウメッセージを処理するためのコールバック関数
Function MainWndProc(hWnd As DWord, dwMsg As DWord, wParam As DWord, lParam As DWord) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
Select Case dwMsg
Case WM_CTLCOLOREDIT
If lParam=GetDlgItem(hMainWnd,EditBox1) Then
' カラー選択ダイアログで取得した色を文字色にする
SetTextColor(wParam As HDC,rgb)
UpdateWindow(GetDlgItem(hMainWnd,EditBox1))
Exit Function
End If
End Select
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Destroy()
'イメージリストを破棄
ImageList_Destroy(hImageList)
AppendMissionEditor_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_EditBox1_Change()
fChanged=1
EnableMenuItem(GetMenu(hMainWnd),IDM_SAVE,MF_ENABLED)
Dim buffer[255] As Byte
wsprintf(buffer,"サイズ: %d バイト",GetWindowTextLength(GetDlgItem(hMainWnd,EditBox1)))
SendMessage(hStatus, SB_SETTEXT, 2, buffer)
End Sub
Sub TextSet(path As BytePtr) 'ファイルを開きエディトボックスにセットする関数
Dim hFile As VoidPtr 'ファイルハンドル
Dim FileSize As Long 'ファイルサイズ
Dim buffer As BytePtr 'バッファポインタ
Dim dwAccessByte As DWord
'変数pathにファイルパスが格納される
'ファイルを開く
hFile=CreateFile(path, GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE,
ByVal 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
'ファイルを開けなかったとき
If hFile=INVALID_HANDLE_VALUE Then
MessageBox(hMainWnd,"ファイルオープンに失敗","エラー",MB_OK or MB_ICONEXCLAMATION) 'ここではじかれます。
Exit Sub
End If
'ファイルサイズを取得し、バッファを確保する
FileSize=GetFileSize(hFile,0)
buffer=calloc(FileSize+1)
'ファイルの読み込み
ReadFile(hFile,buffer,FileSize,VarPtr(dwAccessByte),ByVal 0)
buffer[dwAccessByte]=0
'ファイルをクローズ
CloseHandle(hFile)
'テキストバッファをエディットボックスにセットする
SetDlgItemText(hMainWnd,EditBox1,buffer)
'バッファを解放する
free(buffer)
Dim Title$ As String
Dim buf(1023) As Byte
Dim i As Long,j As Long
For i=0 To 1023
If FileName(i)=0 then Exit For
buf(i)=FileName(i)
Next i
NameFile=ZeroString(i)
For j=0 To i-1
NameFile(j)=buf(j)
Next j
Dim FileTopName As String
FileTopName=GetFileName(NameFile)
Title$=FileTopName+" - AppendMissionEditor"
If FileTopName="" then
Title$="新規アペンドミッション - AppendMissionEditor"
End If
SetWindowText(hMainWnd,Title$)
End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Dim hEdit As HWND
Dim ic As INITCOMMONCONTROLSEX
Dim tbb[12] As TBBUTTON
Dim hCombo As HWND
Dim hCombo2 As HWND
CreateMutex(0,0,"AppendMissionEditor")
If GetLastError()=183 Then
MessageBox(0,"このプログラムは二重起動できません。","エラー",MB_ICONEXCLAMATION)
End
End If
hEdit=GetDlgItem(hMainWnd,EditBox1)
hCombo=GetDlgItem(hMainWnd,ComboBox1)
hCombo2=GetDlgItem(hMainWnd,ComboBox2)
SendMessage(hCombo,CB_INSERTSTRING,0,"戦闘機")
SendMessage(hCombo,CB_INSERTSTRING,1,"小型爆撃機")
SendMessage(hCombo,CB_INSERTSTRING,2,"大型爆撃機")
SendMessage(hCombo,CB_INSERTSTRING,3,"輸送機")
SendMessage(hCombo,CB_INSERTSTRING,4,"艦船")
SendMessage(hCombo,CB_INSERTSTRING,5,"地上部隊")
SendMessage(hCombo,CB_INSERTSTRING,6,"地上物")
SendMessage(hCombo,CB_INSERTSTRING,7,"SetName")
SendMessage(hCombo,CB_INSERTSTRING,8,"シェア使用可能")
SendMessage(hCombo2,CB_INSERTSTRING,0,"大日本帝国")
SendMessage(hCombo2,CB_INSERTSTRING,1,"アメリカ合衆国")
SendMessage(hCombo2,CB_INSERTSTRING,2,"ドイツ第三帝国")
SendMessage(hCombo2,CB_INSERTSTRING,3,"イギリス王国")
SendMessage(hCombo2,CB_INSERTSTRING,4,"ソビエト連邦")
SendMessage(hCombo2,CB_INSERTSTRING,5,"イタリア王国")
SendMessage(hCombo2,CB_INSERTSTRING,6,"その他の国")
SendMessage(hCombo2,CB_INSERTSTRING,7,"全て表示")
SendDlgItemMessage(hMainWnd,CommandButton5,BM_SETSTYLE,BS_DEFPUSHBUTTON or BS_NOTIFY,1)
fChanged=0
'コモンコントロールの初期化
ic.dwSize=Len(ic)
ic.dwICC=ICC_BAR_CLASSES
InitCommonControlsEx(ic)
'ボタン情報をセット
SetTbButtonData(tbb[0],0,IDM_NEW,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[1],1,IDM_OPEN,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[2],2,IDM_SAVE,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[3],3,IDM_FILEOVERWRITE,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[4],0,0,TBSTATE_ENABLED,TBSTYLE_SEP)
SetTbButtonData(tbb[5],4,IDM_CUT,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[6],5,IDM_COPY,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[7],6,IDM_PASTE,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[8],7,IDM_UNDO,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[9],0,0,TBSTATE_ENABLED,TBSTYLE_SEP)
SetTbButtonData(tbb[10],8,IDM_SENDMAIL,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[11],0,0,TBSTATE_ENABLED,TBSTYLE_SEP)
SetTbButtonData(tbb[12],9,IDM_ABOUT,TBSTATE_ENABLED,TBSTYLE_BUTTON)
'ツールバーを生成
hToolbar=CreateToolbarEx(hMainWnd, _
WS_CHILD or WS_VISIBLE or TBSTYLE_TOOLTIPS, _
ID_TOOLBAR, _
10, _ 'ビットマップの個数
GetModuleHandle(0), _
IDB_BITMAP1, _ 'ビットマップのリソースID
tbb, _
13, _ 'ボタンの個数
0,0, _ 'ボタンサイズ(0指定で自動セットに)
16,15, _ 'ビットマップサイズ
Len(tbb[0]))
'ウィンドウスタイルにTBSTYLE_FLATを追加
Dim style As Long
style=GetWindowLong(hToolbar,GWL_STYLE)
style=style or TBSTYLE_FLAT
SetWindowLong(hToolbar,GWL_STYLE,style)
'イメージリストを作成(フルカラー)
hImageList=ImageList_LoadImage(GetModuleHandle(0), _
IDB_BITMAP2, _
16, 0, RGB(192,192,192), _
IMAGE_BITMAP,LR_CREATEDIBSECTION)
'ホットイメージを設定
SendMessage(hToolbar, TB_SETHOTIMAGELIST, 0, hImageList)
hStatus = CreateStatusWindow( _
WS_CHILD or WS_VISIBLE or CCS_BOTTOM or SBARS_SIZEGRIP, _
NULL, _
hMainWnd, _
ID_STATUS)
'MainWndを画面の真ん中に移動
Dim MainWndRect As RECT
GetWindowRect(hMainWnd, MainWndRect)
SetWindowPos(hMainWnd, 0,_
(GetSystemMetrics(SM_CXSCREEN) - MainWndRect.right + MainWndRect.left) \ 2,_
(GetSystemMetrics(SM_CYSCREEN) - MainWndRect.bottom + MainWndRect.top) \ 2,_
0, 0, SWP_NOSIZE or SWP_NOZORDER)
SendDlgItemMessage(hMainWnd,ComboBox1,WM_SETFONT,hFont,0)
SendDlgItemMessage(hMainWnd,ComboBox2,WM_SETFONT,hFont,0)
SendDlgItemMessage(hMainWnd,ListBox1,WM_SETFONT,hFont,0)
SendDlgItemMessage(hMainWnd,EditBox2,WM_SETFONT,hFont,0)
SendDlgItemMessage(hMainWnd,CommandButton1,WM_SETFONT,hFont,0)
SendDlgItemMessage(hMainWnd,CommandButton2,WM_SETFONT,hFont,0)
SendDlgItemMessage(hMainWnd,CommandButton3,WM_SETFONT,hFont,0)
SendDlgItemMessage(hMainWnd,CommandButton4,WM_SETFONT,hFont,0)
SendDlgItemMessage(hMainWnd,CommandButton5,WM_SETFONT,hFont,0)
EnableMenuItem(GetMenu(hMainWnd),IDM_SAVE,MF_GRAYED)
Dim Sbuffer As String
Dim hTop As Long
Dim hEnd As Long
Dim path As BytePtr
Sbuffer=GetCommandLine()
hTop=InStr(hTop,Sbuffer,Ex"\q")+3
hEnd=InStr(hTop,Sbuffer,Ex"\q")
'本体
Open Mid$(Sbuffer,hTop,hEnd-hTop) As #1
Input #1, path
If path = "" Then
Exit Sub
End If
TextSet(path As BytePtr)
End Sub
Sub MainWnd_Resize(SizeType As Long, cx As Integer, cy As Integer)
Dim Statusbar_Sizes[2] As Long
Statusbar_Sizes[0]=cx-300
Statusbar_Sizes[1]=cx-150
Statusbar_Sizes[2]=cx
SendMessage(hStatus,SB_SETPARTS,3,Statusbar_Sizes)
Dim Title$ As String
Dim FileTopName As String
FileTopName=GetFileName(FileName)
Title$=FileTopName+" - AppendMissionEditor"
If FileTopName="" then
Title$="新規アペンドミッション - AppendMissionEditor"
End If
SetWindowText(hMainWnd,Title$)
End Sub
Sub file_OverWrite()
Dim hEdit As HWND
Dim hFile As HFILE
Dim pStr As BytePtr
Dim length As DWord
Dim dwAccessByte As DWord
hEdit=GetDlgItem(hMainWnd,EditBox1)
length=GetWindowTextLength(hEdit)+1
pStr=calloc(length)
GetWindowText(hEdit,pStr,length)
If file_path[0]=0 Then
Dim buffer As String
'名前をつけて保存
'OPENFILENAME構造体の初期化
FillMemory(VarPtr(ofn),Len(ofn),0)
ofn.lStructSize=Len(ofn)
ofn.hwndOwner=hMainWnd
ofn.lpstrFilter=Ex"AppendMissionFiles\0*.apm\0テキストファイル\0*.txt\0すべてのファイル(*.*)\0*\0\0"
ofn.nFilterIndex=1
ofn.lpstrFile=FileName
ofn.nMaxFile=MAX_PATH
ofn.lpstrTitle="ファイルの保存"
ofn.Flags=OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST or OFN_EXPLORER or OFN_NOCHANGEDIR or OFN_OVERWRITEPROMPT
ofn.lpstrDefExt="*"
'「ファイルの保存」ダイアログ ボックスを表示
If GetSaveFileName(ofn)=FALSE Then Exit Sub
'EditBox1のハンドルを取得
hEdit=GetDlgItem(hMainWnd, EditBox1)
'テキスト データを格納するためのバッファ領域を確保
length=GetWindowTextLength(hEdit)
buffer=ZeroString(length+1)
'テキスト バッファを取得
GetWindowText(hEdit, buffer, length+1)
'OPENFILENAME構造体のDWORD型変数lStructSizeにOPENFILENAME構造体の大きさを代入
ofn.lStructSize=SizeOf(OPENFILENAME)
'一度にOPENFILENAME構造体を弄りたい場合はWith文が便利
With ofn'構造体の変数名を指定
.lStructSize=SizeOf(OPENFILENAME)
.hwndOwner=hMainWnd
End With
'----------------
' ファイルへ保存
'----------------
hFile=CreateFile(ofn.lpstrFile, GENERIC_WRITE, 0, _
ByVal 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
If hFile=INVALID_HANDLE_VALUE Then
MessageBox(hMainWnd,"ファイルオープンに失敗","AppendMissionEditor",MB_OK or MB_ICONEXCLAMATION)
Exit Sub
End If
file_path=ofn.lpstrFile
'書き込む
WriteFile(hFile,buffer,length,VarPtr(dwAccessByte),ByVal 0)
'ファイル ハンドルを閉じる
CloseHandle(hFile)
Else
'上書き
hFile=CreateFile(file_path,GENERIC_WRITE,NULL,ByVal 0, _
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL)
If hFile<>INVALID_HANDLE_VALUE Then
WriteFile(hFile,pStr,length-1,VarPtr(dwAccessByte),ByVal 0)
CloseHandle(hFile)
Else
MessageBox(hMainWnd,"ファイルオープンに失敗",
"AppendMissionEditor",MB_OK or MB_ICONEXCLAMATION)
End If
End If
free(pStr)
fChanged=0
End Sub
Sub MainWnd_ComboBox1_SelChange()
Dim Data As String
Dim data As String
Dim hList As HWND
GetDlgItem(hMainWnd,ListBox1)
GetDlgItemTextStr(hMainWnd,ComboBox2,data)
GetDlgItemTextStr(hMainWnd,ComboBox1,Data)
If data="大日本帝国" Then
Select Case Data
Case "戦闘機"
SendMessage(hList,LB_RESETCONTENT,0,0)
SendMessage(hList,LB_INSERTSTRING,0,"TYPE97")
SendMessage(hList,LB_INSERTSTRING,1,"TYPE1")
SendMessage(hList,LB_INSERTSTRING,2,"ZERO21")
SendMessage(hList,LB_INSERTSTRING,3,"SHOKI")
SendMessage(hList,LB_INSERTSTRING,4,"TORYU")
SendMessage(hList,LB_INSERTSTRING,5,"GEKKO")
SendMessage(hList,LB_INSERTSTRING,6,"HIEN")
SendMessage(hList,LB_INSERTSTRING,7,"ZERO52")
SendMessage(hList,LB_INSERTSTRING,8,"SIDEN")
SendMessage(hList,LB_INSERTSTRING,9,"RAIDEN")
SendMessage(hList,LB_INSERTSTRING,10,"HAYATE")
SendMessage(hList,LB_INSERTSTRING,11,"SHOKI2")
SendMessage(hList,LB_INSERTSTRING,12,"JINPU")
SendMessage(hList,LB_INSERTSTRING,13,"TENRAI")
SendMessage(hList,LB_INSERTSTRING,14,"SIDEN21")
SendMessage(hList,LB_INSERTSTRING,15,"TYPE5")
SendMessage(hList,LB_INSERTSTRING,16,"REPPU")
SendMessage(hList,LB_INSERTSTRING,17,"KI83")
SendMessage(hList,LB_INSERTSTRING,18,"SINDEN")
SendMessage(hList,LB_INSERTSTRING,19,"SHUSUI")
Case "小型爆撃機"
SendMessage(hList,LB_RESETCONTENT,0,0)
SendMessage(hList,LB_INSERTSTRING,0,"T97TB")
SendMessage(hList,LB_INSERTSTRING,1,"T99SB")
SendMessage(hList,LB_INSERTSTRING,2,"SUISEI")
SendMessage(hList,LB_INSERTSTRING,3,"TENZAN")
SendMessage(hList,LB_INSERTSTRING,4,"GINGA")
SendMessage(hList,LB_INSERTSTRING,5,"RYUSEI")
SendMessage(hList,LB_INSERTSTRING,6,"KI102")
Case "大型爆撃機"
SendMessage(hList,LB_RESETCONTENT,0,0)
SendMessage(hList,LB_INSERTSTRING,0,"T96LA")
SendMessage(hList,LB_INSERTSTRING,1,"T97HB")
SendMessage(hList,LB_INSERTSTRING,2,"Betty")
SendMessage(hList,LB_INSERTSTRING,3,"Hiryu")
SendMessage(hList,LB_INSERTSTRING,4,"RENZAN")
Case "輸送機"
SendMessage(hList,LB_RESETCONTENT,0,0)
SendMessage(hList,LB_INSERTSTRING,0,"Type0TP")
Case "艦船"
SendMessage(hList,LB_RESETCONTENT,0,0)
SendMessage(hList,LB_INSERTSTRING,0,"TBoat")
SendMessage(hList,LB_INSERTSTRING,1,"Destroyer")
SendMessage(hList,LB_INSERTSTRING,2,"Cruiser")
SendMessage(hList,LB_INSERTSTRING,3,"BattleShip")
SendMessage(hList,LB_INSERTSTRING,4,"Carrier")
SendMessage(hList,LB_INSERTSTRING,5,"LCarrier")
SendMessage(hList,LB_INSERTSTRING,6,"OilTanker")
SendMessage(hList,LB_INSERTSTRING,7,"TroopShip")
SendMessage(hList,LB_INSERTSTRING,8,"AACruiser")
SendMessage(hList,LB_INSERTSTRING,9,"Dreadnaught")
Case "地上部隊"
SendMessage(hList,LB_RESETCONTENT,0,0)
SendMessage(hList,LB_INSERTSTRING,0,"HA")
SendMessage(hList,LB_INSERTSTRING,0,"CHIHA")
SendMessage(hList,LB_INSERTSTRING,0,"HONI")
SendMessage(hList,LB_INSERTSTRING,0,"CHIHE")
SendMessage(hList,LB_INSERTSTRING,0,"CHINU")
SendMessage(hList,LB_INSERTSTRING,0,"FTC")
SendMessage(hList,LB_INSERTSTRING,0,"Track")
SendMessage(hList,LB_INSERTSTRING,0,"LRC")
SendMessage(hList,LB_INSERTSTRING,0,"JPinf")
Case "地上物"
SendMessage(hList,LB_RESETCONTENT,0,0)
SendMessage(hList,LB_INSERTSTRING,0,"AAC")
SendMessage(hList,LB_INSERTSTRING,1,"AirPort")
SendMessage(hList,LB_INSERTSTRING,2,"WatchTower")
SendMessage(hList,LB_INSERTSTRING,3,"WatchTower2")
SendMessage(hList,LB_INSERTSTRING,4,"Hanger")
SendMessage(hList,LB_INSERTSTRING,5,"Barrack")
SendMessage(hList,LB_INSERTSTRING,6,"Barrack2")
SendMessage(hList,LB_INSERTSTRING,7,"HQ")
SendMessage(hList,LB_INSERTSTRING,8,"HQ2")
SendMessage(hList,LB_INSERTSTRING,9,"HQ3")
SendMessage(hList,LB_INSERTSTRING,10,"SupplyCenter")
SendMessage(hList,LB_INSERTSTRING,11,"GasTank")
SendMessage(hList,LB_INSERTSTRING,12,"Box")
SendMessage(hList,LB_INSERTSTRING,13,"Buoy")
SendMessage(hList,LB_INSERTSTRING,14,"Dock")
SendMessage(hList,LB_INSERTSTRING,15,"Bridge")
SendMessage(hList,LB_INSERTSTRING,16,"Bridge2")
SendMessage(hList,LB_INSERTSTRING,17,"Trench")
SendMessage(hList,LB_INSERTSTRING,18,"tree1")
SendMessage(hList,LB_INSERTSTRING,19,"tree2")
SendMessage(hList,LB_INSERTSTRING,20,"tree3")
SendMessage(hList,LB_INSERTSTRING,21,"tree4")
SendMessage(hList,LB_INSERTSTRING,22,"Jhouse1")
SendMessage(hList,LB_INSERTSTRING,23,"Jhouse2")
SendMessage(hList,LB_INSERTSTRING,24,"Jhouse3")
SendMessage(hList,LB_INSERTSTRING,25,"Ehouse1")
SendMessage(hList,LB_INSERTSTRING,26,"Ehouse2")
SendMessage(hList,LB_INSERTSTRING,27,"Ehouse3")
SendMessage(hList,LB_INSERTSTRING,28,"SHouse1")
SendMessage(hList,LB_INSERTSTRING,29,"SHouse2")
SendMessage(hList,LB_INSERTSTRING,30,"Farm1")
SendMessage(hList,LB_INSERTSTRING,31,"Farm2")
SendMessage(hList,LB_INSERTSTRING,32,"building1")
SendMessage(hList,LB_INSERTSTRING,33,"building2")
SendMessage(hList,LB_INSERTSTRING,34,"building3")
SendMessage(hList,LB_INSERTSTRING,35,"building4")
SendMessage(hList,LB_INSERTSTRING,36,"building5")
SendMessage(hList,LB_INSERTSTRING,37,"building6")
SendMessage(hList,LB_INSERTSTRING,38,"HighRise1")
SendMessage(hList,LB_INSERTSTRING,39,"HighRise2")
SendMessage(hList,LB_INSERTSTRING,40,"HighRise3")
SendMessage(hList,LB_INSERTSTRING,41,"HighRise4")
SendMessage(hList,LB_INSERTSTRING,42,"Factory1")
SendMessage(hList,LB_INSERTSTRING,43,"Factory2")
SendMessage(hList,LB_INSERTSTRING,44,"Factory3")
SendMessage(hList,LB_INSERTSTRING,45,"Factory4")
End Select
End If
End Sub
Sub MainWnd_ComboBox2_SelChange()
Dim hList As HWND
Dim Data As String
Dim data As String
hList=GetDlgItem(hMainWnd,ListBox1)
GetDlgItemTextStr(hMainWnd,ComboBox1,Data)
Select Case Data
Case "戦闘機"
GetDlgItemTextStr(hMainWnd,ComboBox2,data)
If data="大日本帝国" Then
SendMessage(hList,LB_RESETCONTENT,0,0)
SendMessage(hList,LB_INSERTSTRING,0,"TYPE97")
SendMessage(hList,LB_INSERTSTRING,1,"TYPE1")
SendMessage(hList,LB_INSERTSTRING,2,"ZERO21")
SendMessage(hList,LB_INSERTSTRING,3,"SHOKI")
SendMessage(hList,LB_INSERTSTRING,4,"TORYU")
SendMessage(hList,LB_INSERTSTRING,5,"GEKKO")
SendMessage(hList,LB_INSERTSTRING,6,"HIEN")
SendMessage(hList,LB_INSERTSTRING,7,"ZERO52")
SendMessage(hList,LB_INSERTSTRING,8,"SIDEN")
SendMessage(hList,LB_INSERTSTRING,9,"RAIDEN")
SendMessage(hList,LB_INSERTSTRING,10,"HAYATE")
SendMessage(hList,LB_INSERTSTRING,11,"SHOKI2")
SendMessage(hList,LB_INSERTSTRING,12,"JINPU")
SendMessage(hList,LB_INSERTSTRING,13,"TENRAI")
SendMessage(hList,LB_INSERTSTRING,14,"SIDEN21")
SendMessage(hList,LB_INSERTSTRING,15,"TYPE5")
SendMessage(hList,LB_INSERTSTRING,16,"REPPU")
SendMessage(hList,LB_INSERTSTRING,17,"KI83")
SendMessage(hList,LB_INSERTSTRING,18,"SINDEN")
SendMessage(hList,LB_INSERTSTRING,19,"SHUSUI")
ElseIf data="アメリカ合衆国" Then
SendMessage(hList,LB_RESETCONTENT,0,0)
SendMessage(hList,LB_INSERTSTRING,0,"P36")
SendMessage(hList,LB_INSERTSTRING,1,"F2A")
SendMessage(hList,LB_INSERTSTRING,2,"P38")
SendMessage(hList,LB_INSERTSTRING,3,"P40")
SendMessage(hList,LB_INSERTSTRING,4,"F4F3")
SendMessage(hList,LB_INSERTSTRING,5,"P39")
SendMessage(hList,LB_INSERTSTRING,6,"F4F4")
SendMessage(hList,LB_INSERTSTRING,7,"P43")
SendMessage(hList,LB_INSERTSTRING,8,"P51C")
SendMessage(hList,LB_INSERTSTRING,9,"P38L")
SendMessage(hList,LB_INSERTSTRING,10,"F6F3")
SendMessage(hList,LB_INSERTSTRING,11,"F6F5")
SendMessage(hList,LB_INSERTSTRING,12,"P47D")
SendMessage(hList,LB_INSERTSTRING,13,"P51D")
SendMessage(hList,LB_INSERTSTRING,14,"F4U")
SendMessage(hList,LB_INSERTSTRING,15,"P61")
SendMessage(hList,LB_INSERTSTRING,16,"P63")
SendMessage(hList,LB_INSERTSTRING,17,"F8F")
SendMessage(hList,LB_INSERTSTRING,18,"XF5U")
ElseIf data="ドイツ第三帝国" Then
SendMessage(hList,LB_RESETCONTENT,0,0)
SendMessage(hList,LB_INSERTSTRING,0,"Bf109e")
SendMessage(hList,LB_INSERTSTRING,0,"Bf110E")
SendMessage(hList,LB_INSERTSTRING,0,"Bf109f")
SendMessage(hList,LB_INSERTSTRING,0,"Fw190A")
SendMessage(hList,LB_INSERTSTRING,0,"Bf109g")
SendMessage(hList,LB_INSERTSTRING,0,"Fw190D")
SendMessage(hList,LB_INSERTSTRING,0,"Ju88G")
SendMessage(hList,LB_INSERTSTRING,0,"Me410")
SendMessage(hList,LB_INSERTSTRING,0,"Me262A")
SendMessage(hList,LB_INSERTSTRING,0,"Ta152H")
SendMessage(hList,LB_INSERTSTRING,0,"Me163")
SendMessage(hList,LB_INSERTSTRING,0,"Bf109k")
SendMessage(hList,LB_INSERTSTRING,0,"He162")
SendMessage(hList,LB_INSERTSTRING,0,"Do335")
ElseIf data="イギリス王国" Then
End If
Case "小型爆撃機"
SendMessage(hList,LB_RESETCONTENT,0,0)
SendMessage(hList,LB_INSERTSTRING,0,"test1")
Case "大型爆撃機"
SendMessage(hList,LB_RESETCONTENT,0,0)
SendMessage(hList,LB_INSERTSTRING,0,"test2")
Case "輸送機"
SendMessage(hList,LB_RESETCONTENT,0,0)
SendMessage(hList,LB_INSERTSTRING,0,"Error")
Case "艦船"
SendMessage(hList,LB_RESETCONTENT,0,0)
SendMessage(hList,LB_INSERTSTRING,0,"TBoat")
SendMessage(hList,LB_INSERTSTRING,1,"Destroyer")
SendMessage(hList,LB_INSERTSTRING,2,"Cruiser")
SendMessage(hList,LB_INSERTSTRING,3,"BattleShip")
SendMessage(hList,LB_INSERTSTRING,4,"Carrier")
SendMessage(hList,LB_INSERTSTRING,5,"LCarrier")
SendMessage(hList,LB_INSERTSTRING,6,"OilTanker")
SendMessage(hList,LB_INSERTSTRING,7,"TroopShip")
SendMessage(hList,LB_INSERTSTRING,8,"AACruiser")
SendMessage(hList,LB_INSERTSTRING,9,"Dreadnaught")
End Select
End Sub
Sub MainWnd_ListBox1_SelChange()
Dim pos As Long
pos = SendMessage(GetDlgItem(hMainWnd,ListBox1),LB_GETCURSEL,0,0)
Dim Data As String
GetListBoxStr(GetDlgItem(hMainWnd,ListBox1),pos,Data)
SetDlgItemText(hMainWnd,EditBox2,Data)
End Sub
Sub MainWnd_ListBox1_DblClick()
Dim pos As Long
Dim Data As String
pos = SendDlgItemMessage(hMainWnd,ListBox1,LB_GETCURSEL,0,0)
GetListBoxStr(GetDlgItem(hMainWnd,ListBox1),pos,Data)
AddEditBoxText(hMainWnd,EditBox1,Data)
End Sub
'hEditはグローバル変数
Sub MainWnd_IDM_NEW_MenuClick()
Dim cancel As Integer
If fChanged Then
' 保存するかユーザーに訊く。
Dim ret As Long
ret = MessageBox(hMainWnd, "内容が変更されています。保存しますか?", "AppendMissionEditor", MB_YESNOCANCEL or MB_ICONEXCLAMATION)
Select Case ret
Case IDYES
file_OverWrite()
'hEditとファイルパスの初期化
file_path=""
SetWindowText(hEdit,"")
fChanged=0
Case IDNO
'hEditとファイルパスの初期化
file_path=""
SetWindowText(hEdit,"")
fChanged=0
Case IDCANCEL
cancel = 0
End Select
End If
file_path=""
SetDlgItemText(hMainWnd,EditBox1,NULL)
NameFile=""
SetWindowText(hMainWnd,"新規アペンドミッション - AppendMissionEditor")
fChanged=0
UpdateWindow(GetDlgItem(hMainWnd,EditBox1))
End Sub
Sub MainWnd_IDM_OPEN_MenuClick()
Dim hEdit As Long
Dim ofn As OPENFILENAME
Dim hFile As Long
Dim dwFileSize As DWord
Dim dwAccessByte As DWord
Dim buffer As BytePtr
'OPENFILENAME構造体の初期化
FillMemory(VarPtr(ofn),Len(ofn),0)
ofn.lStructSize=Len(ofn)
ofn.hwndOwner=hMainWnd
ofn.lpstrFilter=Ex"AppendMissionFiles\0*.apm\0テキストファイル\0*.txt\0すべてのファイル(*.*)\0*\0\0"
ofn.nFilterIndex=1
ofn.lpstrFile=FileName
ofn.nMaxFile=MAX_PATH
ofn.lpstrTitle="ファイルを開く"
ofn.Flags=OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST or OFN_EXPLORER or OFN_NOCHANGEDIR
ofn.lpstrDefExt="*"
Dim cancel As Integer
If fChanged Then
' 保存するかユーザーに訊く。
Dim ret As Long
ret = MessageBox(hMainWnd, "内容が変更されています。保存しますか?", "AppendMissionEditor", MB_YESNOCANCEL or MB_ICONEXCLAMATION)
Select Case ret
Case IDYES
file_OverWrite()
file_path=""
SetWindowText(hEdit,"")
fChanged=0
Case IDNO
cancel=0
Case IDCANCEL
Exit Sub
End Select
End If
'「ファイルを開く」ダイアログ ボックスを表示
If GetOpenFileName(ofn)=0 Then Exit Sub
'-------------------
' ファイル オープン
'-------------------
hFile=CreateFile(ofn.lpstrFile, GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, _
ByVal 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
If hFile=INVALID_HANDLE_VALUE Then
MessageBox(hMainWnd,"ファイルオープンに失敗","AppendMissionEditor",MB_OK or MB_ICONEXCLAMATION)
Exit Sub
End If
file_path=ofn.lpstrFile
'ファイルサイズを取得し、バッファを確保する
dwFileSize=GetFileSize(hFile,0)
buffer=malloc(dwFileSize+1)
'ファイルの内容を文字列変数bufferに読み込む
ReadFile(hFile,buffer,dwFileSize,VarPtr(dwAccessByte),ByVal 0)
buffer[dwAccessByte]=0
'ファイル ハンドルを閉じる
CloseHandle(hFile)
'-------------------
'OPENFILENAME構造体のDWORD型変数lStructSizeにOPENFILENAME構造体の大きさを代入
ofn.lStructSize=SizeOf(OPENFILENAME)
fChanged=0
'EditBox1のハンドルを取得
hEdit=GetDlgItem(hMainWnd, EditBox1)
'hEditにバッファをセットする
SetWindowText(hEdit,buffer)
'バッファを解放する
free(buffer)
'hEditにフォーカスをセット
SetFocus(hEdit)
Dim Title$ As String
Dim buf(1023) As Byte
Dim i As Long,j As Long
For i=0 To 1023
If FileName(i)=0 then Exit For
buf(i)=FileName(i)
Next i
NameFile=ZeroString(i)
For j=0 To i-1
NameFile(j)=buf(j)
Next j
Dim FileTopName As String
FileTopName=GetFileName(NameFile)
Title$=FileTopName+" - AppendMissionEditor"
If FileTopName="" then
Title$="新規アペンドミッション - AppendMissionEditor"
End If
SetWindowText(hMainWnd,Title$)
End Sub
Sub MainWnd_IDM_SAVE_MenuClick()
Dim hEdit As Long
Dim ofn As OPENFILENAME
Dim hFile As Long
Dim length As DWord
Dim dwAccessByte As DWord
Dim FileName[MAX_PATH] As Byte
Dim buffer As String
'OPENFILENAME構造体の初期化
FillMemory(VarPtr(ofn),Len(ofn),0)
ofn.lStructSize=Len(ofn)
ofn.hwndOwner=hMainWnd
ofn.lpstrFilter=Ex"AppendMissionFiles\0*.apm\0すべてのファイル(*.*)\0*\0\0"
ofn.nFilterIndex=1
ofn.lpstrFile=FileName
ofn.nMaxFile=MAX_PATH
ofn.lpstrTitle="ファイルの保存"
ofn.Flags=OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST or OFN_EXPLORER or OFN_NOCHANGEDIR or OFN_OVERWRITEPROMPT
ofn.lpstrDefExt="*"
'「ファイルの保存」ダイアログ ボックスを表示
If GetSaveFileName(ofn)=0 Then Exit Sub
'EditBox1のハンドルを取得
hEdit=GetDlgItem(hMainWnd, EditBox1)
'テキスト データを格納するためのバッファ領域を確保
length=GetWindowTextLength(hEdit)
buffer=ZeroString(length+1)
'テキスト バッファを取得
GetWindowText(hEdit, buffer, length+1)
'----------------
' ファイルへ保存
'----------------
hFile=CreateFile(ofn.lpstrFile, GENERIC_WRITE, 0, _
ByVal 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
If hFile=INVALID_HANDLE_VALUE Then
MessageBox(hMainWnd,"ファイルオープンに失敗","AppendMissionEditor",MB_OK or MB_ICONEXCLAMATION)
Exit Sub
End If
'書き込む
WriteFile(hFile,buffer,length,VarPtr(dwAccessByte),ByVal 0)
fChanged=0
'ファイル ハンドルを閉じる
CloseHandle(hFile)
End Sub
Sub MainWnd_IDM_FILEOVERWRITE_MenuClick()
file_OverWrite()
End Sub
Sub MainWnd_IDM_EXIT_MenuClick()
SendMessage(hMainWnd,WM_CLOSE,0,0)
End Sub
Sub MainWnd_IDM_UNDO_MenuClick()
SendMessage(GetDlgItem(hMainWnd,EditBox1), WM_UNDO,0,0)
End Sub
Sub MainWnd_IDM_CUT_MenuClick()
SendMessage(GetDlgItem(hMainWnd,EditBox1), WM_CUT,0,0)
End Sub
Sub MainWnd_IDM_COPY_MenuClick()
SendMessage(GetDlgItem(hMainWnd,EditBox1), WM_COPY,0,0)
End Sub
Sub MainWnd_IDM_PASTE_MenuClick()
SendMessage(GetDlgItem(hMainWnd,EditBox1), WM_PASTE,0,0)
End Sub
Sub MainWnd_IDM_ALLSELECT_MenuClick()
Dim hEdit As Long
Dim length As Long
'EditBox1のハンドルを取得
hEdit=GetDlgItem(hMainWnd,EditBox1)
'テキスト データの長さを取得
length=GetWindowTextLength(hEdit)
'すべての部分を選択する
SendMessage(hEdit,EM_SETSEL,0,length)
End Sub
Sub MainWnd_IDM_COLOR_MenuClick()
Dim chc As *CHOOSECOLOR ' ダイアログ情報を管理する
Dim buf[16] As DWord ' ユーザーが作った色を残しておきたいならグローバルにする
' カラー選択ダイアログの表示に必要な情報をセット
chc=calloc(SizeOf(CHOOSECOLOR))
chc->lStructSize=SizeOf(CHOOSECOLOR)
chc->hwndOwner=hMainWnd
chc->lpCustColors=VarPtr(buf)
chc->rgbResult=rgb
' カラー選択ダイアログの表示
If ChooseColor(ByVal chc) Then
' ユーザーが色を指定したなら rgb に代入
rgb=chc->rgbResult
End If
free(chc)
End Sub
Sub MainWnd_IDM_TOPIC_MenuClick()
Exec"AppendMissionEditor.chm"
End Sub
Sub MainWnd_IDM_ABOUT_MenuClick()
DialogBox(hMainWnd,"ABOUT")
End Sub
Sub MainWnd_IDM_SENDMAIL_MenuClick()
'「メールで送信」ダイアログボックスを開く
DialogBox(hMainWnd,"SendMail")
End Sub
Sub MainWnd_IDM_SETEXT_MenuClick()
Dim hKey As HKEY,hExtKey As HKEY,Ret As DWord,AppFile[ELM(MAX_PATH)] As Byte,AppFile2[ELM(MAX_PATH)] As Byte
Dim FileType As String,FileTypeLen As DWord
Dim hSubKey[2] As HKEY
Dim dwAppLen As DWord
'関連付けはされているか?
RegCreateKeyEx(HKEY_CLASSES_ROOT As HKEY,"AppendMissionFile",0,NULL,REG_OPTION_NON_VOLATILE,KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY,ByVal NULL,hKey,VarPtr(Ret))
If Ret=REG_CREATED_NEW_KEY Then
'関連付けはされていない
'OrangeArchiverFile[既定]
RegSetValueEx(hKey,"",0,REG_SZ,"Append ミッションファイル",28)
'OrangeArchiverFile\DefaultIcon[既定]
RegCreateKeyEx(hKey,"DefaultIcon",0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,ByVal NULL,hSubKey[0],NULL)
GetModuleFileName(0,AppFile2,MAX_PATH)
'長いファイル名に戻す
dwAppLen=lstrlen(AppFile)
lstrcat(AppFile,",4")
RegSetValueEx(hSubKey[0],"",0,REG_SZ,AppFile,dwAppLen+3)
RegCloseKey(hSubKey[0])
'OrangeArchiverFile\shell
RegCreateKeyEx(hKey,"shell",0,NULL,REG_OPTION_NON_VOLATILE,KEY_CREATE_SUB_KEY,ByVal NULL,hSubKey[0],NULL)
'OrangeArchiverFile\shell\open
RegCreateKeyEx(hSubKey[0],"open",0,NULL,REG_OPTION_NON_VOLATILE,KEY_CREATE_SUB_KEY,ByVal NULL,hSubKey[1],NULL)
'OrangeArchiverFile\shell\open\command[既定]
RegCreateKeyEx(hSubKey[1],"command",0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,ByVal NULL,hSubKey[2],NULL)
AppFile[dwAppLen]=0
lstrcat(AppFile,Ex" \q%1\q")
RegSetValueEx(hSubKey[2],"",0,REG_SZ,AppFile,dwAppLen+6)
RegCloseKey(hSubKey[2])
RegCloseKey(hSubKey[1])
RegCloseKey(hSubKey[0])
RegCreateKeyEx(HKEY_CLASSES_ROOT As HKEY,".apm",0,NULL,REG_OPTION_NON_VOLATILE,KEY_QUERY_VALUE Or KEY_SET_VALUE,ByVal NULL,hExtKey,VarPtr(Ret))
If Ret=REG_CREATED_NEW_KEY Then
'.oarに何も関連付けられていない
RegSetValueEx(hExtKey,"",0,REG_SZ,"AppendMissionFile",28)
RegCloseKey(hExtKey)
Else
'.oarに関連付けられたアプリケーションがある
RegQueryValueEx(hExtKey,"",0,NULL,NULL,VarPtr(FileTypeLen))
FileType=ZeroString(FileTypeLen)
RegQueryValueEx(hExtKey,"",0,NULL,StrPtr(FileType),VarPtr(FileTypeLen))
RegSetValueEx(hExtKey,"",0,REG_SZ,"AppendMissionFile",28)
RegCloseKey(hExtKey)
RegSetValueEx(hKey,"",0,REG_SZ,"Append ミッションファイル",28)
RegSetValueEx(hKey,"AME",0,REG_SZ,StrPtr(FileType),lstrlen(FileType)+1)
RegCloseKey(hKey)
End If
MessageBox(hMainWnd,Ex"[.apm]をAppendMissionEditorに関連付けました。\r\nもし[.apm]ファイルを直接開けない場合は、Windowsを再起動してください。","関連付けの設定",MB_ICONINFORMATION)
Else
RegCreateKeyEx(HKEY_CLASSES_ROOT As HKEY,".apm",0,NULL,REG_OPTION_NON_VOLATILE,KEY_QUERY_VALUE Or KEY_SET_VALUE,ByVal NULL,hExtKey,NULL)
'関連付けがされている
If RegQueryValueEx(hKey,"AME",0,NULL,NULL,VarPtr(FileTypeLen))=ERROR_SUCCESS Then
FileType=ZeroString(FileTypeLen)
RegQueryValueEx(hKey,"AME",0,NULL,StrPtr(FileType),VarPtr(FileTypeLen))
RegCreateKeyEx(HKEY_CLASSES_ROOT As HKEY,".apm",0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,ByVal NULL,hExtKey,NULL)
RegSetValueEx(hExtKey,"",0,REG_SZ,StrPtr(FileType),lstrlen(FileType)+1)
RegCloseKey(hExtKey)
Else
'元々関連付けられたアプリケーションはない。
RegCloseKey(hExtKey)
RegDeleteKey(HKEY_CLASSES_ROOT As HKEY,".apm")
End If
RegDeleteKey(hKey,"shell\open\command")
RegDeleteKey(hKey,"shell\open")
RegDeleteKey(hKey,"shell")
RegDeleteKey(hKey,"DefaultIcon")
RegCloseKey(hKey)
RegDeleteKey(HKEY_CLASSES_ROOT As HKEY,"AppendMissionFile")
MessageBox(hMainWnd,Ex"[.apm]への関連付けを解除しました。","関連付けの解除",MB_ICONINFORMATION)
End If
RefreshExt()
End Sub
Sub MainWnd_QueryClose(ByRef cancel As Integer)
' エディットボックスの内容が変更されているかどうか
If fChanged Then
' 保存するかユーザーに訊く。
Dim ret As Long
Dim letter As String
letter= NameFile + Ex"\r\n" + Ex"\r\n" + Ex"ファイルの内容が変更されています。保存しますか?\r\n"
ret = MessageBox(hMainWnd,letter,"AppendMissionEditor", MB_YESNOCANCEL or MB_ICONEXCLAMATION or MB_DEFBUTTON1)
Select Case ret
Case IDYES
file_OverWrite()
Case IDNO
Exit Sub
Case IDCANCEL
cancel = 1
End Select
End If
End Sub
Sub MainWnd_DropFiles(hDrop As Long)
'FileName配列にファイルパスを格納
Dim FileName[MAX_PATH-1] As Byte
DragQueryFile(hDrop,0,FileName,MAX_PATH)
'ドラッグ&ドロップに関する情報を解放
DragFinish(hDrop)
'-------------------
' ファイル オープン
'-------------------
Dim hFile As Long
Dim dwFileSize As DWord
Dim dwAccessByte As DWord
Dim buffer As BytePtr
hFile=CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, _
ByVal 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
If hFile=INVALID_HANDLE_VALUE Then
MessageBox(hMainWnd,"ファイルオープンに失敗","AppendMissionEditor",MB_OK or MB_ICONEXCLAMATION)
Exit Sub
End If
'ファイルサイズを取得し、バッファを確保する
dwFileSize=GetFileSize(hFile,0)
buffer=malloc(dwFileSize+1)
'ファイルの内容を文字列変数bufferに読み込む
ReadFile(hFile,buffer,dwFileSize,VarPtr(dwAccessByte),ByVal 0)
'ファイル ハンドルを閉じる
CloseHandle(hFile)
'-------------------
'EditBox1のハンドルを取得
Dim hEdit As Long
hEdit=GetDlgItem(hMainWnd, EditBox1)
'hEditにバッファをセットする
SetWindowText(hEdit,buffer)
'バッファを解放する
free(buffer)
'hEditにフォーカスをセット
SetFocus(hEdit)
End Sub
Sub MainWnd_Notify(ByRef nmHdr As NMHDR)
Dim pToolTipText As *TOOLTIPTEXT
If nmHdr.code=TTN_NEEDTEXT Then
pToolTipText=calloc(SizeOf(TOOLTIPTEXT))
memcpy(pToolTipText,VarPtr(nmHdr),SizeOf(TOOLTIPTEXT))
Select Case nmHdr.idFrom
Case IDM_NEW
pToolTipText->lpszText="新規作成(&N)"
Case IDM_OPEN
pToolTipText->lpszText="開く(&O)"
Case IDM_SAVE
pToolTipText->lpszText="保存(&S)"
Case IDM_FILEOVERWRITE
pToolTipText->lpszText="上書き保存(&F)"
Case IDM_CUT
pToolTipText->lpszText="切り取り(&C)"
Case IDM_COPY
pToolTipText->lpszText="コピー"
Case IDM_PASTE
pToolTipText->lpszText="貼り付け"
Case IDM_UNDO
pToolTipText->lpszText="元に戻す"
Case IDM_SENDMAIL
pToolTipText->lpszText="メールで送信"
End Select
memcpy(VarPtr(nmHdr),pToolTipText,SizeOf(TOOLTIPTEXT))
free(pToolTipText)
End If
End Sub
Sub MainWnd_CommandButton1_Click()
DialogBox(hMainWnd,"Mission")
End Sub
Sub MainWnd_CommandButton2_Click()
AddEditBoxText(hMainWnd,EditBox1,Ex"[PlayerUnit]\r\n")
Dim hEdit As HWND
hEdit=GetDlgItem(hMainWnd,EditBox1)
SendMessage(hEdit,EM_SETSEL,GetWindowTextLength(hEdit),-1)
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Block=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Sector=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Factor=\r\n")
End Sub
Sub MainWnd_CommandButton3_Click()
AddEditBoxText(hMainWnd,EditBox1,Ex"[Camp1]\r\n")
Dim hEdit As HWND
hEdit=GetDlgItem(hMainWnd,EditBox1)
SendMessage(hEdit,EM_SETSEL,GetWindowTextLength(hEdit),-1)
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"WinCond=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Escape=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Wave1_comment=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Wave2_comment=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Wave2_time=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Wave3_comment=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Wave3_time=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Wave4_comment=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Wave4_time=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Wave5_comment=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Wave5_time=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex";必要に応じてWave6以下は入力してください。\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"WinComment=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"SplashEnemyPer=SplashTargetPer=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"SplashTargetPer=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"EscFriendTargetPer=\r\n")
End Sub
Sub MainWnd_CommandButton4_Click()
AddEditBoxText(hMainWnd,EditBox1,Ex"[Camp2]\r\n")
Dim hEdit As HWND
hEdit=GetDlgItem(hMainWnd,EditBox1)
SendMessage(hEdit,EM_SETSEL,GetWindowTextLength(hEdit),-1)
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"WinCond=Escape=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Escape=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Wave2_comment=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Wave2_time=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Wave3_comment=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Wave3_time=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Wave4_comment=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Wave4_time=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Wave5_comment=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"Wave5_time=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex";必要に応じてWave6以下は入力してください。\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"WinComment=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"SplashEnemyPer=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"SplashTargetPer=\r\n")
SendMessage(hEdit,EM_REPLACESEL,TRUE,Ex"EscFriendTargetPer=\r\n")
End Sub
Sub MainWnd_CommandButton5_Click()
DialogBox(hMainWnd,"UnitSet")
End Sub