ヘルプセンターにあるWin32プログラミング講座-Step11. テキスト エディタを作る
にあるテキストエディターのサンプルプログラムなのですが、
ファイルの読み込みだけうまくいきません。
保存やコピー・ペースト他はサンプル通り動くのですが、テキストファイルを
読み込んでも、何も表示されません。
Sub MainWnd_IDM_OPEN_MenuClick()の中の
SetWindowText(hEdit,buffer)
を
SetWindowText(hEdit,"TEST")
とかに書き換えるとちゃんとTESTと表示されるのでbufferに何も入って
いないのかなぁと思うのですが、今回のようなケース、なにか別に設定しなければ
いけないことがあるのでしょうか?
AB自体、まだ使い始めて日も浅く、慣れていないのでとんでもないミスを
している可能性もあるのですが・・・
サンプルのテキストエディタで読み込みができない
buffer の中身は””で何も入っていませんでした。ブレークしたら、bufferに何が代入されているか確認してください。
その前のコードで
'ファイルサイズを取得
dwFileSize=GetFileSize(hFile,0)
'文字列バッファ用のメモリを確保
buffer=ZeroString(dwFileSize)
'ファイルの内容を文字列変数bufferに読み込む
ReadFile(hFile,buffer,dwFileSize,VarPtr(dwAccessByte),ByVal 0)
とあるのですが、
dwFileSizeはエクスプローラー等でファイルのプロパティから調べたサイズが
入っているので、ここまでは正常のようです。
どこがまずいのでしょう?
よくみるとこれ動く方が凄いコードですね。
下のように書いてみてください。
下のように書いてみてください。
コード: 全て選択
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 FileName[MAX_PATH-1] As Byte
Dim buffer As *Byte
'OPENFILENAME構造体の初期化
FillMemory(VarPtr(ofn),Len(ofn),0)
ofn.lStructSize=Len(ofn)
ofn.hwndOwner=hMainWnd
ofn.lpstrFilter=Ex"テキスト ファイル(*.txt)\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
ofn.lpstrDefExt="*"
'「ファイルを開く」ダイアログ ボックスを表示
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,"ファイルオープンに失敗","TextEditor",MB_OK or MB_ICONEXCLAMATION)
Exit Sub
End If
'ファイルサイズを取得
dwFileSize=GetFileSize(hFile,0)
'文字列バッファ用のメモリを確保
buffer=calloc(dwFileSize+1)
'ファイルの内容を文字列変数bufferに読み込む
ReadFile(hFile,buffer,dwFileSize,VarPtr(dwAccessByte),ByVal 0)
'ファイル ハンドルを閉じる
CloseHandle(hFile)
'-------------------
'EditBox1のハンドルを取得
hEdit=GetDlgItem(hMainWnd, EditBox1)
'hEditにバッファをセットする
SetWindowText(hEdit,buffer)
'hEditにフォーカスをセット
SetFocus(hEdit)
free(buffer)
End Sub
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。