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

📄 poppad.c

📁 C#一个实例源代码
💻 C
字号:
/*---------------------------------------
    "poppad".C
               (S) ShenFan, 2002
  ---------------------------------------*/

#include <windows.h>
#include <commdlg.h>
#include "resource.h"
#define  ID_EDIT 1
#define  UNTITLED TEXT("untitled")
#define EDITID 1


///CALLBACK
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
BOOL    CALLBACK AboutDlgProc(HWND, UINT, WPARAM, LPARAM) ;

//
void DoCaption(HWND , TCHAR *);
//void PopFileinitialize(HWND);


//Globle
TCHAR szAppName[] = TEXT ("PopPad") ;
HINSTANCE hInst;
static HWND hDlgModeless;
//////////////////////////////////////////
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{

     HWND         hwnd ;
     MSG          msg ;
     WNDCLASS     wndclass ;
	 HACCEL       hAccel;
	 
     hInst=hInstance;

     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (NULL, szAppName) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = szAppName ;
     wndclass.lpszClassName = szAppName ;
     
     if (!RegisterClass (&wndclass))
     {
          MessageBox (NULL, TEXT ("Program requires Windows NT!"), 
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }
     
     hwnd = CreateWindow (szAppName, TEXT ("PopPad"),
                          WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          NULL, NULL, hInstance, NULL) ;
     
     ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ;
	 hAccel=LoadAccelerators(hInstance,szAppName);
     
     while (GetMessage (&msg, NULL, 0, 0))
     {
		 if(hDlgModeless==NULL||!IsDialogMessage(hDlgModeless,&msg))
		 {
			 if(!TranslateAccelerator(hwnd,hAccel,&msg))
		 {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
		 }
		 }
     }
     return msg.wParam ;

}

//////////////////////////////////////////////

short AskAboutSave(HWND hwnd,TCHAR *szTitleName)
{
	TCHAR szBuffer[64+MAX_PATH];
	int iReturn;

	wsprintf(szBuffer,TEXT("Save current changes in %s?"),szTitleName[0]?szTitleName:UNTITLED);
    iReturn=MessageBox(hwnd,szBuffer,szAppName,MB_YESNOCANCEL|MB_ICONQUESTION);
     
	if(iReturn==IDYES)
		if(!SendMessage(hwnd,WM_COMMAND,IDM_FILE_SAVE,0))
			iReturn=IDCANCEL;

	return iReturn;
}


///////////////////////////////////////////////
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	 static BOOL   bNeedSave=0;
     static HWND   hwndEdit;
	 int           iSelect,iEnable;
     static TCHAR  szTitleName[MAX_PATH],szFileName[MAX_PATH];
	 static int    iOffset;
	 static UINT   messageFindReplace;
	 LPFINDREPLACE pfr;


     switch (message)
     {
	 case WM_CREATE:
		 hwndEdit=CreateWindow(TEXT("edit"),NULL,WS_CHILD|WS_VISIBLE|WS_HSCROLL|
			 WS_VSCROLL|WS_BORDER|ES_LEFT|ES_MULTILINE|ES_AUTOHSCROLL|ES_AUTOVSCROLL|ES_NOHIDESEL,
			 0,0,0,0,hwnd,(HMENU)ID_EDIT,hInst,NULL);
		 SendMessage(hwndEdit,EM_LIMITTEXT,32000,0L);
		 PopFileInitialize(hwnd);
		 PopFontInitialize(hwndEdit);

		 messageFindReplace=RegisterWindowMessage(FINDMSGSTRING);

		 DoCaption(hwnd,szTitleName);

		 return 0;

	 case WM_SETFOCUS:
		 SetFocus(hwndEdit);
		 return 0;

     case WM_SIZE:
		 MoveWindow(hwndEdit,0,0,LOWORD(lParam),HIWORD(lParam),TRUE);
         return 0 ;
	 case WM_INITMENUPOPUP:
		 if(lParam==1)
		 {
               EnableMenuItem ((HMENU) wParam,IDM_EDIT_UNDO,
                    SendMessage (hwndEdit, EM_CANUNDO, 0, 0) ?
                                   MF_ENABLED : MF_GRAYED) ;
			   EnableMenuItem ((HMENU) wParam,IDM_EDIT_PASTE,
                    IsClipboardFormatAvailable(CF_TEXT) ?
                                   MF_ENABLED : MF_GRAYED) ;
			   iSelect=SendMessage(hwndEdit,EM_GETSEL,0,0);
			   if(HIWORD(iSelect)==LOWORD(iSelect))
				   iEnable=MF_GRAYED;
			   else
				   iEnable=MF_ENABLED;
			    EnableMenuItem ((HMENU) wParam,IDM_EDIT_CUT,iEnable);
				EnableMenuItem ((HMENU) wParam,IDM_EDIT_COPY,iEnable);
				EnableMenuItem ((HMENU) wParam,IDM_EDIT_DEL,iEnable);

			   return 0;
		 }
		 break;

	 case WM_COMMAND:
		 if(lParam&&LOWORD(wParam)==EDITID)
		 {
			 switch(HIWORD(wParam))
			 {
			 case EN_UPDATE: 
				 bNeedSave=1;
				 return 0;
			 case EN_ERRSPACE:
			 case EN_MAXTEXT:
				 MessageBox(hwnd,TEXT("Edit control out of space."),
					             szAppName,MB_OK|MB_ICONSTOP);
				 return 0;
			 }
			 break;
		 }
		 switch(LOWORD(wParam))
		 {
		 case IDM_FILE_NEW:
			 if(bNeedSave&&IDCANCEL==AskAboutSave(hwnd,szTitleName))
				 return 0;
			 SetWindowText(hwndEdit,TEXT("\0"));
			 szFileName[0]='\0';
			 szTitleName[0]='\0';
			 DoCaption(hwnd,szTitleName);
			 bNeedSave=0;

			 return 0;
			 
	



		 case IDM_FILE_OPEN:
			 if(bNeedSave&&IDCANCEL==AskAboutSave(hwnd,szTitleName))
			 return 0;
			 if(PopFileOpenDlg(hwnd,szFileName,szTitleName))
			 {
				if(!PopFileRead(hwndEdit,szFileName))
				{
					 MessageBox(hwnd,TEXT("Could not read file %s!"),TEXT("Warning!"),0);
					 szFileName[0]='\0';
					 szTitleName[0]='\0';
				 }
			 }
			 DoCaption(hwnd,szTitleName);
			 bNeedSave=0;
			 return 0;



		 case IDM_FILE_SAVE:
			 if(szFileName[0])
			 {
				 if(PopFileWrite(hwndEdit,szFileName))
				 {
					 bNeedSave=FALSE;
					 return 1;
				 }
				 else
				 {
					 MessageBox(hwnd,TEXT("Could not write file"),TEXT("Warning"),0);
					 return 0;
				 }
			 }
		 case IDM_FILE_SAVEAS:
			 if(PopFileSaveDlg(hwnd,szFileName,szTitleName))
			 {
				 DoCaption(hwnd,szTitleName);
				 if(PopFileWrite(hwndEdit,szFileName))
				 {
					 bNeedSave=0;
					 return 1;
				 }
				 else
				 {
					 MessageBox(hwnd,TEXT("Could not write file"),TEXT("Warning"),0);
					 return 0;
				 }
			 }
			 return 0;



		 case IDM_FILE_PRINT:
			 MessageBeep(0);
			 return 0;
		 case IDM_FILE_EXIT:
			 SendMessage(hwnd,WM_CLOSE,0,0);
			 return 0;


		 case IDM_EDIT_UNDO:
			 SendMessage(hwndEdit,WM_UNDO,0,0);
			 return 0;
		 case IDM_EDIT_CUT:
			 SendMessage(hwndEdit,WM_CUT,0,0);
			 return 0;
		 case IDM_EDIT_COPY:
			 SendMessage(hwndEdit,WM_COPY,0,0);
			 return 0;
		 case IDM_EDIT_PASTE:
			 SendMessage(hwndEdit,WM_PASTE,0,0);
			 return 0;
		 case IDM_EDIT_DEL:
			 SendMessage(hwndEdit,WM_CLEAR,0,0);
			 return 0;
		 case IDM_EDIT_SELECTALL:
			 SendMessage(hwndEdit,EM_SETSEL,0,-1);

			 return 0;
		 case IDM_FORMAT_FOND:
			 if(PopFontChooseFont(hwnd))
				 PopFontSetFont(hwndEdit);
			 return 0;
		 case IDM_SEARCH_FIND:
			 SendMessage(hwndEdit,EM_GETSEL,0,&iOffset);
			 hDlgModeless=PopFindFindDlg(hwnd);
			 return 0;

		 case IDM_SEARCH_NEXT:
			 SendMessage(hwndEdit,EM_GETSEL,0,(LPARAM)&iOffset);
			 if(PopFindValidFind())
				 PopFindNextText(hwndEdit,&iOffset);
			 else hDlgModeless=PopFindFindDlg(hwnd);
			 return 0;

		 case IDM_SEARCH_REPLACE:
			 SendMessage(hwndEdit,EM_GETSEL,0,(LPARAM)&iOffset);
			 hDlgModeless=PopFindReplaceDlg(hwnd);

			 return 0;


          case IDM_HELP_HELP:
               MessageBox (hwnd, TEXT ("Help not yet implemented!"),
                           szAppName, MB_OK | MB_ICONEXCLAMATION) ;
               return 0 ;
          
          case IDM_HELP_ABOUT:
               DialogBox (hInst, TEXT ("ABOUTPOPPAD"),hwnd,
                           AboutDlgProc) ;
               return 0 ;


		 }
		 break;


		 
           
    	 case WM_CLOSE:
		 if(!bNeedSave||IDCANCEL!=AskAboutSave(hwnd,szTitleName))
			 DestroyWindow(hwnd);
		 return 0;

	 case WM_QUERYENDSESSION:
		 if(!bNeedSave||IDCANCEL!=AskAboutSave(hwnd,szTitleName))
			 return 1;
		 return 0;

          
     case WM_DESTROY:
          PostQuitMessage (0) ;
          return 0 ;
	 default:
		 if(message==messageFindReplace)
		 {
			 pfr=(LPFINDREPLACE)lParam;

			 if(pfr->Flags&FR_DIALOGTERM)
				 hDlgModeless=NULL;
			 if(pfr->Flags&FR_FINDNEXT)
			 {
				 if(!PopFindFindText(hwndEdit,&iOffset,pfr))
					 MessageBox(hwnd,TEXT("Text not found!"),TEXT("Warning"),0);
			 
			 }
			 if(pfr->Flags&FR_REPLACE||pfr->Flags&FR_REPLACEALL)
				 if(!PopFindReplaceText(hwndEdit,&iOffset,pfr))
					 MessageBox(hwnd,TEXT("Text not found!"),TEXT("Warning"),0);
			 if(pfr->Flags&FR_REPLACEALL)
				 while(PopFindReplaceText(hwndEdit,&iOffset,pfr));
				

			 return 0;
		 }
		 break;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}



BOOL    CALLBACK   AboutDlgProc(HWND hDlg, UINT message, 
							  WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
	case WM_INITDIALOG:
		return TRUE;
	case WM_COMMAND:
		switch(LOWORD(wParam))
		{
		case IDOK:
		case IDCANCEL:
			EndDialog(hDlg,0);
			return TRUE;
		}
		break;
	}
	return FALSE;
}

void DoCaption(HWND hwnd, TCHAR *szTitleName)
{
	TCHAR szCaption[64+MAX_PATH];
	wsprintf(szCaption,TEXT("%s-%s"),szAppName,szTitleName[0]?szTitleName:UNTITLED);
		SetWindowText(hwnd,szCaption);
}

⌨️ 快捷键说明

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