zoukankan      html  css  js  c++  java
  • 简单的编辑器

    #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);
    
    	}
    }
    

      

  • 相关阅读:
    面向对象基础小结
    异常应用场景
    集合应用场景1:迭代器
    集合应用场景2——数据结构
    华为ce交换机 Bridge-Domain NVE
    linux 内核内置模块
    linux bridge 转发 ip
    iptables nat&conntrack
    loopback
    配置集中式网关部署方式的VXLAN示例(静态方式)
  • 原文地址:https://www.cnblogs.com/devinblog/p/4234700.html
Copyright © 2011-2022 走看看