用C语言编写一个简单的文本编辑器.

作者&投稿:宥览 (若有异议请与网页底部的电邮联系)
c语言编写简易的文本编辑器~

我这里有一个功能强大文本编译器程序的完整c代码,是外国人写的。不好意思,很长,发不上来。
不过这里有一个简易文本编译器。虽说是简易,也不是那么好弄的,给你:
http://zhidao.baidu.com/question/79338502.html

这不算文本编辑器吧。
说一下我的思路:
用一个二维数组保存参数,char cmd[N][M]= {"-o","-h"........};
然后根据用户输入的参数执行相应的操作,
char ch[3];
while(1)
{
scanf("%s", ch);
// 判断参数输入是否正确,如果不正确做相应的处理
switch (ch[1])
{
case 'o':
//打开文件,调用子程序
case 'h':
//获取帮助,调用子程序
...............
case 'q':
//退出程序
}
}

我的C语言是自学的,懂一小点。虽然我没有你说的那种源代码,但我有记事本的源代码,你想看看吗?
记事本(主程序)
#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, "欢迎使用jiyingjun的源代码" , "关于...", 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;
}

记事本(资源文件)

#include "sample.h"

A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "sample.ico"

MAINMENU MENU
{
POPUP "文件(&F)"
{
MENUITEM "打开(&O)...", CM_FILE_OPEN
MENUITEM "另存为(&S)...", CM_FILE_SAVEAS
MENUITEM SEPARATOR
MENUITEM "关闭", CM_FILE_EXIT
}

POPUP "帮助(&H)"
{
MENUITEM "关于(&A)", CM_ABOUT
}
}

记事本(头文件)
#define CM_FILE_SAVEAS 9072
#define CM_FILE_EXIT 9071
#define CM_FILE_OPEN 9070
#define CM_ABOUT 9069

不会..


