#include <windows.h>
#include "sample.h"
static char g_szClassName[] = "MyWindowClass";
static HINSTANCE g_hInst = NULL;
#define IDC_MAIN_TEXT 1001
BOOL LoadFile(HWND hEdit, LPSTR pszFileName)
{
HANDLE hFile;
BOOL bSuccess = FALSE;
hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, 0, 0);
if(hFile != INVALID_HANDLE_VALUE)
{
DWORD dwFileSize;
dwFileSize = GetFileSize(hFile, NULL);
if(dwFileSize != 0xFFFFFFFF)
{
LPSTR pszFileText;
pszFileText = (LPSTR)GlobalAlloc(GPTR, dwFileSize + 1);
if(pszFileText != NULL)
{
DWORD dwRead;
if(ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL))
{
pszFileText[dwFileSize] = 0;
if(SetWindowText(hEdit, pszFileText))
bSuccess = TRUE;
}
GlobalFree(pszFileText);
}
}
CloseHandle(hFile);
}
return bSuccess;
}
BOOL SaveFile(HWND hEdit, LPSTR pszFileName)
{
HANDLE hFile;
BOOL bSuccess = FALSE;
hFile = CreateFile(pszFileName, GENERIC_WRITE, 0, 0,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if(hFile != INVALID_HANDLE_VALUE)
{
DWORD dwTextLength;
dwTextLength = GetWindowTextLength(hEdit);
if(dwTextLength > 0)
{
LPSTR pszText;
pszText = (LPSTR)GlobalAlloc(GPTR, dwTextLength + 1);
if(pszText != NULL)
{
if(GetWindowText(hEdit, pszText, dwTextLength + 1))
{
DWORD dwWritten;
if(WriteFile(hFile, pszText, dwTextLength, &dwWritten, NULL))
bSuccess = TRUE;
}
GlobalFree(pszText);
}
}
CloseHandle(hFile);
}
return bSuccess;
}
BOOL DoFileOpenSave(HWND hwnd, BOOL bSave)
{
OPENFILENAME ofn;
char szFileName[MAX_PATH];
ZeroMemory(&ofn, sizeof(ofn));
szFileName[0] = 0;
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = "文本文件 (*.txt)\0*.txt\0所有文件 (*.*)\0*.*\0\0";
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);
return FALSE;
}
}
}
else
{
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
if(GetOpenFileName(&ofn))
{
if(!LoadFile(GetDlgItem(hwnd, IDC_MAIN_TEXT), szFileName))
{
MessageBox(hwnd, "打开文件失败.", "错误信息",
MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}
}
}
return TRUE;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
switch(Message)
{
case WM_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;
case WM_SIZE:
if(wParam != SIZE_MINIMIZED)
MoveWindow(GetDlgItem(hwnd, IDC_MAIN_TEXT), 0, 0, LOWORD(lParam),
HIWORD(lParam), TRUE);
break;
case WM_SETFOCUS:
SetFocus(GetDlgItem(hwnd, IDC_MAIN_TEXT));
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case CM_FILE_OPEN:
DoFileOpenSave(hwnd, FALSE);
break;
case CM_FILE_SAVEAS:
DoFileOpenSave(hwnd, TRUE);
break;
case CM_FILE_EXIT:
PostMessage(hwnd, WM_CLOSE, 0, 0);
break;
case CM_ABOUT:
MessageBox (NULL, "一个Windows C 记事本程序" , "关于...", 0);
}
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, Message, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX WndClass;
HWND hwnd;
MSG Msg;
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);
return 0;
}
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);
return 0;
}
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&Msg, NULL, 0, 0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
标题中的“用C语言编写的Windows简易记事本源代码”指的是一个使用C语言实现的简单文本编辑器,它在Windows操作系统环境下运行。这个程序允许用户创建、编辑和保存文本文件,类似于系统自带的“记事本”应用程序。C语言是一种广泛使用的编程语言,它以其高效、灵活性和强大的系统级功能而闻名,是开发操作系统和系统级工具的常见选择。 描述中提到,这个源代码是为Windows界面设计的,这意味着它使用了Microsoft的Windows API(应用程序接口)来创建图形用户界面(GUI)。Windows API提供了一系列函数,使得程序员可以创建窗口、处理用户输入、绘制文本等。另外,源码已经通过了LCC-Win32集成编译环境的编译。LCC-Win32是一款轻量级的C编译器,它能够在Windows平台上将C语言源代码转换为可执行文件。 在标签中,“C语言”再次强调了程序的实现语言,“源码”表示我们可以查看并理解程序的工作原理,这对于学习和调试来说非常有用。“记事本”表明这是一个简单的文本编辑器应用,“LCC-Win32”则是用于编译此程序的工具。 在压缩包中只有一个文件名为“note”,这可能是记事本程序的主程序文件,即编译后的.exe可执行文件。在C语言项目中,通常会有一个或多个源代码文件(如note.c或note.cpp),以及可能的头文件(如note.h),但在给出的信息中没有提及这些。 学习这个源代码可以涉及以下知识点: 1. **C语言基础**:包括变量、数据类型、控制结构(如if-else,for,while)、函数定义与调用等。 2. **Windows API**:理解如何使用API函数创建窗口、响应用户事件、处理消息循环、绘图等。 3. **文件操作**:学习如何在C语言中打开、读取、写入和关闭文件,这是记事本程序保存和加载文本的关键部分。 4. **内存管理**:了解动态内存分配(如malloc和free)在程序中的应用,特别是在处理大文本时。 5. **字符串处理**:掌握字符串函数,如strcpy、strcat、strlen等,用于文本编辑和保存。 6. **GUI编程**:学习如何创建和控制控件,如菜单、按钮和文本框,以及处理用户的鼠标和键盘输入。 7. **编译与链接**:理解LCC-Win32或其他类似编译器的工作流程,包括预处理、编译、汇编和链接。 8. **错误处理**:在编写程序时,应考虑错误条件和异常情况,并编写适当的错误处理代码。 9. **程序结构**:观察如何组织源代码以提高代码的可读性和可维护性,例如模块化和结构化编程。 10. **调试技巧**:学会使用调试工具(如GDB或LCC-Win32的内置调试器)来查找和修复代码中的问题。 这个源代码实例对于初学者来说是一个很好的实践项目,可以帮助他们深入理解C语言和Windows GUI编程。同时,对于有经验的开发者,它也是一个研究简单文本编辑器工作原理的好资源。


















