WriteFile関数
WriteFile関数
C言語でWindowsプログラミングを学習中です。
2点ご質問です。
LPTSTR型のbufferには(1)のように文字列を格納して、
画面に表示しています。
ファイルに保存するために改行は「\r\n」に置き換えているので、
画面上ではもちろん改行されません。
Editコントロールを使用すれば簡単にいくと思いますが、
このような方法で画面上にも改行・ファイルにも改行という方法はありますか?
さらに(2)で保存したファイルを開くと文字と文字の間に半角のスペースが
入ってしまいます。
ごくたまに入らない時もありますが、文字列の一部しか表示されません。
これはUNICODEとマルチバイトの関係なのでしょうか?
UNICODEを定義しています。
マルチバイトを定義してしまうとGetSaveFileName関数が
エラーになってしまうので・・・
ご教授お願いします。
(1)
case WM_CHAR:
if(wp==VK_BACK){
if(!iCount)
return 0;
iCount--;
InvalidateRect(hWnd,NULL,TRUE);
}else if(wp==VK_RETURN){
buffer[iCount++]='\r\n';
InvalidateRect(hWnd,NULL,TRUE);
return 0;
}else{
buffer[iCount++]=(TCHAR)wp;
InvalidateRect(hWnd,NULL,TRUE);
}
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
GetClientRect(hWnd,&rc);
DrawText(hdc,buffer,iCount,&rc,DT_WORDBREAK);
EndPaint(hWnd,&ps);
return 0;
・
・
・
・
(2)
int MySave(LPTSTR buffer,HWND hWnd)
{
OPENFILENAME ofn;
HANDLE hFile;
TCHAR szFile[MAX_PATH];
TCHAR szFileTitle[MAX_PATH];
DWORD dwAccBytes;
memset(&ofn,0,sizeof(OPENFILENAME));
ofn.lStructSize=sizeof(OPENFILENAME);
ofn.hwndOwner=hWnd;
ofn.lpstrFilter=TEXT("text(*.txt)\0*.txt\0All files(*.*)\0*.*\0\0");
ofn.lpstrFile=szFile;
ofn.lpstrFileTitle=szFileTitle;
ofn.nFilterIndex=1;
ofn.nMaxFile=MAX_PATH;
ofn.nMaxFileTitle=MAX_PATH;
ofn.Flags=OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY;
ofn.lpstrDefExt=TEXT("txt");
ofn.lpstrTitle=TEXT("名前を付けて保存");
if(!GetSaveFileName(&ofn))
return -1;
hFile=CreateFile(szFile,GENERIC_WRITE,0,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
WriteFile(hFile,buffer,(DWORD)lstrlen(buffer),
&dwAccBytes,NULL);
SetWindowText(hWnd,szFileTitle);
CloseHandle(hFile);
return 0;
}