简单的编辑器

#include<Windows.h>

	LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nShowCmd)
{
	static TCHAR szAPPName[] = TEXT("MyWindows");
	HWND hwnd;
	MSG msg;
	WNDCLASS wndclass;

	wndclass.style = CS_HREDRAW | CS_VREDRAW;
	wndclass.hInstance = hInstance;
	wndclass.lpfnWndProc = WndProc;
	wndclass.cbClsExtra = 0;
	wndclass.cbWndExtra = 0;
	wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
	wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
	wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wndclass.lpszClassName = szAPPName;
	wndclass.lpszMenuName = NULL;

	if(!RegisterClass(&wndclass))
	{
		MessageBox(NULL,TEXT("这个程序需要在 windows NT 下菜能执行!"),TEXT("错误"),MB_OK | MB_ICONERROR);
		return 0;
	}

	hwnd = CreateWindow(szAPPName,TEXT("简单的文本编辑器"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);

	ShowWindow(hwnd,nShowCmd);

	UpdateWindow(hwnd);

	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	static RECT rect;
	static int wordWidth,wordHeight;
	TEXTMETRIC tm;
	static TCHAR *p = NULL;
	static int curx = 0,cury = 0;
	switch(message)
	{
	case WM_CREATE:
		hdc = GetDC(hwnd);
		SelectObject(hdc,CreateFont(0,0,0,0,0,0,0,0,0,0,0,0,FIXED_PITCH,NULL));
		GetClientRect(hwnd,&rect);
		GetTextMetrics(hdc,&tm);
		wordWidth = tm.tmAveCharWidth;
		wordHeight = tm.tmHeight;
		rect.left = 10;
		rect.top = 30;
		rect.right = rect.left + 50 * wordWidth;
		rect.bottom = rect.top + 10 * wordHeight;

		if(p)
			free(p);
		else
		{
			p = (TCHAR *)malloc(50 * 10 * sizeof(CHAR));
		}
		ReleaseDC(hwnd,hdc);
		return 0;

	case WM_PAINT:
		hdc = BeginPaint(hwnd,&ps);
		SelectObject(hdc,CreateFont(0,0,0,0,0,0,0,0,0,0,0,0,FIXED_PITCH,NULL));
		TextOut(hdc,10,10,TEXT("简单的文本编辑器"),lstrlen(TEXT("简单的文本编辑器")));
		SelectObject(hdc,CreatePen(PS_SOLID,2,RGB(255,0,0)));
		Rectangle(hdc,rect.left,rect.top,rect.right,rect.bottom);
		EndPaint(hwnd,&ps);
		return 0;
	case WM_KEYDOWN:
		if(wparam == VK_BACK)
		{
			if(curx == 0 && cury == 0)
				return 0;
			if(curx <= 0)
			{
				curx = 50 - 1;
				if(cury > 0)
					cury--;
			}
			else
				curx--;
		}
		HideCaret(hwnd);
		hdc = GetDC(hwnd);
		p[cury * 50 + curx] = (TCHAR)‘ ‘;
		SetCaretPos(rect.left + curx * wordWidth,rect.top + cury * wordHeight);
		SelectObject(hdc,CreateFont(0,0,0,0,0,0,0,0,0,0,0,0,FIXED_PITCH,NULL));
		TextOut(hdc,rect.left + curx * wordWidth,rect.top + cury * wordHeight,&p[cury * 50 + curx],1);
		ShowCaret(hwnd);
		ReleaseDC(hwnd,hdc);
		return 0;
	case WM_SETFOCUS:
		CreateCaret(hwnd,NULL,wordWidth / 8,wordHeight);
		SetCaretPos(rect.left,rect.top);
		ShowCaret(hwnd);

		return 0;
	case WM_KILLFOCUS:
		HideCaret(hwnd);
		DestroyCaret();
		return 0;
	case WM_CHAR:
		if(wparam == 8)
			return 0;
		if(cury >= 10)
			return 0;
		HideCaret(hwnd);
		p[cury * 50 + curx] = (CHAR)wparam;
		hdc = GetDC(hwnd);
		SelectObject(hdc,CreateFont(0,0,0,0,0,0,0,0,0,0,0,0,FIXED_PITCH,NULL));
		TextOut(hdc,rect.left + curx * wordWidth,rect.top + cury * wordHeight,&p[cury*50+curx],1);
		curx++;
		if(curx >= 50)
		{
			curx = 0;
			cury++;
		}
		SetCaretPos(rect.left + curx * wordWidth,rect.top + cury * wordHeight);
		ShowCaret(hwnd);

		ReleaseDC(hwnd,hdc);
		return 0;

	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;

	default:
		return DefWindowProc(hwnd,message,wparam,lparam);

	}
}

  

时间: 2024-10-06 07:21:28

简单的编辑器的相关文章

卡牌简单动作编辑器

demo程序需要安装Flash Player11才能正常运行. 卡牌简单动作编辑器

修正《更简单的 编辑器从光标处插入图片(失去焦点后仍然可以在原位置插入)》中的一个问题

转载请注明: TheViper http://www.cnblogs.com/TheViper  以前写过一篇更简单的 编辑器从光标处插入图片(失去焦点后仍然可以在原位置插入),里面只测试了ie,事实上在firefox中有个小问题,就是不管插入图片前,编辑器有没有焦点(光标),在插入后,光标会消失. 插入前没有焦点 插入前有焦点 修正 function insertImage(html){ restoreSelection(); if(document.selection) currentRan

java简单文本编辑器

一.前言 聚天地之灵气,集日月之精华!一个简单的java文本编辑器由此而生.毕设所需,很是无奈! 二.界面预览     三.实现思路 1.字体选择器的实现 (1).字体类 class MyFont{ private Font font; private Color color; public Font getFont() { return font; } public void setFont(Font font) { this.font = font; } public Color getCo

简单文本编辑器制作

对于文本编辑器,最关键的知识点,就是 插入符号 的操作了... windows中有5个基本的插入符号函数: CreateCaret:创建和窗口关联的插入符号 SetCaretPos:设置窗口内的插入符号的位置 ShowCaret:显示插入符号 HideCaret:隐藏插入符号 DestroyCaret:销毁插入符号 对于插入符号的相关函数: GetCaretPos:获得当前插入符号位置的函数 GetCaretBlinkTime SetCaretBlinkTime获得和设置插入符号闪烁的时间函数

Ubuntu超简单文书编辑器:nano

nano 的使用很简单,可以直接加上档名就能够开启一个旧档或新档! 直接在终端输入指令:nano text.txt,如下图所示打开的是已有的文档! 第一部分反白部分,是nano的版本与档名 第二部分可以编辑文本信息,按下ctrl+X选择保存或不保存即可. nano常用指令集合,如下: ctrl+G或F1键:取得联机帮助,很有用的! ctrl+X:离开nano软件,若有修改过的档案会提示是否需要存储哦 ctrl+o:储存档案,若你有权限的话就能够储存档案啦 ctrl+R:从其他档案读入资料,可以将

AngularJs2 构建简单的英雄编辑器

参考上一篇文章的步骤,重新把相关环境准备.目录结构走一遍. 这一次我们要开始创建真正的Angularjs项目了. 显示我们的英雄 我们要在应用中显示英雄数据 我们来为 AppComponent 添加两个属性: title 属性表示应用的名字,而 hero 属性表示一个名叫“ Windstorm ”的英雄. export class AppComponent { title = 'Tour of Heroes'; hero = 'Windstorm'; } 现在,我们为这些新属性建立数据绑定,以更

简单材质编辑器

简单编辑器的入门使用,修改编辑工具增加表情

1.编辑器的入门使用 去http://ueditor.baidu.com下载 选择自己需要的字符集类型,下载本地表情 然后解压放在虚拟服务器admin目录下 ueditor1_4_3-utf8-php 名字修改为 ueditor把里面的内容粘在一级目录下 把如下代码放入需要的的body目录下,注意路径的问题不要写错 <!-- 加载编辑器的容器 --> <script id="container" name="content" type="

Tkinter制作简单的python编辑器

想要制作简单的python脚本编辑器,其中文字输入代码部分使用Tkinter中的Text控件即可实现. 但是问题是,如何实现高亮呢?参考python自带的编辑器:python27/vidle文件夹中的代码. 实现效果为: 其中主要思路就是在Text中每输入一行代码,都通过正则匹配,查找是不是需要高亮效果,道理很简单,但是问题就是在使用Text控件的时候,通过光标输入的时候,似乎不能找到光标对应的位置,所以,人家的编辑器代码中,提供了WidgetRedirector.py文件,其作用主要是解决控件