#include "myFileManagement.h"
extern HINSTANCE hCommLib=0;
extern HINSTANCE hInst;
//MYPROC lpfnChooseColor=0;
const MessageProc fileChildMessages[]={
WM_CREATE,goCreateFileChildWnd,
WM_PAINT,goPaintFileChildWnd,
MYWM_MENUCLICK,goMenuclickChildWnd,
WM_COMMAND,goMenuclickChildWnd
};
const CommandProc fileChildCommands[]={
IDM_OPENTEXTFILE,goOpenTextFileChildCmd,
IDC_OPENFILEATCHILDWND,goOpenTextFileChildCmd,
IDM_SAVETEXTFILE,goSaveTextFileChildCmd,
IDC_SAVEFILEATCHILDWND,goSaveTextFileChildCmd,
IDM_ABOUT,goAboutFileChildCmd,
IDM_COPYFILE,goCopyFileChildCmd,
IDM_MOVEFILE,goMoveFileChildCmd,
IDC_CLEARDISPLAY,goClearDisplayChildCmd
};
CONTROLSTRUCT controlWnd[]=
{
{TEXT(""),IDC_FILECONTENTEDIT, TEXT("EDIT"),ES_LEFT|ES_MULTILINE|WS_BORDER|ES_AUTOVSCROLL|WS_VSCROLL,10,10,220,190},
{TEXT("open file"), IDC_OPENFILEATCHILDWND, TEXT("BUTTON"),BS_PUSHBUTTON, 10, 210, 64, 20},
{TEXT("save file"), IDC_SAVEFILEATCHILDWND, TEXT("BUTTON"),BS_PUSHBUTTON, 88, 210, 64, 20},
{TEXT("clear"), IDC_CLEARDISPLAY, TEXT("BUTTON"),BS_PUSHBUTTON, 166, 210, 64, 20},
};
int registerFileChildWnd(HINSTANCE hInstance)
{
//定义窗口类结构体变量
WNDCLASS wc;
//填充结构体变量中各成员
wc.hInstance = hInstance;
wc.lpszClassName = strFileChildClassName;
wc.lpfnWndProc = fileChildWndProc;
wc.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.style = CS_DBLCLKS;
wc.hIcon = NULL;
wc.hCursor = NULL;
wc.lpszMenuName = NULL;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
//注册窗口类
if(!RegisterClass(&wc)) return 0;
// hCommLib=LoadLibrary(TEXT("commdlg.dll"));
// if(hCommLib)
// lpfnChooseColor=(MYPROC)GetProcAddress(hCommLib,TEXT("ChooseColor"));
return 1;
}
LRESULT CALLBACK fileChildWndProc(HWND hWnd, UINT msgCode, WPARAM wParam, LPARAM lParam)
{
int i;
//查找对应消息ID,并执行映射消息处理过程
for (i=0; i<dim(fileChildMessages); i++)
{
if(msgCode == fileChildMessages[i].uCode)
return (*fileChildMessages[i].functionName)(hWnd, msgCode, wParam, lParam);
}
//对于不在消息映射表中的消息,调用Windows CE的缺省窗口过程
return DefWindowProc(hWnd, msgCode, wParam, lParam);
}
LRESULT goPaintFileChildWnd(HWND hWnd, UINT msgCode, WPARAM wParam, LPARAM lParam)
{ //定义画板结构体变量
PAINTSTRUCT ps;
//定义矩形结构体变量
RECT rect;
//定义设备环境句柄(或称设备上下文,一般指触摸屏)
HDC hdc;
//获取客户区矩形大小
GetClientRect(hWnd, &rect);
//客户区矩形顶部位置增加命令栏高度
rect.top += CommandBar_Height(GetDlgItem(hWnd, IDC_CMDBAR));
//获取设备环境,必须与EndPaint配对使用
hdc = BeginPaint(hWnd, &ps);
//释放设备资源环境
EndPaint(hWnd, &ps);
return 0;
}
LRESULT goCreateFileChildWnd(HWND hWnd, UINT msgCode, WPARAM wParam, LPARAM lParam)
{
int i;
for(i=0; i<dim(controlWnd); i++)
{
CreateWindow(controlWnd[i].szClass, controlWnd[i].szTitle,
controlWnd[i].dwStyle | WS_VISIBLE | WS_CHILD,
controlWnd[i].x,
controlWnd[i].y,
controlWnd[i].xw,
controlWnd[i].yh,
hWnd,
(HMENU)controlWnd[i].nID,
hInst,
NULL);
}
return 0;
}
LRESULT goMenuclickChildWnd(HWND hWnd, UINT msgCode, WPARAM wParam, LPARAM lParam)
{
WORD menuID,notifyCode;
HWND wndCtrl;
int i;
menuID=(WORD)LOWORD(wParam);
notifyCode=(WORD)HIWORD(wParam);
wndCtrl = (HWND)lParam;
for(i=0;i<dim(fileChildCommands); i++)
{
if(menuID == fileChildCommands[i].uCode)
return (*fileChildCommands[i].functionName) (hWnd, wndCtrl, menuID, notifyCode); //没有functionNam
}
return 0;
}
LRESULT goOpenTextFileChildCmd(HWND hWnd, HWND wndCtrl, WORD menuID, WORD notifyCode)
{
OPENFILENAME of;
TCHAR strFileName[MAX_PATH]={0};
const LPTSTR strOpenFilter=
TEXT("Text Files(*.txt)\0*.txt\0 All Documents(*.*) \0 *.* \0\0");
BOOL res;
//定义文件句柄
HANDLE fileHandle=0;
//定义文件大小
LONG fileSize;
//定义文件内容指针
LONG filePointer;
//定义字节缓冲区指针
PBYTE pFileBuf;
//定义显示用缓冲区
LPTSTR lpTcharBuf=NULL;
//显示字符或汉字暂存区
TCHAR strDispBuf[64];
//读取文件字节数
DWORD dwBytes;
int i;
//存放两个字节GB2312码汉字
char cH[8];
//存放转换后的Unicode码汉字
WCHAR strUC[4];
//初始化文件名
strFileName[0]='\0';
//初始化打开文件名结构体
memset(&of,0,sizeof(of));
of.lStructSize=sizeof(of);
of.hwndOwner=hWnd;
of.lpstrFile=strFileName;
of.nMaxFile=dim(strFileName);
of.lpstrFilter=strOpenFilter;
of.Flags=0;
//打开文件对话框
res=GetOpenFileName(&of);
//如果打开文件对话框成功,则把文件内容显示在编辑文本框中
if(res)
{
//文件名存放在字符串变量strFileName中
lstrcpy(strFileName,of.lpstrFile);
//打开只读文件方式的文件
fileHandle=CreateFile(strFileName,GENERIC_READ,FILE_SHARE_READ,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(fileHandle==INVALID_HANDLE_VALUE)
{
fileHandle=0;
return 0;
}
//获取文件大小
fileSize=GetFileSize(fileHandle,NULL);
//将文件内容指针移到文件头
filePointer=SetFilePointer(fileHandle,0,NULL,FILE_BEGIN);
//分配空间存放文件内容
pFileBuf=(PBYTE)LocalAlloc(LMEM_FIXED,fileSize +32);
//+64表示预留出一部分空间
lpTcharBuf=(LPTSTR)LocalAlloc(LPTR,fileSize * sizeof(TCHAR)+64);
//读取文件内容
if(ReadFile(fileHandle,pFileBuf,fileSize,&dwBytes,NULL))
{
//循环读取文件内容
for(i=0;i<fileSize;i++)
{
//当字节数据显示为区码时,表示相邻两个字节为一个GB2312汉字
if((*pFileBuf>=0xA1)&&(*pFileBuf<=0xF7))
{
//获取汉字的GB2312码
cH[0]=*pFileBuf++;
cH[0]=*pFileBuf++;
i++;
//转换为Unicode码
MultiByteToWideChar(CP_ACP,0,cH,2,strUC,1);
//汉字送入显示暂存缓冲区
wsprintf(strDispBuf,TEXT("%C"),strUC[0]);
}
else
{
//显示为ASCII码字符
wsprintf(strDispBuf,TEXT("%C"),*pFileBuf++);
}
//将显示字符合并到显示总缓冲区
lstrcat(lpTcharBuf,strDispBuf);
}
//显示从文件中读到的所有信息
SetDlgItemText(hWnd,IDC_FILECONTENTEDIT,lpTcharBuf);
}
}
//关闭文件,释放堆
if(fileHandle)
{
CloseHandle(fileHandle);
fileHandle=0;
}
if(pFileBuf)
LocalFree(pFileBuf);
if(lpTcharBuf)
LocalFree(lpTcharBuf);
//刷新并显示父窗口,即主窗口
ShowWindow(GetParent(hWnd),SW_SHOW);
UpdateWindow(GetParent(hWnd));
//刷新并显示子窗口
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
return 0;
}
LRESULT goSaveTextFileChildCmd(HWND hWnd, HWND wndCtrl, WORD menuID, WORD notifyCode)
{
OPENFILENAME of;
TCHAR strFileName[MAX_PATH]={0};
const LPTSTR strOpenFilter = TEXT("Text Files(*.txt)\0 *.txt \0 ALL Documents(*.*) \0 *.* \0\0");
BOOL res;
HANDLE fileHandle = 0;
LONG fileSize;
PBYTE pFileBuf;
LPTSTR lpTcharBuf = NULL;
DWORD dwBytes;
TCHAR strSaveOK[512];
int i,j;
char cH[8];
WCHAR strUC[4];
strFileName[0]='\0';
memset(&of, 0, sizeof(of));
of.lStructSize = sizeof(of);
of.hwndOwner = hWnd;
of.lpstrFile = strFileName;
of.nMaxFile = dim(strFileName);
of.lpstrFilter = strOpenFilter;
of.Flags = 0;
res = GetSaveFileName(&of);
if(res)
{
lstrcpy(strFileName, of.lpstrFile);
fileHandle = CreateFile(strFileName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(fileHandle == INVALID_HANDLE_VALUE)
{
fileHandle = 0;
return 0;
}
fileSize = SendDlgItemMessage(hWnd, IDC_FILECONTENTEDIT, WM_GETTEXTLENGTH, 0, 0);
pFileBuf = (PBYTE)LocalAlloc(LMEM_FIXED, fileSize * sizeof(TCHAR)+64);
lpTcharBuf = (LPTSTR)LocalAlloc(LPTR, fileSize +32);
GetDlgItemText(hWnd, IDC_FILECONTENTEDIT, lpTcharBuf, fileSize +32);
j=0;
for(i=0; i<fileSize; i++,j++)
{
if(HIBYTE(lpTcharBuf[i]>=1))
{
strUC[0]=lpTcharBuf[i];
WideCharToMultiByte(CP_ACP, 0, strUC, 1, cH, 2, NULL, NULL);
pFileBuf[j]=cH[0];
j++;
pFileBuf[j]=cH[1];
}
else
{
pFileBuf[j]=LOBYTE(lpTcharBuf[i]);
}
}
WriteFile(fileHandle, pFileBuf, j, &dwBytes, NULL);
没有合适的资源?快使用搜索试试~ 我知道了~
一份简单的evc程序源码
共37个文件
cpp:6个
obj:6个
sbr:6个
需积分: 9 23 下载量 7 浏览量
2009-09-13
12:48:16
上传
评论
收藏 1.53MB RAR 举报
温馨提示
一份简单的evc程序源码,帮助那些刚刚接触嵌入式的同学学习windows程序开发
资源推荐
资源详情
资源评论
收起资源包目录
myFileManagement.rar (37个子文件)
myFileManagement
myCopyToDlg.cpp 5KB
fileChildWndProc.cpp 9KB
resource.h 425B
emulatorDbg
myAboutDlg.obj 9KB
myFileManagement.exe 28KB
fileChildWndProc.obj 22KB
vc60.pdb 76KB
myFileManagement.sbr 0B
myFileManagement.pch 3.56MB
myCopyToDlg.obj 16KB
fileChildWndProc.sbr 0B
myFileManagement.ilk 255KB
myFileManagement.obj 9KB
myMoveToDlg.obj 16KB
mainWndProc.sbr 0B
myFileManagement.bsc 2.59MB
mainWndProc.obj 16KB
myFileManagement.res 5KB
myFileManagement.pdb 241KB
myAboutDlg.sbr 0B
myMoveToDlg.sbr 0B
myCopyToDlg.sbr 0B
myFileManagement.vcl 2KB
myFileManagement.rc 3KB
mainWndProc.cpp 5KB
myFileManagement.vcw 562B
myFileManagement.vcp 14KB
myFileManagement.vco 52KB
myDigIcon.ico 766B
myAboutDlg.cpp 625B
myFileManagement.cpp 635B
myMoveToDlg.cpp 5KB
myFileManagement.vcb 89KB
open.ico 766B
myFileManagement.ico 766B
save.ico 766B
myFileManagement.h 5KB
共 37 条
- 1
资源评论
zhejiezhejie
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功