c语言用switch编写一个简单的四则运算程序
include<stdio.h> int main(){double a,b,c;char op;scanf("%lf%c%lf",&a,&op,&b);switch(op){case '+': c=a+b; break;case '-': c=a-b; break;case '*': c=a*b; break;case '\/': if(b) c=a\/b;else {printf("除数不能为0!\\n"); return 0;} default:{...

如何使用C语言编写简单小游戏?
C语言是计算机专业都要学习的一门基础学科。一般来说,是比较枯燥的.那么,我们能不能通过编一些小游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件艰苦 ,枯燥的事,它变得象电脑游戏一样充满好奇,富有乐趣。例如2048这款游戏:方法\/步骤:include<stdio.h> include<stdlib.h> include include<con...

用C语言做一个计算器,能实现加减乘除混合运算?
是的,可以使用C语言编写一个计算器程序,能够实现加、减、乘、除等混合运算。下面是一个简单的示例程序:```c include <stdio.h> int main() { char operator;double num1, num2, result;printf("Enter an operator (+, -, *, \/): ");scanf("%c", &operator);printf("Enter two ...

用c语言编写一个简单计算器程序
#include<stdio.h>//计算器 voidmenu()//自定义的菜单界面 { printf("---\n");printf("请输入你的选择\n");printf("1.+\n");printf("2.-\n");printf("3.*\n");printf("4./\n");printf("---\n");} intmain(){ int...

C语言编写一个软件?
1、首先打开pelles C,创建一个新的项目文件。2、然后输入简单的框架。3、接着用switch函数完成加减乘除操作。4、检查输入之后就可以计算结果了。这里需要添加的代码如下,之后便可以运行了。5、这里我们输入一个例子。

C语言:编写程序,输入一个三角形的三条边,若能构成一个三角形,则输出相...
return A;}\/* 三角形三边长判定 *\/\/* 任意两边大于第三边,可构成三角形,返回1,否则返回0 *\/int edge (float a, float b, float c) {return (a+b>c && a+c>b && b+c>a);}int main (void) {float a, b, c; \/* 三角形三边长 *\/printf ("输入三角形三边长:");scanf (...

求编写一下三个简单的C语言程序 ,新手求解
第一个:include <stdio.h>int main(int argc, char *argv[]){ char a; scanf("%c", &a); printf("大写字母为%c\\n", a-32); return 0;}第二个:include <stdio.h>int main(int argc, char *argv[]){ char A; scanf("%c", &A); printf("八进制:%o...

用C语言怎样编写一句话
工具\/原料 VC++6.0 电脑 方法\/步骤 1、首先,打开编译器,新建文件。出现的空白处是写代码的。2、输入”#include<stdio.h>“这个为头文件。3、第二行,输入”main“,加上一对”小括号“。4、在main,下方,输入一对大括号 {}。5、在大括号里输入,”printf("Hello,Word\\n");”。6、...

C语言 要求编写一个简单计算器的程序
include<stdio.h>void main() { float x,y,z; char c; scanf("%f%c%f",&x,&c,&y); switch ( c ) { case '+': z=x+y; break; case '-': z=x-y; break; case '*': z=x*y; break; case '\/': z=( y==0 )?(0):(x\/y); break; default:...

编写一个简单的加法程序,随机生成两个100以内的整数位求出他们的和并...
include <stdio.h> \/\/printf() need include \/\/time() need include <stdlib.h> \/\/srand() need int main(){ int a, b ;srand(time(NULL)) ; \/\/设置随机种子 a=rand()%100; \/\/生成一个100以内的数 b=rand()%100;printf("%d+%d=%d", a,b,a+b );return 0;} ...

五华县17899398258: 设计一个简单的文本编辑器,用C语言实现 -
缑淑甲磺: #include <conio.h>#include <sing.h>#include "keyscode.h"#include "menu.h"suct line{int charnum;char *base;};typedef suct line SequListElemType;#include "sequlist.h"#define MAXLINES 1000int key;int cureditline=0;int curscrtopline=0;...

五华县17899398258: c语言编写简易的文本编辑器 -
缑淑甲磺: 我这里有一个功能强大文本编译器程序的完整c代码,是外国人写的.不好意思,很长,发不上来. 不过这里有一个简易文本编译器.虽说是简易,也不是那么好弄的,给你: http://wenwen.sogou.com/z/q793366431.htm

五华县17899398258: 用C语言做一个文本编辑器
缑淑甲磺: 只能作一个行编辑器>#include>#include>intmain(intargc,char*argv[])>{>FILE*fp;>chars[100];>>if(fp=fopen(argv[1],"r")==NULL){>fprintf(stderr,"cannottouchfile\n");>exit(0);>}>>do{>gets(s);>fputs(fp,s);>}while(!length(s));>fclose(fp);>>return0;>}在系统中都有这样的命令,而不必编写这种程序dos& >filename

五华县17899398258: 跪求C语言编写的简易文本器代码~帮我写写吧,一定要能运行的.(可以运行再加100) -
缑淑甲磺: #include"stdio.h" #include"stdlib.h" #include"string.h" #include <conio.h> int i=0,j=1;//i记录文件打开状态,0代表空,1代表非空,2代表打开出错 int n=0;//记录文件中字符的个数 char addr[120],Buffer[2000],u; FILE *fp;void Cut(FILE*); ...

五华县17899398258: 求c语言写的文本编辑器 -
缑淑甲磺: 本题的一个完整的c程序如下,win-tc和Dev-c++下运行通过.#include #define MAXLEN 80#define MAXLINE 200 char buffer[MAXLEN],fname[120]; char *lineptr[MAXLINE]; FILE *fp; void edit(),replace(),insert(),delete(),quit(); char comch[]="...

五华县17899398258: c语言编程:编一个文本编译器. -
缑淑甲磺: 楼主,你好!以前数据结构大作业,写过一个文本编辑器,命令行下的,还有些印象 基本的打开、保存文件的操作用标准IO库提供的函数就行了,键盘操作当时用的是TC下的bios.h(貌似只有TC下才有),里面有捕获键盘输入的函数,如CTRL+s保存文件之类的.查找操作选择好适合的j数据结构,都有现成的算法可以使用下面是我以前用来参考的一个代码(写得比较粗糙),你也可以看一下希望对你能有帮助吧参考代码已经发给楼主

五华县17899398258: 如何用C语言做简易文本编辑器(最好能有代码和说明) -
缑淑甲磺: fopen,fgets ,然后统计单词书,转换.

五华县17899398258: C语言编写 简单的文本编辑器 -
缑淑甲磺: Turbo C/C++ for Windows集成实验环境是个共享版的软件,试用时间为30天,挺好用的!

五华县17899398258: 设计一个简单的文本编辑器,用C语言实现(高分悬赏) -
缑淑甲磺: #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; ...

五华县17899398258: C语言文本编辑程序 -
缑淑甲磺: #include<stdio.h> #include<stdlib.h> #include<string.h> #define N 3typedef struct node{ char data[N][80]; int length; }SeqList,*PSeqList;PSeqList Init_SeqList(void) { PSeqList PL; PL = (PSeqList)malloc(sizeof(SeqList)); if(PL) PL->length = 0; ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网