使用SetWindowText()向Edit框内写写进数据乱码

使用SetWindowText()向Edit框内写写入数据乱码!
本帖最后由 yangxuefeng09 于 2014-09-06 21:21:17 编辑
从一个txt中读入文本,然后再使用SetWindowText()向Edit框内写写入数据,显示出来的都是乱码!
求各位前辈帮助,谢谢!

//本程序用来文本编辑框
#include "windows13.h"
#include "stdafx.h"
#include "resource.h"
#include "stdio.h"
#include "windows.h"

HINSTANCE g_hInst=NULL;
HWND g_hEdit=NULL;

VOID OnSave();
VOID OnOpen();//打开文件
VOID OnCreate(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
g_hEdit=CreateWindowEx(0,TEXT("EDIT"),TEXT("HELLO EDIT!"),
WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|ES_AUTOHSCROLL|ES_AUTOVSCROLL|ES_MULTILINE,
0,0,100,200,hWnd,(HMENU)1001,g_hInst,NULL);
}

VOID OnCommand(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
int nNotifyCode=HIWORD(wParam);
int nCtrlIDandMenuEvent=LOWORD(wParam);
switch(nCtrlIDandMenuEvent)
{
case ID_SAVE1:
OnSave();
break;
case ID_OPEN:
OnOpen();
break;
case ID_COPY:
SendMessage(g_hEdit,WM_COPY,0,0);
//要查看这个消息的效果需要先把,Edit框中的东西选中,然后才能点击复制按钮,如果不选中任何东西,那么你就没有东西可以复制
break;
case ID_PASTE:
SendMessage(g_hEdit,WM_PASTE,0,0);
break;
case ID_SELECT:
SendMessage(g_hEdit,EM_SETSEL,0,-1);
break;
}
}

VOID OnSize(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
RECT RectClient={0};
GetClientRect(hWnd,&RectClient);
MoveWindow(g_hEdit,RectClient.left,RectClient.top,RectClient.right,RectClient.bottom,TRUE);
}


VOID OnSave()//保存文本框中的内容
{
LRESULT  nTextLen=SendMessage(g_hEdit,WM_GETTEXTLENGTH,0,0);
TCHAR * szBuffer=(TCHAR *)malloc((nTextLen+1)*sizeof(TCHAR));//内存分配的数量不够就会出现问题。堆出现错误
memset(szBuffer,0,(nTextLen+1));//缓存清空
SendMessage(g_hEdit,WM_GETTEXT,nTextLen+1,(LPARAM)szBuffer);
FILE * file=_tfopen(TEXT("C:\\text.txt"),TEXT("w+"));
//if (fwrite(str, sizeof(wchar_t), strSize, fileHandle) != strSize)
int nCount=fwrite(szBuffer,sizeof(TCHAR),nTextLen,file);
TCHAR szText[50]=TEXT("");
_stprintf(szText,TEXT("成功写入文件的字符个数:%d"),nCount);
MessageBox(NULL,szText,TEXT("保存字符个数:"),MB_OK);
fclose(file);
free(szBuffer);
}

VOID OnOpen()//打开文件
{/*
//打开一个文件
FILE * pfile=_tfopen(TEXT("C:\\text1.txt"),TEXT("r"));
//计算文件中内容的长度
fseek(pfile,0,SEEK_END);
long nLen=ftell(pfile);
fseek(pfile,0,SEEK_SET);
//分配缓冲区
TCHAR * szBuffer=(TCHAR*)malloc(nLen+1);
int num1=sizeof(TCHAR);
int num=_tcslen(szBuffer);
memset(szBuffer,0,(nLen+1));//注意memset(szBuffer,0,nLen+1)和memset(szBuffer,0,num);两个语句的区别:nLen+1和num两个数值的区别。
//将文件内容写入缓存
fread(szBuffer,nLen,1,pfile);
//将缓存内容写入EDIT框
fclose(pfile);
//SendMessage(g_hEdit,WM_SETTEXT,0,(LPARAM)szBuffer);
SetWindowText(g_hEdit,szBuffer);
free(szBuffer);
*/
//上面的这段代码,读取文件的时候,读出都是乱码,原因有待解决,先放在这里!
HANDLE hFile=CreateFile(TEXT("C:\\text3.txt"),GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
DWORD nHigh=0;
DWORD nLow=GetFileSize(hFile,&nHigh);
TCHAR * pszBuffer=(TCHAR *)malloc(nLow+1);
memset(pszBuffer,0,nLow+1);
SetFilePointer(hFile,1,NULL,FILE_BEGIN);
DWORD nRead=0;
ReadFile(hFile,(TCHAR *)pszBuffer,nLow+1,&nRead,NULL);
SetWindowText(g_hEdit,(TCHAR *)pszBuffer);
free(pszBuffer);
CloseHandle(hFile);
//上面的这段代码,读取文件的时候,读出都是乱码,原因有待解决,先放在这里!
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{

switch(uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND://用来处理菜单消息
OnCommand(hWnd,uMsg,wParam,lParam);//
break;
case WM_CREATE:
OnCreate(hWnd,uMsg,wParam,lParam);
break;
case WM_SIZE://只要窗口大小发生改变那么就会发出这个消息
OnSize(hWnd,uMsg,wParam,lParam);
break;
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

BOOL   RegisterWnd(TCHAR * pszClassName )
{
WNDCLASSEX  wce={0};
wce.cbClsExtra=0;
wce.cbSize=sizeof(wce);
wce.cbWndExtra=0;
wce.hbrBackground=HBRUSH(COLOR_WINDOW+1);//GetStockBrush(WHITE_BRUSH);
wce.hCursor=NULL;
wce.hIcon=NULL;
wce.hIconSm=NULL;
wce.hInstance=g_hInst;
wce.lpfnWndProc=WndProc;
wce.lpszClassName=pszClassName;
wce.lpszMenuName=NULL;
wce.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;

ATOM   result=RegisterClassEx(&wce);
if (result==0)
{
MessageBox(NULL,TEXT("窗口类注册失败!"),TEXT("窗口类注册失败!"),MB_OK);
return FALSE;
}
return TRUE;
}

VOID  DisplayWindow(HWND hWnd)    
{
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
}

VOID Message(HWND hWnd)
{
HACCEL hAccel=LoadAccelerators(g_hInst,MAKEINTRESOURCE(IDC_WINDOWS13));
MSG  msg={0};
while(GetMessage(&msg,NULL,0,0))
{
TranslateAccelerator(hWnd,hAccel,&msg);
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

HWND  CreateMyWindow(TCHAR *  pszClassName)
{
//加载字符串资源
TCHAR szText[100]=TEXT("");