- 1

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整
- 双笙子佯谬2015-09-27很好!谢谢你! 很有帮助~

- 粉丝: 1
- 资源: 6
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- xalan-j2-xsltc-2.7.1-23.el7.x64-86.rpm.tar.gz
- xorg-x11-drv-intel-devel-2.99.917-28.20180530.el7.x64-86.rpm.tar.gz
- xorg-x11-util-macros-1.19.0-3.el7.x64-86.rpm.tar.gz
- yajl-devel-2.0.4-4.el7.x64-86.rpm.tar.gz
- cairo-tools-1.15.12-4.el7.x64-86.rpm.tar.gz
- gpgme-1.3.2-5.el7.x64-86.rpm.tar.gz
- iperf3-devel-3.1.7-3.el7-9.x64-86.rpm.tar.gz
- ixpdimm-cli-01.00.00.2111-1.el7.x64-86.rpm.tar.gz
- 开单大师学习版4.7.9及phpstudy2018打包下载
- libspiro-devel-20071029-12.el7.x64-86.rpm.tar.gz
- openjpeg-devel-1.5.1-18.el7.x64-86.rpm.tar.gz
- p11-kit-devel-0.23.5-3.el7.x64-86.rpm.tar.gz
- perl-Net-HTTP-6.06-2.el7.x64-86.rpm.tar.gz
- python3-idle-3.6.8-21.el7-9.x64-86.rpm.tar.gz
- rubygem-bigdecimal-1.2.0-39.el7-9.x64-86.rpm.tar.gz
- DrissionPage-python


