我用VC的SDK编程 .
其类似用记事本功能,但不知为何,在读取*.txt 文件的内容到EDIT 上时,
读出的内容与*.TXT 的内容不符.
程序很小,请各位看以下源码并指点:#include <windows.h>
#include "resource.h"
#include <COMMDLG.h>
#define ID_EDITCHILD 12 #ifndef IDM_EXIT
#define IDM_EXIT 13
#endif
bool initapplication(HINSTANCE) ;
bool initinstance(HINSTANCE,int) ;
void opentextfile(HWND,HWND) ;
LRESULT APIENTRY winproc(HWND,UINT,WPARAM,LPARAM) ;HINSTANCE hinst ;
int APIENTRY WinMain(HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int nshowcmd)
{
MSG msg ;
if (!initapplication(hinstance))
return false ;
if (!initinstance(hinstance,nshowcmd))
return false ;
hinst = hinstance ;
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg) ;
DispatchMessage(&msg) ;
};
return msg.wParam ;
};
bool initapplication(HINSTANCE hinstance)
{
WNDCLASS wndclass ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH) ;
wndclass.hCursor = LoadCursor(hinstance,IDC_ARROW) ;
wndclass.hIcon = LoadIcon(hinstance,IDI_APPLICATION) ;
wndclass.hInstance = hinstance ;
wndclass.lpfnWndProc = (WNDPROC)winproc ;
wndclass.lpszClassName = "FILEDLGCLASS" ;
wndclass.lpszMenuName = NULL ;
wndclass.style = 0 ;
return (RegisterClass(&wndclass)) ;
};bool initinstance(HINSTANCE hinstance,int nshowcmd)
{
HWND hwnd ;
hwnd = CreateWindow("FILEDLGCLASS",
"这是文本程式示例",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
LoadMenu(hinstance,MAKEINTRESOURCE(MENUD)),
hinstance,
NULL) ;
if (!hwnd)
return false ;
ShowWindow(hwnd,nshowcmd) ;
return true ;
};LRESULT APIENTRY winproc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam)
{
static HWND hwndedit ;
switch(message)
{
case WM_CREATE :
//WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_HSCROLL|ES_LEFT|ES_MULTILINE
//|ES_AUTOVSCROLL|ES_AUTOHSCROLL,
hwndedit = CreateWindow("EDIT",
NULL,
WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_HSCROLL|ES_LEFT|ES_MULTILINE
|ES_AUTOVSCROLL|ES_AUTOHSCROLL,
0,0,0,0,
hwnd,
(HMENU)ID_EDITCHILD,
hinst,
NULL) ;
ShowWindow(hwndedit,1) ;
SetFocus(hwndedit) ;
if (!hwndedit)
MessageBox(hwnd,"FAILE","ERROR",MB_OK) ;
break ;
case WM_SIZE :
MoveWindow(hwndedit,0,0,LOWORD(lparam),HIWORD(lparam),true) ;
break ;
case WM_COMMAND :
switch(LOWORD(wparam))
{
case IDM_OPEN :
opentextfile(hwnd, hwndedit) ;
break ;
case IDM_EXIT :
SendMessage(hwnd,WM_DESTROY,0,0L) ;
break ;
};
break ;
case WM_DESTROY :
PostQuitMessage(0) ;
break;
default :
return (DefWindowProc(hwnd,message,wparam,lparam));
break;
};
return false ;
};void opentextfile(HWND hwnd,HWND hwndedit)
{
OPENFILENAME openfilename ;
char szdirname[MAX_PATH] = "" ;
char szfile[MAX_PATH] = "\0" ;
char szfiletitle[MAX_PATH] = "\0" ;
////openfilename 结构说明
char szfilter[]= "文本文件(*.txt)\0*.txt\0C源码文件\0*.c\0所有文件\0*.*\0" ;
openfilename.lStructSize = sizeof(OPENFILENAME) ;
openfilename.hwndOwner = hwnd ;
openfilename.hInstance = hinst ;
openfilename.lpstrFilter = szfilter ; ///
openfilename.lpstrCustomFilter = (LPTSTR)NULL ;
openfilename.nMaxCustFilter = 0L ; ///
openfilename.nFilterIndex = 1L ; ///
openfilename.lpstrFile =szfile ; //----
openfilename.nMaxFile = sizeof(szfilter) ;
openfilename.lpstrFileTitle = szfiletitle ;
openfilename.nMaxFileTitle = sizeof(szfiletitle) ;
openfilename.lpstrInitialDir = NULL ;
openfilename.lpstrTitle = "请迁择一个文本文件" ;
openfilename.nFileOffset = 0 ;
openfilename.nFileExtension = 0 ;
openfilename.lpstrDefExt = "*.txt" ;
openfilename.lCustData = 0 ;
openfilename.Flags = OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY ;
if (GetOpenFileName(&openfilename) )
{
HANDLE hfile ;
DWORD dwfilesize,dwbyteread ;
char *lpbufptr ;
///打开指定的文件
hfile = CreateFile(szfile,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL) ;
if(hfile)
{
dwfilesize = GetFileSize(hfile,NULL) ;
if (dwfilesize!=0xFFFFFFFF) //返回表成功
{
lpbufptr = (char*)malloc(dwfilesize) ;
if (lpbufptr!= NULL)
{
///把文件内容读到缓存区
ReadFile(hfile,(LPVOID)lpbufptr,dwfilesize,&dwbyteread,NULL) ;
//MessageBox(hwnd,"GC","RUN",MB_OK);
if (dwbyteread!=0)
{
//写到EDIT;
SendMessage(hwndedit,WM_SETTEXT,0,(LPARAM)lpbufptr);
SetWindowText(hwnd,openfilename.lpstrFile) ;
//MessageBox(hwnd,(LPCTSTR)lpbufptr,"提示",MB_OK) ;
SetWindowText(hwndedit,(LPCTSTR)lpbufptr) ;
}
else
MessageBox(hwnd,"读入字节是零","error",MB_OK);
}
else
MessageBox(hwnd,"缓存分配失败!","error",MB_OK);
}
else
MessageBox(hwnd,"读取文件长度失败!","error",MB_OK);
}
else
MessageBox(hwnd,"打开文件失败!","error",MB_OK);
}
else
MessageBox(hwnd,"无效的文件名与路径!","error",MB_OK);
};
其类似用记事本功能,但不知为何,在读取*.txt 文件的内容到EDIT 上时,
读出的内容与*.TXT 的内容不符.
程序很小,请各位看以下源码并指点:#include <windows.h>
#include "resource.h"
#include <COMMDLG.h>
#define ID_EDITCHILD 12 #ifndef IDM_EXIT
#define IDM_EXIT 13
#endif
bool initapplication(HINSTANCE) ;
bool initinstance(HINSTANCE,int) ;
void opentextfile(HWND,HWND) ;
LRESULT APIENTRY winproc(HWND,UINT,WPARAM,LPARAM) ;HINSTANCE hinst ;
int APIENTRY WinMain(HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int nshowcmd)
{
MSG msg ;
if (!initapplication(hinstance))
return false ;
if (!initinstance(hinstance,nshowcmd))
return false ;
hinst = hinstance ;
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg) ;
DispatchMessage(&msg) ;
};
return msg.wParam ;
};
bool initapplication(HINSTANCE hinstance)
{
WNDCLASS wndclass ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH) ;
wndclass.hCursor = LoadCursor(hinstance,IDC_ARROW) ;
wndclass.hIcon = LoadIcon(hinstance,IDI_APPLICATION) ;
wndclass.hInstance = hinstance ;
wndclass.lpfnWndProc = (WNDPROC)winproc ;
wndclass.lpszClassName = "FILEDLGCLASS" ;
wndclass.lpszMenuName = NULL ;
wndclass.style = 0 ;
return (RegisterClass(&wndclass)) ;
};bool initinstance(HINSTANCE hinstance,int nshowcmd)
{
HWND hwnd ;
hwnd = CreateWindow("FILEDLGCLASS",
"这是文本程式示例",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
LoadMenu(hinstance,MAKEINTRESOURCE(MENUD)),
hinstance,
NULL) ;
if (!hwnd)
return false ;
ShowWindow(hwnd,nshowcmd) ;
return true ;
};LRESULT APIENTRY winproc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam)
{
static HWND hwndedit ;
switch(message)
{
case WM_CREATE :
//WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_HSCROLL|ES_LEFT|ES_MULTILINE
//|ES_AUTOVSCROLL|ES_AUTOHSCROLL,
hwndedit = CreateWindow("EDIT",
NULL,
WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_HSCROLL|ES_LEFT|ES_MULTILINE
|ES_AUTOVSCROLL|ES_AUTOHSCROLL,
0,0,0,0,
hwnd,
(HMENU)ID_EDITCHILD,
hinst,
NULL) ;
ShowWindow(hwndedit,1) ;
SetFocus(hwndedit) ;
if (!hwndedit)
MessageBox(hwnd,"FAILE","ERROR",MB_OK) ;
break ;
case WM_SIZE :
MoveWindow(hwndedit,0,0,LOWORD(lparam),HIWORD(lparam),true) ;
break ;
case WM_COMMAND :
switch(LOWORD(wparam))
{
case IDM_OPEN :
opentextfile(hwnd, hwndedit) ;
break ;
case IDM_EXIT :
SendMessage(hwnd,WM_DESTROY,0,0L) ;
break ;
};
break ;
case WM_DESTROY :
PostQuitMessage(0) ;
break;
default :
return (DefWindowProc(hwnd,message,wparam,lparam));
break;
};
return false ;
};void opentextfile(HWND hwnd,HWND hwndedit)
{
OPENFILENAME openfilename ;
char szdirname[MAX_PATH] = "" ;
char szfile[MAX_PATH] = "\0" ;
char szfiletitle[MAX_PATH] = "\0" ;
////openfilename 结构说明
char szfilter[]= "文本文件(*.txt)\0*.txt\0C源码文件\0*.c\0所有文件\0*.*\0" ;
openfilename.lStructSize = sizeof(OPENFILENAME) ;
openfilename.hwndOwner = hwnd ;
openfilename.hInstance = hinst ;
openfilename.lpstrFilter = szfilter ; ///
openfilename.lpstrCustomFilter = (LPTSTR)NULL ;
openfilename.nMaxCustFilter = 0L ; ///
openfilename.nFilterIndex = 1L ; ///
openfilename.lpstrFile =szfile ; //----
openfilename.nMaxFile = sizeof(szfilter) ;
openfilename.lpstrFileTitle = szfiletitle ;
openfilename.nMaxFileTitle = sizeof(szfiletitle) ;
openfilename.lpstrInitialDir = NULL ;
openfilename.lpstrTitle = "请迁择一个文本文件" ;
openfilename.nFileOffset = 0 ;
openfilename.nFileExtension = 0 ;
openfilename.lpstrDefExt = "*.txt" ;
openfilename.lCustData = 0 ;
openfilename.Flags = OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY ;
if (GetOpenFileName(&openfilename) )
{
HANDLE hfile ;
DWORD dwfilesize,dwbyteread ;
char *lpbufptr ;
///打开指定的文件
hfile = CreateFile(szfile,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL) ;
if(hfile)
{
dwfilesize = GetFileSize(hfile,NULL) ;
if (dwfilesize!=0xFFFFFFFF) //返回表成功
{
lpbufptr = (char*)malloc(dwfilesize) ;
if (lpbufptr!= NULL)
{
///把文件内容读到缓存区
ReadFile(hfile,(LPVOID)lpbufptr,dwfilesize,&dwbyteread,NULL) ;
//MessageBox(hwnd,"GC","RUN",MB_OK);
if (dwbyteread!=0)
{
//写到EDIT;
SendMessage(hwndedit,WM_SETTEXT,0,(LPARAM)lpbufptr);
SetWindowText(hwnd,openfilename.lpstrFile) ;
//MessageBox(hwnd,(LPCTSTR)lpbufptr,"提示",MB_OK) ;
SetWindowText(hwndedit,(LPCTSTR)lpbufptr) ;
}
else
MessageBox(hwnd,"读入字节是零","error",MB_OK);
}
else
MessageBox(hwnd,"缓存分配失败!","error",MB_OK);
}
else
MessageBox(hwnd,"读取文件长度失败!","error",MB_OK);
}
else
MessageBox(hwnd,"打开文件失败!","error",MB_OK);
}
else
MessageBox(hwnd,"无效的文件名与路径!","error",MB_OK);
};
解决方案 »
- 从一个火坑跳到另一个火坑.
- vc中format函数的问题,望各位大侠帮助,谢谢!!!
- 请教高手如何将普通JPG图片变成VC++对话框中能够直接Import使用的32*32的ICON图标,谢谢!
- vc.net程序如何调用htm模板?
- 我想请教下,我一直在用vc6.0,但我看到很多朋友在用vc7.0,vc7和.net是一回事吗?
- zhujianping_es(DavidRipple),sharkhuang(共享智慧),sillyou(),oyljerry(☆勇敢的心☆-Paper Reviewing), 进来领分
- 请问 在VC中用什么函数进行中断调用
- CSDN上的问题?CAsyncSocket,关于WSAEWOULDBLOCK
- 关于动态库的移值问题?
- c++中,求阶乘的算法
- WINXP/2K下如何读取,硬盘,内存大小,如何得到CPU 工作频率。
- 关于数组的问题(循环)
c語言的fopen ,fputc 建一個文本文件, 再用
ReadFile 可讀出,,,
2、lpbufptr = (char*)malloc(dwfilesize) ; 后再加上memset(lpbufptr, 0, dwfilesize);
或直接用lpbufptr=(char *)LocalAlloc(LPTR, dwfilesize);
3、在ReadFile之前,加上dwbyteread=0;