

下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/文件名/DWORD dwDes i redAccess,/文件彷问形式fAR,刁 读操作为GENERI C_READ,写操作为GJ/ERI C_WR ITEQ DWORD dwshareMode,/文件的共享楼式标识LPSECURITY_ATTRIBUTES IpsecurityAttributesr厂DWORD dwCreat ionDi spos i t i on,文件创建操作标识,DWORD dwF I agsAndAttributes,/文件属性棕识HANDLE hTemplateFi le/指向文件属性模板的句柄该文件不能共享,则其值为 o可读共享,其值为 FILE_SHARE_R
2、EAD 可写共享,其值为 FILE_SHARE_WRITE指向安全属性数据结构的指针,常为NULL常用的文件操作函数CreateFileCreateFile;创建或打开一个文件HANDLE CreateFi le (LPCTSTR IpszName,文件共享模式ReadFileReadFile 函数:从文件指针的位置开始读取一个现存文件中的数据BOOL ReadFileHANDLE hFi le,/打开的文件句柄;LPVO I D IpBuffer,/指向接收读入数据缓冲区地址的指针;DWORDnNumberOfBytesToRead, /将从文件中读入的数据字数;LPDWORD IpNumb
3、erOfBytesRead, /指向实际读取字节数的指针;HANDLEhFile,DWORDnNumberOfBytesToWr ite/将向文件中写入的数据字LPDWORDIpNumberOfBytes/指向实际写入字节的针:LPOVERLAPPEDIpOver lapped/指向一个OVERLAPPED数据结构的指针。BOOLWriteFLPOVERLAPPEDGetFilelnformartiomByHandle函数获取指定文件的信息,并将其保存在BY_HANDLE_FILE_INFORMATIOBY_HANDLE_FILE_INFORMATIO N N 数据 结构中BOOLGetF i
4、IeInformati onByHandleHANDLE hFile,LPBY_HANDEL_FILE_INFORMATI ON IpFileInformat ion)N为指向BY_HANDLE_FILE_INFORMATIO N结构的指针SearchPath函数根据给定搜索路径査找指定文件并返回指定文件的路径IpPath/指定搜索路径;若为NULL,则采用缺省路径;IpFi leName,/搜索的文件名;-IPExtension,/捜索文件的扩展名;DWORDnBufferLength,/用来接收文件路径名的缓冲区长度;/指向接收文件路径名的缓冲区;LPTSTR * I PF il epar
5、t/指向路径名中文件名部分地址的指针。 /如果调用该函数未指定搜索路径, /则采用缺省系统路径进行搜索lpFileName缺省的搜索次序:当前目录;(2) W i ndows操作目录;DWORD SearchPath(LPCTSTRLPCTSTRLPCTSTRLPTSTRW i ndows系统所在目录;(4) PATH环境变量包含的目录(HANDLE hFi le,/文件句柄LONG I p i stanceToMove,指针移动的字节数LPLONG I pD i stanceToMoveH i gh,/指向指针移动距离的高位指针DWORD dwMoveMethod/指针移动参考位置标识)话选
6、职一个文本文件?|xl?|xl搜寻I Example112112 1212 _3 3 4 4 4 4 5 5 5 5 _血01014-1-223-1-1-223-16 6 6 6 7 7 7 7 7 7LCILCI回回回c c c c c c c c C C4.56.Z14.56.Z1. .-_ _一一7 7 7 77 78 88 8cl打开I取消IDWORDSetFi【例9-1】 本例创建一个具有打开文件功能的对话框, 并可进行文件的编 辑与保存。 |口| x|用文件34.5 &8-8-A8-8-8-A8-文件类型(X) :LRESULT APIENTRY MainWndProc(.
7、)1.static HWND hWndEdit;2.switch(message)3.case WM_CREATE:4.hWndEdit=CreateWindow(EDIT, NULL, WS_CHILD|WS_VISIBLEWS_HSCROLL|ES_LEFT |ES.MULTILINE|ES_AUTOHSCROLL,0, 0, 0, 0, hWnd, IHMENU) ID.EDITCHILD,(HINSTANCE) GetWindowLong (hWnd, GWLINSTANCE), NULL);5.break;6.case WM_SIZE:7.MoveWindow(hWndEdit, 0
8、, 0, LOWORD(lParam), HIWORD(lParam), TRUE); break;8.case WM_COMMAND:9.switch (LOWORD(wParam)10.case IDM_FILEOPEN: OpenTextF订e(hWnd, hWndEdit); break;11.case IDM_FILESAVE: SaveTextFile(hWnd, hWndEdit); break;12.case IDM_EXIT: SendMessage (hWnd, WMJESTROY, OL, OL) ; break; caseIDM_ABOUT:DialogBox(hIns
9、t, AboutBox*, hWnd, (DLGPROC)About) ;break ;14.default:return(DefWindowProc(hWnd, message, wParam, 1Param);15.16.break;17.case WM_DESTROY: PostQuitMessage(O); break;18.default: return(DefWindowProc(hWnd, message, wParam, 1Param);return(0);_/*调用公共对话框函数,显示【打开】对话框,检取用户选择 的文本文件,然后打开该文本文件到编辑控件中void OpenT
10、extFile(HWND hWnd,HWND hWndEdit)OPENFILENAME OpenFileName;char szDirNameMAX_PATH二;char szFileMAX_PATH二0;char szFileTitle MAX_PATH二0;/ OPENFILENAME结构的过滤器规格说明。char szFilter = 文本文件(*txt) 0*. txt0C源程序文件(*. c)0*. c0所有文件0* *0;OpenFileName. lStructSize=sizeof (OPgfflFILENAME);OpenFileName IpstrDefExt二*txt;
11、OpenFileName. lCustData=0;OpenFileName Flags二OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST| OFNHIDEREADONLY;填写OpenFiIeName1.if (Ge t Op enF i 1 eName (ftOpenFi 1 eName)2.(HANDLE hF订 e;DWORD dwF订 eSize, dwBytesRead; char * lpBufPtr:3.hFile=CreateFile(. );/ 打开指定的文件4.if (hFile! =INVALID_HANDLE_VALUE)5.dwFileSize
12、=GetFileSize(hFile, NULL);/检取文件字节大小。6.if(dwFileSize!=OxFFFFFFFF)7.lpBufPtr=(char *)malloc(dwFileSize) ; /分配用来读入文件的缓冲区。&if (lpBufPtr!二 NULL)9.ReadFile(hFile, (LPVOID)lpBufPtr, dwFileSize, &dwBytesRead, NULL);1多行编辑控件中,7-件强谡入缓迪 J11.SendMessage(hWndEdit, WM_SETTEXT, 0, (LPARAM) lpBufPtr);12.SetW
13、indowText (hWnd, OpenF 订 eName. IpstrF 订 e);3.Q se14.MessageBox(hWnd,u读入字节数为零力,NULL,MB-OKIMB-ICONEXCLAMATION);15.free (lpBufPtr);16.17.else18.MessageBox(NULL,内存分配失败! ,NULL, MB_OK | MBICONEXCLAMATION);19.20.else21MessageBox (NULL,检取文件大小失败,NULL, MB_OK | MB_ICONEXCLAMATION);22.CloseHandle(hFile);23./*调
14、用公共对话框函数,显示【另存为】对话框,/*用户选择文本名,然后把编辑控件中的内容保存到该文件中.voidSaveTextFile(HWND hWnd, HWND hWndEdit ) OPENFILENAME OpenFileName;char szDirNameMAX_PATH二;char szFileMAX_PATH=0*;char szFileTitleMAX_PATH=O;char szFilter = *A11 Files。*.*0;OpenF订eName. lStructSize=sizeof(OPENFILENAME); OpenFileName.hWndOwner=hWnd;
15、OpenF订eName. lCustData二0;OpenFileName. Flags=OFN_OVERWRITEPROMPT;1.if (GetSaveFi1eName (ftOpenFi1eName)2.(HANDLE hFile; DWORD dwF订 eSize,dwBytesWrite; char 卢 luBufPtr:4.if (hFile!=INVALID_HANDLE_VALUE)| 右同空 p征 HUI 霜5. 检取编辑控件丙容的字节大小。I 伺冋名又杆则覆6.dwFileSize=SendMessage(hWndEdit, WMGETTEXTLENGTH, 0, 0);7
16、.if(dwFileSize!=O)8. lpBufPtr=(char *)malloc(dwFileSize); / 分配文件缓冲区。9 if(dwFileSize!二 0)10./把编辑控件中的内容装到文件缓冲区。11.SendMessage(hWndEdit, WM_GETTEXT, dwFileSize, (LPARAM)lpBufPtr);12.把文件缓冲区中的数据存写到文件中。13.WriteF 订 e(hFile,(LPVOID) lpBufPtr, dwF 订 eSize, &dwBytesWrite, NULL);14.SetWindowText(hWnd, Open
17、FileName. IpstrFile);15.free (lpBufPtr);16.17.else18.MessageBox(NULL,内存分配失败!, NULL, MB_OK | MB_ICONEXCLAMATION);1920.else21.MessageBox (NULL,编辑控件中内容为空, NULL, MB_OK|MB_ICONEXCLAMATION);22.CloseHandle(hFile);23.24.e1so25 MessageBox (hWnd,创建文件失败! ,NULL, MB_0K | MB.ICONEXCLAMATION);BOOL APIENTRY About (
18、 HWND hDlg,UINT message,WPARAM wParam,LPARAM lparam) switch (message)case WM_INITDIALOG: return (TRUE );case WM_COMMAND:if (LOWORD (wParam) =IDOK | | LOWORD (wParam) =IDCANCEL)EndDialog(hDlg, TRUE); return (TRUE);break;hF订 e=CreateFile(.):return(FALSE);在使用剪贴板之前,应用程序需将准备操作剪贴板的数据初进行复使用剪贴板首先应考虑的问题是其支持的
19、数据格式。剪贴板把数据拷贝到内存以后,应及时调用 GlobalUnLockGlobalUnLock 解锁内存句柄BOOL GlobalUnLock (HGLOBAL hMem) /hMem为内存句柄应用程序向剪贴板发送文本的操作过程可分为如下 5 5 个步骤调用 GlobalAllocGlobalAlloc 函数为文本分配全局存储空间HGLOBAL GlobalAIloc(UINT uFlags,函数分配内存形式标识。DWORD dwBytes)分配字节数然后调用 GlobalLockGlobalLock 函数锁定分配的内存块LPVOID GlobalLock (HGLOBAL hMem) /
20、hMem为内存块地址始化为系统预定义的数据格式。应用程序向剪贴板发送文本1拷贝2.打开剪贴板该步骤由应用程序调用OpenClipboard函数完成BOOL OpenClipboard(HWND hwnd)/hwnd为打开剪贴板的窗口句柄。3 清除剪贴板中的所有句柄该步骤由应用程序调用函数 EmptyClipboardEmptyClipboard 完成BOOL EmptyCIipboard (VO ID)4.向剪贴板传送文本全局内存句柄该步骤由应用程序调用函数 SetClipboardDataSetClipboardData 完成,HANDLE SetCIi pboardData(UINT uF
21、ormat,/数据格式标识HANDLE hMem)数据句柄应用程序一旦将文本内存句柄传递给剪贴板,则该句柄属于剪 贴板,应用程序不能再对其进行操作。5关闭剪贴板该步骤由应用程序调用函数CloseCiipboard完成BOOL CloseCIipboard (VOID)F 面的程序段是应用程序向剪贴板发送文本的一般过程:I.HANDLE hText; LPTSTR lpString, lpText;2.3.case IDM_COPY; 分配全局内存4.if ( ! (hText=GloalbAlloc (GWND, Sizeof (IpSring)5. MessageBox (hwnd 全局内存
22、分配失败! ” , “ 提示 MB_OK) ;break;6.lpText=GlobalLock(hText) ;/锁定文本内存句柄并返回文本指针7.lstrcpy (lpText, IpString); 拷贝文本8.GlobalUnlock (hText) :/解锁文本内存句柄9.If ( ! OpenClipboard (hwnd)10. MessageBox (hwnd,r剪贴板打开失败!,” 提示,MB_0K);break; II.EmptyClipboard( );/清除剪贴板12.SetClipboardData (CF.TEXT, hText);设置剪贴板文本13.CloseCi
23、ipboard ():关闭剪贴板14.hText二 NULL 以避免应用程序再通过该句柄执行其他操作15 break;20获取剪贴板文本应用程序从剪贴板上获取文本的操作过程可分为如下4个步骤1-打开剪贴板:调用函数OpenClipboard打开剪贴板2.检査剪贴板数据格式:由函数IsClipboardFormatAvailable完成BOOL IsC1ipboardFormatAvai1ab1e (UINT uformat)3.获取剪贴板文本:由函数GetClipboardData完成,HANDLEGetClipboardData (UINT uforaat)uformat为数据格式标识3.L
24、PTSTR IpString, lpText;4. 5 case IDM_FASTE;6.if(! IsClipboardFormstAvailable (CFTEXT) 检査剪贴板的数据格式7.MessageBox (hwnd, “剪贴板上无文本数据,提示,MB_OK): Break; & if (! OpenClipboard (hwnd) 打开剪贴板9.MessageBox (hwnd“剪贴板板开失败”,“提示” ,MBOK);Brdak;10.获取剪贴板文本内存句柄11.i f(!(hText=GetClipboardData(CF.TEXT)12.MessageBox (hw
25、nd, “无法读取剪贴板数据”,“提示”,MB_OK);13.CloseClipboard() : Break; 14.lpTexe=GlobalLock(hText); /锁定文本内存名柄并返回文本指针15./复制剪贴板文本内容16.lpString= (LPTSTR) malloc (GlobalSize (hText);17.lpstrcpy (IpString, lpText);18.GlobalUnlock (hText); 解锁文本内存句柄19.CloseClipboard ():关闭剪贴板获取剪贴板文本内1.2.下面的程序段是应用程序获取剪贴板文本的一般形式:HANDLEhTex
26、t;2021 break;IDID【例9-2】本例要求创建一个对话框,具有剪切、复制、粘贴、取消动作及退出等功能。:粘贴示例This is a test fileIt can show you how to operate the clipboard退出( (X)# include # include # include # include # include # include # include 9_2 hHINSTANCEhlnst;HWNDhWndMain;HWNDhWndRichEdit;CHARszRtfFileNameMAX_PATH;HCURSORhCursorWait;HCU
27、RSORhCursorNormal;HANDLEhRTFLib;-nix剪切1)复制)粘贴()删除)撤销)全部选定)LRESULT API ENTRY MainWndProc (,)static TCHAR szBuf128;static TCHAR szFontString1024;UINT ultem;switch (message)case WM_CREATE:/创建多格式文字编辑控件。hWndR i chEd i t=Creat eWi ndowEx(WS_EX_CLIENTEDGE,/使多格式文字编辑控件有一个客户型边界RICHEDIT,/多格式文字编辑控件的W口类名称NULL,/多
28、格式文字编辑控件中的初始文字WS_CHILD|WS_VISIBLE|ES_MULTILINE|ES_SAVESEL|WSJHSCROLLI WS_VSCROLL, /窗 口风格0, 0, 0,0,77位置和尺寸待定hWnd,/父窗口句柄(HMENU) ID_RICHEDIT,/控件标识号hlnst,/实例句柄NULL);lstrcpy (szRtfFileName,粘贴示例);SetWindowText(hWnd, szRtfF:ileName);break;case WM_SIZE:MoveWindow(hWndRichEdit, 0, 0, LOWORD(IParam), HIWORD(l
29、Param), TRUE); break;case WM_INITMENUPOPUP:if (BOOL) HI WORD (IParam) )/如果是系统菜单,则不作检査。break;检査是否可以进行撤销操作,并由此设置菜单项的状态。辻(SendMessage(hWndRichEdit, EM_CANUNDO, 0, 0)EnableMenuItem (GetMenu (hWndMain), IDM_EDITUNDO, MF_BYCOMMAND | MF_ENABLED);elseEnableMenuItem(GetMenu(hWndMain), IDM_EDITUNDO, MF_BYCOMM
30、AND|MF_GRAYED);/*检査是否可以进行粘贴操作,异由此设晝菜单项的决态。辻(SendMessage(hWndRichEdit, EM_CANPASTE, 0, 0)EnableMenuItem(GetMenu(hWndMain), IDM_EDITPASTE, MF_BYCOMMAND|MF_ENABLED);elseEnableMenuItem(GetMenu(hWndMain), IDM_EDITPASTE, MF_BYCOMMAND|MF_GRAYED);break;case WM_COMMAND:ultem = LOWORD(wParam);switch (ultem)ca
31、se IDM_EDITUNDO:SendMessage(hWndRichEdit, WM_UND0, 0, 0);break; case IDMEDITCUT:SendMessage(hWndRichEdit, WM_CUT, 0, 0) ; break; case IDM_EDITCOPY:SendMessage(hWndRichEdit, WM_COPY, 0, 0);break; case IDM_EDITPASTE:SendMessage(hWndRichEdit, WM_PASTE, 0, 0);break; case IDM_EDITDELETE:SendMessage(hWndR
32、ichEdit, WM_CLEAR, 0, 0);break; case IDM_EDITSELECTALL:SendMessage(hWndRichEdit, EM_SETSEL, 0, -1);break; case IDM_EXIT:SendMessage(hWnd, WM CLOSE, 0, OL);return 0; defauIt:return(DefWindowProc(hWnd, message, wParam, 1Param);break;if (hRTFLib);FreeLibrary(hRTFLib);hRTFLib二NULL;PostQuitMessage(0);bre
33、ak;defauIt: returnZDefkindowProc (hWnd, message, wParam, 1 Param);return (0):【例8 2】本例题将在用户区中创建两个编辑框子窗口,用户可以在第一个编 辑框中输入文本,并将其中的某些文本选中,然后选择“复制第一个编辑框 中的选中文本”菜单项,即可将选中文本复制到剪贴板中。选择“将文本粘 贴到第二个编辑框”菜单项可将剪贴板中的文本粘贴到第二个编辑框中。include include ftincluderesource. hdefine IDE_1 102/第一个编辑框的标识define IDE_2 103/第二个编辑框的标
34、识long WINAPI WndProc (HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM 1Param);HWND hEditl, hEdit2;定义输入编辑框,输出编辑框HINSTANCE hlnst;定义应用程序实例句柄.Ilong WINAPI WndProcCHWND hWnd, UINT iMessage, WPARAM wParam, LPARAMIParam)DWORD begin, end;HGLOBAL hSel;LPTSTR pSel, pEdit, pGlobal:long length;unsigned i:switch
35、(iMessage)caseWM.CREATE:窗口初始化消息.hEditl=CreateWindow(EDir,/创建ED IT对象.NULL,无标题.WS_CHILD | WS.VISIBLE | ES_LEFT | WS_BORDER,/样式.230, 20, 300, 30, hWnd,(HMENU) IDE_1,/编辑框标识.hlnst, NULL);hEdit2=CreateWindow(EDIT,创建ED IT编辑框.NULL,/无标题WS.CHILD | WS.VISIBLE | ES.LEFT | WS.BORDER,/样式.230, 70, 300, 30, hWnd,(H
36、MENU) IDE_2,/编辑框标识.hlnst, NULL);break:case WM COMMAND:swi tch (LOWORD(wParam) case IDE_1: if(HIWORD(wParam)=ENSETFOCUS) SetFocus(hEditl): break; case IDE_2:if(HIWORD(wParam)=EN_SETFOCUS) SetFocus(hEdit2); break; case IDM_COPY:SendMessage(hEditl, EM_GETSEL, (WPARAM) &b eg in, (LPARAM) &end);length=GetWindowTextLength(hEditl);pEdit=(LPTSTR)malloc(length+1)*sizeof(char); GetWindowText(hEditl, pEdit, length+1);pSel=(LPTS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 东城宾馆装修合同范本
- 机械结构设计与创新课件
- 老年综合征护理
- 电厂应急管理培训课程
- 手外伤护理常规
- 开展“树清廉家风-建和谐家庭”活动总结模版
- 意识丧失的临床护理
- 无痛病房护理
- 胰腺炎症护理
- 门诊护理礼仪规范要点
- 2024年执业药师继续教育专业答案
- 2025届高考英语:阅读理解及完型常考重点高频(带音标)500词素材
- 2024年秋季新外研版三年级上册英语课件 Appendices Mulan
- 《世界是普遍联系的》名师课件
- 2024年五年级英语下册 Module 8 Unit 2 I made a kite教案 外研版(三起)
- DL∕T 1909-2018 -48V电力通信直流电源系统技术规范
- 听歌识曲完整版本
- NB-T32042-2018光伏发电工程建设监理规范
- 延安通和电业招聘笔试真题2022
- 2024年纪检监察综合业务知识考试题库及参考答案(完整版)
- 畜牧养殖大型沼气项目可行性研究报告
评论
0/150
提交评论