用Windows+C+编写一个记事本程序.doc_第1页
用Windows+C+编写一个记事本程序.doc_第2页
用Windows+C+编写一个记事本程序.doc_第3页
用Windows+C+编写一个记事本程序.doc_第4页
用Windows+C+编写一个记事本程序.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

用WindowsC编写一个记事本程序程序运行界面一从C/C+到Windows编程我们学习的C/C+程序都是DOS程序(或称为Windows控制台程序),也就是现在大学里的开设的C/C+程序设计的内容,这些程序由于不涉及到Windows编程的细节,因此比较容易入门学习,这对训练初学者的编程思想是很有用的,也是有益的。但是当我们基本掌握了C/C+程序设计后,就不能仅仅停留在DOS下(或Windows控制台下)编写、运行程序。我们应该从编程思想的训练到Windows实用编程的转变。对于初学Windows编程的人来说,入门是难了一点,我们先介绍一个最简单的Hello程序开始,然后再介绍记事本程序。#includeintWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow)MessageBox(NULL,Hello欢迎使用TurboCforWindows集成实验与学习环境!,我的第一个Windows程序,MB_OK);return0;程序的运行结果是:程序解析:1、windows.h是每一个Windows程序都需要的头文件。2、WinMain函数是所有WindowsC程序的入口,类似于DOSC中的main函数。3、MessageBox是一个Win32API函数(API,ApplicationProgrammingInterface应用程序接口),其作用是弹出一个对话框,显示消息的内容。该函数的第一个参数是用来指定父窗口句柄,即对话框所在的窗口句柄。第二个参数是用来显示消息的内容(你可以修改成你想显示的内容)。第三个参数是对话框标的标题,如本例的“我的第一个Windows程序”,第四个参数是指定对话框中显示的按钮,试一试,将MB_OK修改成MB_OKCANCEL,运行一下程序会出现什么结果,再试一试修改成MB_RETRYCANCEL二、Windows程序简介(1)WindowsC程序的组成:1.C程序源文件,扩展名为.c或.cpp2.头文件,扩展名为.h3.资源文件,扩展名为.rc(2)源程序的组成结构WindowsC程序有相对固定的基本结构,一般有入口函数WinMain和窗口函数。1、WinMain函数是所有WindowsC程序的入口,类似于DOSC的main函数,其功能是完成一系列的定义和初始化工作,并产生消息循环。消息循环是整个程序运行的核心。WinMain函数有三个基本的组成部分:函数说明、初始化和消息循环a、WinMain函数的说明:intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow)参数说明:hInstance应用程序当前实例句柄hPrevInstance前一个实例句柄,在32位系统中该参数永远是NULLszCmdLine程序运行时的命令行参数iCmdShow程序运行时的显示方式,如最大化、最小化、隐藏显示等。b、初始化初始化包括窗口类的定义、注册、创建窗口实例和显示窗口四部分。这是固定格式,所有的Windows程序基本一样,记住即可,具体参见下面的程序实例的注释。2、窗口函数窗口函数定义了WindowsC程序对接受到的不同消息的响应,其中包含了应用程序对各种可能接收到的消息的处理过程,是消息处理分支控制语句的集合。通常窗口函数是有一个或多个switch语句组成。每一条case语句对应一种消息,当应用程序接收到一个消息时,就会执行相应case语句下的程序模块来完成相应的功能。窗口函数说明:LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)参数说明:hwnd窗口句柄message代表所处理消息的消息值wParam消息的附加参数,是message的进一步信息lParam消息的附加参数,是message的进一步信息一般用法:LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam).switch(message)case常数1:.case常数2:.caseWM_DESTROY:PostQuitMessage(0);/在消息队列中插入一条“退出”消息return0;returnDefWindowProc(hwnd,message,wParam,lParam);/执行默认的消息处理窗口函数的主体是消息处理语句,该语句是有一系列case语句组成。我们学习者自需要根据窗口可能收到的消息在case语句中编写相应的处理程序即可。1.记事本主程序#include#includesample.hstaticcharg_szClassName=MyWindowClass;staticHINSTANCEg_hInst=NULL;#defineIDC_MAIN_TEXT1001BOOLLoadFile(HWNDhEdit,LPSTRpszFileName)HANDLEhFile;BOOLbSuccess=FALSE;hFile=CreateFile(pszFileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,0);if(hFile!=INVALID_HANDLE_VALUE)DWORDdwFileSize;dwFileSize=GetFileSize(hFile,NULL);if(dwFileSize!=0xFFFFFFFF)LPSTRpszFileText;pszFileText=(LPSTR)GlobalAlloc(GPTR,dwFileSize+1);if(pszFileText!=NULL)DWORDdwRead;if(ReadFile(hFile,pszFileText,dwFileSize,&dwRead,NULL)pszFileTextdwFileSize=0;if(SetWindowText(hEdit,pszFileText)bSuccess=TRUE;GlobalFree(pszFileText);CloseHandle(hFile);returnbSuccess;BOOLSaveFile(HWNDhEdit,LPSTRpszFileName)HANDLEhFile;BOOLbSuccess=FALSE;hFile=CreateFile(pszFileName,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);if(hFile!=INVALID_HANDLE_VALUE)DWORDdwTextLength;dwTextLength=GetWindowTextLength(hEdit);if(dwTextLength0)LPSTRpszText;pszText=(LPSTR)GlobalAlloc(GPTR,dwTextLength+1);if(pszText!=NULL)if(GetWindowText(hEdit,pszText,dwTextLength+1)DWORDdwWritten;if(WriteFile(hFile,pszText,dwTextLength,&dwWritten,NULL)bSuccess=TRUE;GlobalFree(pszText);CloseHandle(hFile);returnbSuccess;BOOLDoFileOpenSave(HWNDhwnd,BOOLbSave)OPENFILENAMEofn;charszFileNameMAX_PATH;ZeroMemory(&ofn,sizeof(ofn);szFileName0=0;ofn.lStructSize=sizeof(ofn);ofn.hwndOwner=hwnd;ofn.lpstrFilter=文本文件(*.txt)0*.txt0所有文件(*.*)0*.*00;ofn.lpstrFile=szFileName;ofn.nMaxFile=MAX_PATH;ofn.lpstrDefExt=txt;if(bSave)ofn.Flags=OFN_EXPLORER|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT;if(GetSaveFileName(&ofn)if(!SaveFile(GetDlgItem(hwnd,IDC_MAIN_TEXT),szFileName)MessageBox(hwnd,保存文件失败.,错误信息,MB_OK|MB_ICONEXCLAMATION);returnFALSE;elseofn.Flags=OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY;if(GetOpenFileName(&ofn)if(!LoadFile(GetDlgItem(hwnd,IDC_MAIN_TEXT),szFileName)MessageBox(hwnd,打开文件失败.,错误信息,MB_OK|MB_ICONEXCLAMATION);returnFALSE;returnTRUE;LRESULTCALLBACKWndProc(HWNDhwnd,UINTMessage,WPARAMwParam,LPARAMlParam)switch(Message)caseWM_CREATE:CreateWindow(EDIT,WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|ES_MULTILINE|ES_WANTRETURN,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,hwnd,(HMENU)IDC_MAIN_TEXT,g_hInst,NULL);SendDlgItemMessage(hwnd,IDC_MAIN_TEXT,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0);break;caseWM_SIZE:if(wParam!=SIZE_MINIMIZED)MoveWindow(GetDlgItem(hwnd,IDC_MAIN_TEXT),0,0,LOWORD(lParam),HIWORD(lParam),TRUE);break;caseWM_SETFOCUS:SetFocus(GetDlgItem(hwnd,IDC_MAIN_TEXT);break;caseWM_COMMAND:switch(LOWORD(wParam)caseCM_FILE_OPEN:DoFileOpenSave(hwnd,FALSE);break;caseCM_FILE_SAVEAS:DoFileOpenSave(hwnd,TRUE);break;caseCM_FILE_EXIT:PostMessage(hwnd,WM_CLOSE,0,0);break;caseCM_ABOUT:MessageBox(NULL,一个WindowsC记事本程序,关于.,0);break;caseWM_CLOSE:DestroyWindow(hwnd);break;caseWM_DESTROY:PostQuitMessage(0);break;default:returnDefWindowProc(hwnd,Message,wParam,lParam);return0;intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow)WNDCLASSEXWndClass;HWNDhwnd;MSGMsg;g_hInst=hInstance;WndClass.cbSize=sizeof(WNDCLASSEX);WndClass.style=0;WndClass.lpfnWndProc=WndProc;WndClass.cbClsExtra=0;WndClass.cbWndExtra=0;WndClass.hInstance=g_hInst;WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);WndClass.lpszMenuName=MAINMENU;WndClass.lpszClassName=g_szClassName;WndClass.hIconSm=LoadIcon(NULL,IDI_APPLICATION);if(!RegisterClassEx(&WndClass)MessageBox(0,注册窗口失败,错误信息,MB_ICONEXCLAMATION|MB_OK|MB_SYSTEMMODAL);return0;hwnd=CreateWindowEx(WS_EX_CLIENTEDGE,g_szClassName,一个记事本程序,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,800,600,NULL,NULL,g_hInst,NULL);if(hwnd=NULL)MessageBox(0,创建窗口失败,错误信息,MB_ICONEXCLAMATION|MB_OK|MB_SYSTEMMODAL);return0;ShowWindow(hwnd,nCmdShow);UpdateWindow(hwnd);while(GetMessage(&Msg,NULL,0,0)TranslateMessage(&Msg);DispatchMessage(&Msg);returnMsg.wParam;2.记事本头文件samp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论