⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 notepad.c

📁 用C语言
💻 C
字号:
#include <stdio.h>
#include <string.h>
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>
#include <minigui/mgext.h>
#define IDM_NEW  			0x01
#define IDM_OPEN 			0x02
#define IDM_SAVE      0x03
#define IDM_EXIT 			0x04
#define IDC_EDIT 			0x05
#define IDC_TIME 			0x06
#define IDC_EDIT_FN		0x07
#define IDC_OK_FN     0x08
#define IDM_SEARCH  	0x09
#define IDC_EDIT_SH 	0x10
#define IDC_SEARCH_SH 0x11
#define IDM_CUT  			0x12
#define IDM_PAUSE 		0x13
#define IDM_COPY  		0x14
#define MAINWINRX 		 400
#define MAINWINBY 		 450
#define FILENAME_MAXLEN 30
#define BUFFER_MAXLEN  300
static  int   flag_changed;
static  char  filename[FILENAME_MAXLEN];
static  char  buffer[BUFFER_MAXLEN];
static  char  texttime[50];
static  char  searchstr[20];
static  FILE* fp;
struct  tm*   ptime;
static  int   state;
time_t  now;
void saveText(void)
{	
	if((fp=fopen(filename,"w+"))==NULL)
		return;
	time(&now);
	ptime=localtime(&now);
  sprintf(texttime," %s     last write time: %d.%d.%d:%d:%d",filename,
          ptime->tm_year+1900,ptime->tm_mon+1,ptime->tm_mday,
        	ptime->tm_hour,ptime->tm_min);
	fwrite(buffer,sizeof(buffer),1,fp);
	fwrite(texttime,sizeof(texttime),1,fp);
	fclose(fp);
}
void openText(void)
{	
	if((fp=fopen(filename,"r+"))==NULL)
		return;
  fread(buffer,sizeof(buffer),1,fp);
  fread(texttime,sizeof(texttime),1,fp);
	fclose(fp);
}
void findStr(int line_pos,int char_pos)
{
	int i,j;
	char* ch;
	for(i=0,j=0;i!=line_pos;j++)
		if(buffer[j]=='\n')
	  	i++;
	j=j+char_pos;
	ch=strstr(buffer+j,searchstr);
	state=ch-buffer;
}
void setCur(HWND hEdit)
{
	int i=0;
	int line_pos,char_pos;
	for(line_pos=0,char_pos=0;i<=state;i++,char_pos++)
		if(buffer[i]=='\n')
	  {
	  	line_pos++;
	    char_pos=-1;
	  }
	char_pos--;
	SendMessage(hEdit,EM_SETCARETPOS,line_pos,char_pos);
}
static DLGTEMPLATE DlgInitProgress=
{
	WS_BORDER | WS_CAPTION,0,80,50,200,70,"",0,0,3,NULL,0
};
static CTRLDATA CtrlInitProgress[]= 
{
	{"static",WS_VISIBLE,10,20,50,20,0,"file name :",0},
  {"edit",WS_VISIBLE | WS_BORDER,65,20,60,20,IDC_EDIT_FN,"",0}, 
  {"button",WS_VISIBLE,130,20,40,20,IDC_OK_FN,"ok",0}
};
static CTRLDATA CtrlSearchProgress[]= 
{
	{"static",WS_VISIBLE,10,20,50,20,0,"string :",0},
  {"edit",WS_VISIBLE | WS_BORDER,65,20,60,20,IDC_EDIT_SH,"",0}, 
  {"button",WS_VISIBLE,130,20,40,20,IDC_SEARCH_SH,"search",0}
};
static int InitDialogBoxProc(HWND hDlg,int message,WPARAM wParam,LPARAM lParam)
{
	switch(message)
  {                 
  	case MSG_COMMAND:
  		switch(wParam)
  		{
  			case IDC_OK_FN:
  				SendMessage(GetDlgItem(hDlg,IDC_EDIT_FN),MSG_GETTEXT,FILENAME_MAXLEN,(LPARAM)filename);
  				EndDialog(hDlg,wParam);
  				break;
  			default:break;
  		}
  		break;
    case MSG_CLOSE:
    	EndDialog(hDlg,wParam);
    	break;     
  }
  return DefaultDialogProc(hDlg,message,wParam,lParam);
}
static int SearchDialogBoxProc(HWND hDlg,int message,WPARAM wParam,LPARAM lParam)
{
	switch(message)
  {                 
  	case MSG_COMMAND:
  		switch(wParam)
  		{
  			case IDC_SEARCH_SH:
  				SendMessage(GetDlgItem(hDlg,IDC_EDIT_SH),MSG_GETTEXT,20,(LPARAM)searchstr);
  				EndDialog(hDlg,wParam);
  				break;
  			default:break;
  		}
  		break;
    case MSG_CLOSE:
    	EndDialog(hDlg,wParam);
    	break;     
  }
  return DefaultDialogProc(hDlg,message,wParam,lParam);
}
static void InitDialogBox (HWND hWin)
{
	DlgInitProgress.controls=CtrlInitProgress;
  DialogBoxIndirectParam(&DlgInitProgress,hWin,InitDialogBoxProc,0L);
}
static void SearchDialogBox (HWND hWin)
{
	DlgInitProgress.controls=CtrlSearchProgress;
  DialogBoxIndirectParam(&DlgInitProgress,hWin,SearchDialogBoxProc,0L);
}
void askForFilename(HWND hWin)
{
	InitDialogBox(hWin); 
}
static HMENU createFileSubmenuLvl1(void)
{
	HMENU hmnu;
	MENUITEMINFO mii;
	memset(&mii, 0, sizeof( MENUITEMINFO ) );
	mii.type=MFT_SEPARATOR;
	mii.id = 0;
	mii.typedata = (DWORD)"";
	hmnu = CreatePopupMenu( &mii );
	memset(&mii, 0, sizeof( MENUITEMINFO ) );
	mii.type = MFT_STRING;
	mii.id = IDM_NEW;
	mii.typedata = (DWORD)"New";
	InsertMenuItem( hmnu, 0, TRUE, &mii );
	mii.type = MFT_STRING;
	mii.id = IDM_OPEN;
	mii.typedata = (DWORD)"Open";
	InsertMenuItem( hmnu, 1, TRUE, &mii );
	mii.type = MFT_STRING;
	mii.id = IDM_SAVE;
	mii.typedata = (DWORD)"Save";
	InsertMenuItem( hmnu, 2, TRUE, &mii );
	mii.type = MFT_STRING;
	mii.id = IDM_EXIT;
	mii.typedata = (DWORD)"Exit";
	InsertMenuItem( hmnu, 3, TRUE, &mii );
	return hmnu;
}
static HMENU createEditSubmenuLvl1(void)
{
	HMENU hmnu;
	MENUITEMINFO mii;
	memset(&mii, 0, sizeof( MENUITEMINFO ) );
	mii.type = MFT_SEPARATOR;
	mii.id = 0;
	mii.typedata = (DWORD)"";
	hmnu = CreatePopupMenu( &mii );
	memset(&mii, 0, sizeof( MENUITEMINFO ) );
	mii.type = MFT_STRING;
	mii.id = IDM_SEARCH;
	mii.typedata = (DWORD)"search";
	InsertMenuItem( hmnu, 0, TRUE, &mii );
	mii.type = MFT_STRING;
	mii.id = IDM_CUT;
	mii.typedata = (DWORD)"cut";
	InsertMenuItem( hmnu, 1, TRUE, &mii );
	mii.type = MFT_STRING;
	mii.id = IDM_PAUSE;
	mii.typedata = (DWORD)"pause";
	InsertMenuItem( hmnu, 2, TRUE, &mii );
	mii.type = MFT_STRING;
	mii.id = IDM_COPY;
	mii.typedata = (DWORD)"copy";
	InsertMenuItem( hmnu, 3, TRUE, &mii );
	return hmnu;
}
static HMENU createMenu(void)
{
	HMENU hmnu;
	MENUITEMINFO mii;
	hmnu = CreateMenu();
	memset( &mii, 0, sizeof( MENUITEMINFO ) );
	mii.type = MFT_STRING;
	mii.id = 0;
	mii.typedata = (DWORD)"File";
	mii.hsubmenu = createFileSubmenuLvl1();
	InsertMenuItem( hmnu, 0, TRUE, &mii );
	mii.type = MFT_STRING;
	mii.id = 0;
	mii.typedata = (DWORD)"Edit";
	mii.hsubmenu = createEditSubmenuLvl1();
	InsertMenuItem( hmnu, 1, TRUE, &mii );
	return hmnu;
}
static int notepadWinProc( HWND hWin, int message, WPARAM wParam, LPARAM lParam )
{
	int char_pos,line_pos;
	flag_changed = 0;
  time(&now);
	ptime=localtime( &now );
  sprintf(texttime," %s     last write time: %d.%d.%d:%d:%d",filename,
          ptime->tm_year+1900,ptime->tm_mon+1,ptime->tm_mday,
        	ptime->tm_hour,ptime->tm_min);
	switch(message) 
	{
		case MSG_CREATE:
			CreateWindow(CTRL_TEXTEDIT, "", 
			             WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_AUTOWRAP, IDC_EDIT,
                   0, 0, MAINWINRX-4, MAINWINBY-75, hWin, 0 );
      CreateWindow(CTRL_STATIC, texttime, 
			             WS_VISIBLE, IDC_TIME,
                   0, MAINWINBY-74, MAINWINRX, 74, hWin, 0 );
      break;
    case MSG_COMMAND:
    	switch(wParam)
    	{
    		case IDM_NEW:
    			if(flag_changed != 0)
    			{
    			}   
    			strcpy(filename,""); 			
    			SendMessage(GetDlgItem(hWin,IDC_EDIT),MSG_SETTEXT,0,(LPARAM)"" );
    			flag_changed = 0;
    			time(&now);
	    		ptime=localtime( &now );
	    		strcpy(filename,"");
 				  sprintf(texttime," %s     last write time: %d.%d.%d:%d:%d",filename,
          ptime->tm_year+1900,ptime->tm_mon+1,ptime->tm_mday,
        	ptime->tm_hour,ptime->tm_min);
        	SendMessage(GetDlgItem( hWin,IDC_TIME),MSG_SETTEXT,50,(LPARAM)texttime);
    			break;
    	  case IDM_OPEN:
    	  	if(flag_changed != 0 )
    			{
    			}
    			askForFilename( hWin );
    			openText();
    			SendMessage(GetDlgItem( hWin,IDC_EDIT),MSG_SETTEXT,BUFFER_MAXLEN,(LPARAM)buffer);
    			SendMessage(GetDlgItem( hWin,IDC_TIME),MSG_SETTEXT,50,(LPARAM)texttime);
    			flag_changed = 0;
    			break;
    		case IDM_SAVE:
    			askForFilename(hWin);
    			SendMessage(GetDlgItem(hWin,IDC_EDIT),MSG_GETTEXT,BUFFER_MAXLEN,(LPARAM)buffer);
    			saveText();
    			flag_changed = 1;   			
    			break;
    	  case IDM_SEARCH:
    	  	SendMessage(GetDlgItem(hWin,IDC_EDIT),MSG_GETTEXT, BUFFER_MAXLEN, (LPARAM)buffer);
    	  	SearchDialogBox(hWin);    	      	  	
          SendMessage(GetDlgItem(hWin,IDC_EDIT),EM_GETCARETPOS,(WPARAM)&line_pos, (LPARAM)&char_pos);
          findStr(line_pos,char_pos);
          setCur(GetDlgItem(hWin,IDC_EDIT));
    	  	break;
    	  case IDM_CUT:
    	  	SendMessage (GetDlgItem( hWin, IDC_EDIT ), EM_CUTTOCB, 0, 0);
    	  	break;
    	  case IDM_PAUSE:
    	  	SendMessage (GetDlgItem( hWin, IDC_EDIT ), EM_INSERTCBTEXT, 0, 0);
    	  	break;
    	  case IDM_COPY:
    	  	SendMessage (GetDlgItem( hWin, IDC_EDIT ), EM_COPYTOCB, 0, 0);
    	  	break;	
    		case IDM_EXIT:
    			if( flag_changed != 0 )
    			{
    			}
    			DestroyMainWindow( hWin );
			    PostQuitMessage( hWin );
			    return 0;
    		default: break;
    	}
    	break;
		case MSG_CLOSE:
			DestroyMainWindow( hWin );
			PostQuitMessage( hWin );
			return 0;
  }
  return DefaultMainWinProc( hWin, message, wParam, lParam );
}
int MiniGUIMain( int argc, const char* argv[] )
{
	MAINWINCREATE mainWinCreateInfo;
	HWND hWin;
	MSG Msg;	
#ifdef _MGRM_PROCESSES
	JoinLayer( NAME_DEF_LAYER, "notepad", 0, 0 );
#endif
	mainWinCreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;
	mainWinCreateInfo.dwExStyle = WS_EX_NONE;
	mainWinCreateInfo.spCaption = "NOTEPAD";
	mainWinCreateInfo.hMenu = createMenu();
	mainWinCreateInfo.hCursor = GetSystemCursor( 0 );
	mainWinCreateInfo.hIcon = 0;
	mainWinCreateInfo.MainWindowProc = notepadWinProc;
  mainWinCreateInfo.lx = 0;
  mainWinCreateInfo.ty = 0;
  mainWinCreateInfo.rx = MAINWINRX;
  mainWinCreateInfo.by = MAINWINBY;
  mainWinCreateInfo.iBkColor = COLOR_lightwhite;
  mainWinCreateInfo.dwAddData = 0;
  mainWinCreateInfo.hHosting = HWND_DESKTOP;    
  hWin = CreateMainWindow( &mainWinCreateInfo );
  if( hWin == HWND_INVALID )
  	return -1;
  ShowWindow(hWin,SW_SHOWNORMAL);
  while( GetMessage( &Msg, hWin)) 
  {
  	TranslateMessage( &Msg );
  	DispatchMessage( &Msg );
  } 
  MainWindowThreadCleanup( hWin );
  return 0;
}
#ifndef _MGRM_PROCESSES
#include <minigui/dti.c>
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -