《我的記事本(模仿Windows記事本程式)》程式源碼

來源:互聯網
上載者:User

 

來源程式中一小部分代碼:檔案名稱:MyNotepad.cpp

 

// MyNotepad.cpp : Defines the entry point for the application.<br />//<br />#include "stdafx.h"</p><p>#include "resource.h"<br />#include "MyNotepad.h"<br />#include "PopFile.h"<br />#include "PopFont.h"<br />#include "PopFind.h"<br />#include "ErrorMessage.h"<br />#include "GetDllVersion.h"</p><p>LONG<br />OnLineWrap (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);</p><p>//訊息映射與處理函數對照表。<br />struct MSGMAP_ENTRY _messageEntries[] =<br />{<br />WM_CREATE, OnCreate,<br />WM_DESTROY, OnDestroy,<br />WM_SIZE, OnSize,<br />WM_SETFOCUS, OnSetFocus,<br />WM_CLOSE, OnClose,<br />WM_COMMAND, OnCommand<br />};<br />//COMMAND-ID處理對照表。<br />struct MSGMAP_ENTRY _commandEntries[] =<br />{IDM_ABOUT, OnAbout,</p><p>IDM_FILE_NEW, OnFileNew,<br />IDM_FILE_OPEN, OnFileOpen,<br />IDM_FILE_SAVE, OnFileSave,<br />IDM_FILE_SAVE_AS, OnFileSaveAs,<br />IDM_EDIT_FIND, OnEditFind,<br />IDM_EDIT_FIND_NEXT, OnEditFindNext,<br />IDM_EDIT_FIND_REPLACE, OnEditFindReplace,<br />IDM_DATATIME, OnDataTime,<br />IDM_APP_EXIT, OnAppExit,<br />IDM_FORMAT_FONT, OnFormatFont,<br />IDM_EDIT_UNDO, OnEditUndo,<br />IDM_EDIT_CUT, OnEditCut,<br />IDM_EDIT_COPY, OnEditCopy,<br />IDM_EDIT_PASTE, OnEditPaste,<br />IDM_EDIT_CLEAR, OnEditClear,<br />IDM_EDIT_SELECT_ALL, OnEditSelectAll,<br />IDM_STATIC, OnStatic,<br />IDM_LINE_WRAP, OnLineWrap<br />};</p><p>void SetStatusText (HWND hWndEdit, HWND hWndStatus);<br />//Edit控制項視窗子類。<br />LRESULT<br />CALLBACK<br />EditSubWndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);</p><p>// Global Variables:<br />HINSTANCE_hInst;//current instance<br />TCHAR_szAppName[MAX_LOADSTRING];//程式名稱。<br />TCHAR_szFileName[MAX_PATH];//檔案名稱。<br />TCHAR_szTitleName[MAX_PATH];//程式標題。<br />HWND_hDlgModeless;//尋找對話方塊控制代碼。<br />HWND_hWndEdit;//Edit表單控制代碼。<br />HWND_hWndStatus;//狀態列表單控制代碼。<br />UINT_messageFindReplace;//尋找對話方塊ID。<br />BOOL_bNeedSave;//檔案需要儲存標記。<br />WNDPROC_wpOrigEditProc;//原EDIT控制項視窗過程函數地址。</p><p>int<br />APIENTRY<br />WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)<br />{<br /> MSGmsg;<br />HWNDhWnd;<br />HACCELhAccel;<br />INITCOMMONCONTROLSEX cc;//通用控制項類資訊結構.</p><p>cc.dwSize = sizeof(INITCOMMONCONTROLSEX);<br />cc.dwICC = ICC_BAR_CLASSES;//狀態列類。</p><p>if(GetDllVersion (TEXT("comctl32.dll")) < PACKVERSION(4,71))<br />{<br />MessageBox (NULL, TEXT("comctl32.dll Version < 4.71"), NULL, MB_OK);<br />return FALSE;<br />}</p><p>if(!InitCommonControlsEx (&cc))<br />{<br />MessageBox (NULL, TEXT("InitCommonControlsEx ()"), NULL, MB_OK);<br />return FALSE;<br />}</p><p>MyRegisterClass(hInstance);<br />hWnd = InitInstance (hInstance, nCmdShow);<br />if(!hWnd) return FALSE;</p><p>hAccel = LoadAccelerators (hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1));<br />// Main message loop:<br />while ( GetMessage(&msg, NULL, 0, 0) )<br />{<br />if( _hDlgModeless == NULL || !IsDialogMessage (_hDlgModeless, &msg) )<br />{<br />if( !TranslateAccelerator (hWnd, hAccel, &msg) )<br />{<br />TranslateMessage(&msg);<br />DispatchMessage(&msg);<br />}<br />}<br />}</p><p>return msg.wParam;<br />}</p><p>ATOM<br />MyRegisterClass(HINSTANCE hInstance)<br />{<br />//載入應用程式標題欄文本字串。<br />LoadString(hInstance, IDS_APP_TITLE, _szAppName, MAX_LOADSTRING);</p><p>WNDCLASSEX wcex;</p><p>wcex.cbSize= sizeof(WNDCLASSEX);<br />wcex.style= CS_HREDRAW | CS_VREDRAW;<br />wcex.lpfnWndProc= (WNDPROC)WndProc;<br />wcex.cbClsExtra= 0;<br />wcex.cbWndExtra= 0;<br />wcex.hInstance= hInstance;<br />wcex.hIcon= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));<br />wcex.hCursor= LoadCursor(NULL, IDC_ARROW);<br />wcex.hbrBackground= (HBRUSH)COLOR_WINDOW+1;<br />wcex.lpszMenuName= NULL;<br />wcex.lpszClassName= _szAppName;<br />wcex.hIconSm= NULL;</p><p>return RegisterClassEx(&wcex);<br />}</p><p>HWND<br />InitInstance(HINSTANCE hInstance, int nCmdShow)<br />{<br />HWND hWnd;<br />_hInst = hInstance;</p><p>hWnd = CreateWindow(<br />_szAppName,//windows class name<br />_szAppName,//windows標題。<br />WS_OVERLAPPEDWINDOW,<br />CW_USEDEFAULT,<br />CW_USEDEFAULT,<br />CW_USEDEFAULT,<br />CW_USEDEFAULT,<br />NULL,<br />LoadMenu (hInstance, MAKEINTRESOURCE(IDR_MENU1)),<br />hInstance, NULL);</p><p> if (!hWnd) return NULL;</p><p> ShowWindow(hWnd, nCmdShow);<br /> UpdateWindow(hWnd);</p><p> return hWnd;<br />}</p><p>LRESULT<br />CALLBACK<br />WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />int i;</p><p>for( i=0; i < dim(_messageEntries); i++)<br />{<br />if( message == _messageEntries[i].nMessage)<br />return ( (*_messageEntries[i].pfn)(hWnd, message, wParam, lParam) );<br />}</p><p>//處理尋找、替換對話方塊訊息。<br />if( message == _messageFindReplace )<br />{<br />PopFindReplaceText (_hWndEdit, (LPFINDREPLACE)lParam);<br />SetForegroundWindow (hWnd);//設定前台表單。<br />}</p><p>return ( DefWindowProc (hWnd, message, wParam, lParam) );<br />}</p><p>LONG<br />OnCommand (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />int i;</p><p>for( i=0; i < dim(_commandEntries); i++)<br />{<br />if( LOWORD(wParam) == _commandEntries[i].nMessage)<br />return ( (*_commandEntries[i].pfn)(hWnd, message, wParam, lParam) );<br />}</p><p>//處理編輯控制項命令。<br />if(lParam && LOWORD(wParam) == ID_EDIT)<br />{<br />MessageOperationEdit (_hWndEdit, wParam, &_bNeedSave);<br />}</p><p>return ( DefWindowProc (hWnd, message, wParam, lParam) );<br />}</p><p>//處理表單訊息。<br />LONG<br />OnCreate (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />if( !CreateEditText (hWnd, wParam, lParam) ) return 0;<br />if( !InitStatus (hWnd) ) return 0;</p><p>_wpOrigEditProc = (WNDPROC)SetWindowLong (_hWndEdit, GWL_WNDPROC, (LONG)EditSubWndProc);</p><p>//設定編輯控制項可輸入的最大字元數(硬極限)。<br />SendMessage (_hWndEdit, EM_LIMITTEXT, MAX_CHAR_COUNT, 0L);<br />PopFileInitialize (hWnd);<br />PopFontInitialize (_hWndEdit);<br />//註冊自訂訊息(針對尋找、替換對話方塊)。<br />_messageFindReplace = RegisterWindowMessage (FINDMSGSTRING);<br />DoCaption (hWnd, _szTitleName);</p><p>return 1;<br />}</p><p>LRESULT<br />CALLBACK<br />EditSubWndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />switch( message )<br />{<br />case WM_LBUTTONUP://滑鼠左鍵釋放。<br />SetStatusText (_hWndEdit, _hWndStatus);<br />break;<br />/*case EM_LINEFROMCHAR:<br />{<br />TCHAR szBuffer[MAX_PATH];<br />wsprintf (szBuffer, TEXT("%d"), wParam);<br />MessageBox (NULL, szBuffer, NULL, MB_OK);<br />}<br />break;<br />*/<br />}<br />return CallWindowProc (_wpOrigEditProc, hWnd, message, wParam, lParam);<br />/*<br />int ich = -1;<br />int iv;</p><p>iv = SendMessage (_hWndEdit, EM_LINEFROMCHAR, wParam, 0);<br />wsprintf (szBuffer, TEXT("%d"), iv);<br />MessageBox (NULL, szBuffer, NULL, MB_OK);</p><p>return 1;*/<br />}</p><p>LONG<br />OnSize (HWND hWnd, UINT wMsg, UINT wParam, LONG lParam)<br />{<br />RECT rect;<br />LONG cy;</p><p>GetClientRect (_hWndStatus, &rect);//擷取狀態列表單矩形大小。<br />cy = rect.bottom - rect.top;//計算狀態列表單矩形寬度。</p><p>MoveWindow (_hWndEdit, 0, 0, LOWORD(lParam), HIWORD(lParam) - cy, TRUE);<br />SendMessage(_hWndStatus,WM_SIZE,wParam,lParam);<br />return 1;<br />}</p><p>LONG<br />OnSetFocus (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />SetFocus (_hWndEdit);<br />return 1;<br />}</p><p>LONG<br />OnClose (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />if( _bNeedSave && IDCANCEL == AskAboutSave (hWnd, _szTitleName) ) return 0;<br />return DestroyWindow (hWnd);<br />}</p><p>LONG<br />OnDestroy (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />PopFontDeinitialize ();//刪除字型。<br />PostQuitMessage(0);<br />return 1;<br />}</p><p>//處理Command訊息。<br />LONG<br />OnAbout (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />DialogBox (_hInst, TEXT("AboutBox"), hWnd, AboutDlgProc);<br />return 1;<br />}</p><p>LONG<br />OnLineWrap (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />SendMessage (_hWndEdit, EM_LINEFROMCHAR, (WPARAM)1, 0);</p><p>return 1;<br />}</p><p>LONG<br />OnFileNew (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />if( _bNeedSave && IDCANCEL == AskAboutSave (hWnd, _szTitleName) )<br />return 0;</p><p>SetWindowText (_hWndEdit, TEXT("/0"));//清空標題列文本。<br />_szFileName[0] = TEXT('/0');//簡單清Null 字元串。<br />_szTitleName[0] = TEXT('/0');<br />DoCaption (hWnd, _szTitleName);<br />_bNeedSave = FALSE;</p><p>return 1;<br />}</p><p>LONG<br />OnFileOpen (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />if( _bNeedSave && IDCANCEL == AskAboutSave (hWnd, _szTitleName) )<br />return 0;</p><p>if( PopFileOpenDlg (hWnd, _szFileName, _szTitleName) )<br />{<br />if( !PopFileRead (_hWndEdit, _szFileName) )<br />{<br />OkMessage (hWnd, TEXT("不能開啟檔案 %s!"), _szTitleName);<br />_szFileName[0] = TEXT('/0');<br />_szTitleName[0] = TEXT('/0');<br />}<br />}<br />DoCaption (hWnd, _szTitleName);<br />_bNeedSave = FALSE;</p><p>return 1;<br />}</p><p>LONG<br />OnFileSave (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />if( _szFileName[0] )<br />{<br />if( PopFileWrite (_hWndEdit, _szFileName) )<br />{<br />_bNeedSave = FALSE;<br />return 1;<br />}<br />else<br />{<br />OkMessage (hWnd, TEXT("不能儲存 %s"), _szTitleName);<br />}<br />}<br />return OnFileSaveAs (hWnd, message, wParam, lParam);<br />}</p><p>LONG<br />OnFileSaveAs (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />if(PopFileSaveDlg (hWnd, _szFileName, _szTitleName))<br />{<br />DoCaption (hWnd, _szTitleName);<br />if(PopFileWrite (_hWndEdit, _szFileName))<br />{<br />_bNeedSave = FALSE;<br />return 1;<br />}<br />else<br />{<br />OkMessage (hWnd, TEXT("不能儲存 %s"), _szTitleName);<br />}<br />}<br />return 0;<br />}</p><p>LONG<br />OnEditFind (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />_hDlgModeless = PopFindDlg (hWnd);<br />return 1;<br />}</p><p>LONG<br />OnEditFindNext (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />if( _hDlgModeless != NULL )<br />{<br />return PopFindNextText (_hWndEdit);<br />}<br />return 0;<br />}</p><p>LONG<br />OnEditFindReplace (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />_hDlgModeless = PopReplaceDlg (hWnd);<br />return 1;<br />}</p><p>LONG<br />OnDataTime (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />TCHAR szBuffer[MAX_PATH];<br />SYSTEMTIME systemtime;</p><p>GetLocalTime (&systemtime);<br />wsprintf (szBuffer, TEXT("%d:%d %d-%d-%d"), systemtime.wHour,<br />systemtime.wMinute, systemtime.wYear,<br />systemtime.wMonth, systemtime.wDay);</p><p>return SendMessage (_hWndEdit, EM_REPLACESEL, TRUE, (LPARAM)szBuffer);<br />}</p><p>LONG<br />OnAppExit (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />return SendMessage (hWnd, WM_CLOSE, wParam, lParam);<br />}</p><p>LONG<br />OnFormatFont (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />if( PopFontChooseFont (hWnd) )<br />PopFontSetFont (_hWndEdit);<br />return 1;<br />}</p><p>LONG<br />OnEditUndo (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />return SendMessage (_hWndEdit, WM_UNDO, 0, 0);<br />}</p><p>LONG<br />OnEditCut (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />return SendMessage (_hWndEdit, WM_CUT, 0, 0);<br />}</p><p>LONG<br />OnEditCopy (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />return SendMessage (_hWndEdit, WM_COPY, 0, 0);<br />}</p><p>LONG<br />OnEditPaste (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />return SendMessage (_hWndEdit, WM_PASTE, 0, 0);<br />}</p><p>LONG<br />OnEditClear (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />return SendMessage (_hWndEdit, WM_CLEAR, 0, 0);<br />}</p><p>LONG<br />OnEditSelectAll (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />return SendMessage (_hWndEdit, EM_SETSEL, 0, -1);<br />}</p><p>LONG<br />OnStatic (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />return 1;<br />}</p><p>void<br />DoCaption (HWND hWnd, TCHAR *szTitleName)<br />{<br />//設定表單標題列。<br />TCHAR szCaption[64 + MAX_PATH];<br />wsprintf (szCaption, TEXT("%s - %s"), szTitleName[0]?szTitleName:UNTITLED, _szAppName);<br />SetWindowText (hWnd, szCaption);<br />}</p><p>short<br />AskAboutSave (HWND hWnd, TCHAR *szTitleName)<br />{<br />//關於儲存對話方塊。<br />TCHAR szBuffer[64 + MAX_PATH];<br />intiRetum = 0;</p><p>if(szTitleName[0] == TEXT('/0'))<br />{<br />wsprintf (szBuffer, TEXT("檔案 %s 的文字已經改變。/n想儲存檔案嗎?"), UNTITLED);<br />iRetum = MessageBox (hWnd, szBuffer, _szAppName, MB_YESNOCANCEL | MB_ICONQUESTION);<br />if(iRetum == IDYES)<br />{<br />if(!SendMessage (hWnd, WM_COMMAND, IDM_FILE_SAVE_AS, 0))<br />iRetum = IDCANCEL;<br />}<br />}<br />else<br />{<br />wsprintf (szBuffer, TEXT("檔案 %s 的文字已經改變。/n想儲存檔案嗎?"), szTitleName);<br />iRetum = MessageBox (hWnd, szBuffer, _szAppName, MB_YESNOCANCEL | MB_ICONQUESTION);<br />if(iRetum == IDYES)<br />{<br />if(!SendMessage (hWnd, WM_COMMAND, IDM_FILE_SAVE, 0))<br />iRetum = IDCANCEL;<br />}<br />}<br />return iRetum;<br />}</p><p>void<br />OkMessage (HWND hWnd, TCHAR *szMessage, TCHAR *szTitleName)<br />{<br />TCHAR szBuffer[64 + MAX_PATH];<br />wsprintf (szBuffer, szMessage, szTitleName[0]?szTitleName:UNTITLED);<br />MessageBox (hWnd, szBuffer, _szAppName, MB_OK | MB_ICONEXCLAMATION);<br />}</p><p>BOOL<br />CALLBACK<br />AboutDlgProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />switch (message)<br />{<br />case WM_INITDIALOG:<br />return TRUE;<br />case WM_CLOSE:<br />EndDialog (hDlg, 0);<br />return TRUE;<br />}<br />/*case WM_COMMAND:<br />switch (LOWORD(wParam))<br />{<br />case IDOK:<br />//case IDCANCEL:<br />EndDialog (hDlg, 0);<br />return TRUE;<br />}<br />break;*/<br />return FALSE;<br />}</p><p>BOOL<br />CreateEditText (HWND hWnd, WPARAM wParam, LPARAM lParam)<br />{<br />//建立編輯控制項。<br />_hWndEdit = CreateWindow (<br />TEXT("edit"),<br />NULL,<br />WS_CHILD | //子表單。<br />WS_VISIBLE | //顯示表單。<br />WS_VSCROLL | //垂直捲軸。<br />WS_HSCROLL | //水平捲軸。<br />ES_LEFT | //文本靠左對齊。<br />ES_AUTOHSCROLL | //自動水平滾動文本。<br />ES_AUTOVSCROLL | //自動垂直滾動文本。<br />ES_MULTILINE | //多行編輯。<br />ES_NOHIDESEL , //失去焦點時不隱藏被選中的文本。<br />0, 0, 0, 0,<br />hWnd,<br />(HMENU)ID_EDIT,<br />((LPCREATESTRUCT)lParam)->hInstance, NULL);</p><p>if(!_hWndEdit) return FALSE;</p><p>return TRUE;<br />}</p><p>BOOL<br />InitStatus(HWND hWnd)<br />{<br />RECT rect;<br />int i, parts[NUMPARTS];</p><p>GetClientRect (hWnd, &rect);</p><p>for(i=1; i<=NUMPARTS; i++)<br />parts[i-1] = rect.right / NUMPARTS * i;</p><p>_hWndStatus = CreateStatusWindow (WS_CHILD|WS_VISIBLE, NULL, hWnd, NULL);<br />if( !_hWndStatus ) return FALSE;</p><p>return SendMessage (_hWndStatus, SB_SETPARTS, (WPARAM)NUMPARTS, (LPARAM)parts);<br />}</p><p>void<br />SetStatusText (HWND hWndEdit, HWND hWndStatus)<br />{<br />//POINT point;<br />long iLineCount;<br />//long iLength;<br />long iOffset;<br />TCHAR szBuffer[MAX_LOADSTRING];<br />int iRow;</p><p>//GetCaretPos(&point);<br />//擷取當前游標在字串中的位置。<br />//iOffset = SendMessage (hWndEdit, EM_CHARFROMPOS, 0, MAKELPARAM(point.x, point.y));</p><p>//iLength = GetWindowTextLength (hWndEdit);//擷取表單文本長度(不含/0字元)。</p><p>SendMessage (hWndEdit, EM_SETSEL, (WPARAM)0, (LPARAM)-1);//文本全部選中。</p><p>iOffset = SendMessage (hWndEdit, EM_GETSEL, (WPARAM)0, (WPARAM)0);</p><p>iLineCount = SendMessage (hWndEdit, EM_LINEFROMCHAR, (WPARAM)iOffset, (WPARAM)NULL); </p><p>iRow = SendMessage (hWndEdit, EM_LINELENGTH, iLineCount, 0);<br />/*<br />注意:這裡需要擷取插入符所在的行的字元數。這裡暫時沒有處理。<br />*/<br />wsprintf (szBuffer, TEXT("Ln: %d Col:%d, %d"), iLineCount, iOffset, iRow);</p><p>SendMessage (hWndStatus, SB_SETTEXT, 1, (LPARAM)szBuffer);<br />}</p><p>void<br />MessageOperationEdit (HWND hWndEdit, WPARAM wParam, BOOL *bNeedSave)<br />{<br />/*<br />處理Edit控制項訊息函數。<br />BOOL *bNeedSave 文本需要儲存標記。<br />*/<br />switch(HIWORD(wParam))<br />{<br />case EN_UPDATE://編輯控制的內容已經改變。<br />*bNeedSave = TRUE;<br />break;<br />case EN_ERRSPACE://編輯控制運行已經超出中間。<br />case EN_MAXTEXT://編輯控制在插入時運行超出中間。<br />MessageBox (hWndEdit, TEXT("編輯輸入已經超出空間!"),<br />_szAppName, MB_OK | MB_ICONSTOP);<br />break;<br />}<br />}

 

完整的源碼下載:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.