版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、1,第10章 在MFC中創(chuàng)建應用程序的資源,2,在Windows的可執(zhí)行文件中,資源是獨立于代碼的,使用單獨的Resource Compiler進行編譯,并嵌入到可執(zhí)行文件中。 在編程過程中,代碼是可復用的,資源也是可復用的,通過資源的“導入”和“導出”功能來實現(xiàn)資源的可復用。 程序的國際化,也是通過資源來實現(xiàn)的。,3,10.1獲取資源的一個樣例,,,查看Windows(98/2000)系統(tǒng)中自帶的紙牌游戲中的圖片
2、資源: c:\Windows\cards.dll 或 c:\WINNT\System32,4,10.2 資源的應用,5,10.2.1 菜單資源的使用,菜單是圖形用戶界面的重要組成部分,菜單可以使用戶直觀方便地操作程序,為用戶提供各種功能。 在標準的Windows應用程序中,菜單通常有三類:系統(tǒng)菜單、程序主菜單和快捷菜單。經(jīng)常使用程序主菜單。主菜單如下圖所示:,6,創(chuàng)建一個“計算”菜單,利用MFC創(chuàng)建菜單資源。(1)
3、創(chuàng)建一個基于單文檔的應用程序(2)選擇Resource View | Menu|IDR_MAINFRAME,通過可視化編輯來創(chuàng)建菜單資源。,7,Hello World!,ID_OPER_REDID_OPER_GREENID_OPER_BLUE,ID_OPER_SHOW,【例10-1】創(chuàng)建一個基于單文檔結(jié)構(gòu)的應用程序,在視圖中顯示一行字符串“Hello World!”,通過建立包含“顯示”和“顏色選擇”兩個菜單項的“操作”菜單來
4、控制字符串,菜單項“顯示”用以控制字符串的顯示與否,菜單項“顏色選擇”中包含一個級連菜單,內(nèi)容為“紅”、“綠”和“藍”三個菜單項。,8,在My_ResView.h中的 class CMy_ResView : public Cview中的public處加入如下聲明: COLORREF m_nColors[3]; //用戶可選顏色數(shù)組DWORDm_nColorIndex; // 當前所選顏色索引CStr
5、ingm_strShow; // 顯示的內(nèi)容 BOOL m_bShow; // 是否顯示,9,在CMy_ResView::CMy_ResView()中初始化成員變量:m_nColors[0] = RGB(255,0,0);m_nColors[1] = RGB(0,255,0);m_nColors[2] = RGB(0,0,255);m_nColorIndex = 0;m_
6、strShow = "Hello World!";m_bShow = TRUE;,10,在void CMy_ResView::OnDraw(CDC* pDC)中加入如下代碼繪制字符串: if(m_bShow){pDC->SetTextColor(m_nColors[m_nColorIndex]); // 設置輸出字符串顏色pDC->TextOut(100,100,m_strSho
7、w); // 輸出字符串},11,若編譯運行程序,可看到程序輸出一行紅色的字符串,但顏色設置菜單項還沒有起作用 下面將介紹如何通過菜單項來控制程序,在介紹菜單項的響應時,必須先了解幾個消息響應機制:COMMAND消息的響應UPDATE_COMMAND_UI消息的響應ON_COMMAND_RANGE對COMMAND消息的響應ON_UPDATE_COMMAND_UI_RANGE 對UPDATE_COMMAN
8、D_UI消息的響應,12,(1) COMMAND消息的響應,添加了對COMMAND消息的響應之后, My_ResView.h發(fā)生如下變化: // Generated message map functions protected: //{{AFX_MSG(CMy_ResView) afx_msg void OnOperShow(); //ID_OPER_SHOW的響應函數(shù)
9、 //}}AFX_MSG,13,14,在My_ResView.cpp文件中,讀者會看到ID_OPER_SHOW對應的COMMAND消息的綁定,代碼如下 :BEGIN_MESSAGE_MAP(CMy_ResView, CView)//{{AFX_MSG_MAP(CMy_ResView)ON_COMMAND(ID_OPER_SHOW, OnOperShow)//}}AFX_MSG_MAP// Standard prin
10、ting commandsON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)END_MESSAGE
11、_MAP(),15,在My_ResView.cpp文件的最后加入如下代碼: void CMy_ResView::OnOperShow() { m_bShow = !m_bShow; Invalidate();// 強制程序重新窗口},重新編譯運行程序,可看到“顯示”菜單項工作正常,16,(2) UPDATE_COMMAND_UI消息的響應,UPDATE_COMMAND_UI消息是在窗口將要繪制菜單項的
12、時候產(chǎn)生,上例中,僅僅只是使用“顯示”菜單項來控制是否顯示似乎還不夠,如果“顯示”菜單項能夠配合主程序體現(xiàn)出當前是否顯示的狀態(tài)可能會更好一些。就像一個文本編輯軟件,菜單上是“10號字”、“12號字”的功能,如果不在菜單上標識出來,那么使用者可能就搞不清當前的字是多大的。,17,為ID_OPER_SHOW添加UPDATE_COMMAND_UI消息。在自動生成消息處理函數(shù)中加入如下代碼:void CMy_ResView::OnUpdate
13、OperShow(CCmdUI* pCmdUI){pCmdUI->SetCheck(m_bShow);} 此時可看到隨著m_bShow的值的改變,顯示菜單項的狀態(tài)與實際是否顯示字符串的狀態(tài)一致了,通過菜單項前面的“√”標記來體現(xiàn)。,18,,CCmdUI類常用的方法,19,(3)ON_COMMAND_RANGE對COMMAND消息的響應,ON_COMMAND_RANGE為處理具有連續(xù)Object ID的菜單項提供了
14、方便的途徑。 前面只響應了三種顏色操作,若有100種顏色可供選擇,是否逐個定義其響應函數(shù)?顯然工作量很大,我們可以使用ON_COMMAND_RANGE。 由于ClassWizard不支持ON_COMMAND_RANGE消息的自動映射,只能手工添加消息的處理。,20,在My_ResView.h中聲明消息的處理函數(shù)//{{AFX_MSG(CMy_ResView) afx_msg void OnOperSho
15、w(); afx_msg void OnUpdateOperShow(CCmdUI* pCmdUI); afx_msg void OnOperColorChange(WORD nID);//}}AFX_MSG,21,在My_ResView.cpp的開頭部分加入如下斜體標識的代碼,完成消息映射BEGIN_MESSAGE_MAP(CMy_ResView, CView)//{{……ON_COMMAND_RANGE(
16、ID_OPER_RED,// ID范圍的最小值ID_OPER_BLUE,// ID范圍的最大值OnOperColorChange)//消息處理函數(shù)END_MESSAGE_MAP(),22,在My_ResView.cpp的最后加入消息處理函數(shù):void CMy_ResView::OnOperColorChange(WORD nID){m_nColorIndex = nID-ID_OPER_RED;In
17、validate(); }運行程序,可以通過菜單項來改變顏色了,23,(4) ON_UPDATE_COMMAND_UI_RANGE,ON_UPDATE_COMMAND_UI_RANGE與ON_UPDATE_COMMAND_UI的關系類似和ON_COMMAND_RANGE與ON_COMMAND的關系 下面仿照手工加入ON_COMMAND_RANGE過程加入ON_UPDATE_COMMAND_UI_RANGE宏。在My_Re
18、sView.h中加入如下代碼:afx_msg void OnUpdateOperColorChange(CCmdUI * pCmdUI);,24,在My_ResView.cpp中加入如下代碼:ON_UPDATE_COMMAND_UI_RANGE(ID_OPER_RED,ID_OPER_BLUE,OnUpdateOperColorChange)…void CMy_ResView::OnUpdateOperColorChange(C
19、CmdUI * pCmdUI){ pCmdUI->SetRadio(m_nColorIndex==(pCmdUI->m_nID - ID_OPER_RED));} 由于CCmdUI類的成員m_nID就是調(diào)用OnUpdateOperColorChange時當前的菜單項ID,因此OnUpdateOperColorChange函數(shù)沒有nID這個參數(shù),25,10.2.2快捷菜單的創(chuàng)建及其應用,【例10-2】在
20、【例10-1】的基礎上增加快捷菜單,實現(xiàn)“操作”菜單的功能,1. 創(chuàng)建菜單資源:在ResourceView菜單中右擊Menu,選擇Insert Menu,資源命名為IDR_MENU_POP,26,在My_ResView.h中聲明快捷菜單中對應的變量。 CMenu m_PopMenu;// Pop-up快捷菜單 CMenu* m_pPop;// Pop-up快捷子菜單 ……afx_msg
21、 void OnRButtonDown(UINT nFlags, CPoint point);,27,在My_ResView.cpp中添加如下代碼: ON_COMMAND(ID_POP_SHOW, OnOperShow) //消息響應 … CMy_ResView::CMy_ResView(){ … m_PopMenu.LoadMenu(IDR_MENU
22、_POP); // 創(chuàng)建并加載菜單資源},28,CMy_ResView::~CMy_ResView(){m_PopMenu.DestroyMenu(); // 釋放菜單資源},29,void CMy_ResView::OnRButtonDown(UINT nFlags, CPoint point) {m_pPop=m_PopMenu.GetSubMenu(0); //獲得第一個子菜單 UINT
23、nCheck = m_bShow?MF_CHECKED:MF_UNCHECKED; // 更新【Show】的check狀態(tài) m_pPop->CheckMenuItem(ID_POP_SHOW,MF_BYCOMMAND|nCheck);ClientToScreen(&point); //將坐標由客戶坐標轉(zhuǎn)化為屏幕坐標m_pPop->TrackPopupMenu(TPM_LEFTA
24、LIGN,point.x,point.y,this);// 顯示Pop-up菜單CView::OnRButtonDown(nFlags, point);},30,10.2.3加速鍵資源的創(chuàng)建及其使用,【例10-3】在【例10-2】的基礎上添加Ctrl+W來觸發(fā)“顯示”菜單項的功能。,31,10.2.4工具條資源的創(chuàng)建及其使用,,1 、工具條類的層次位置及其常用方法,在Windows應用程序中,工具條可以看作是圖形化的菜
25、單,是一種更快捷、更有效、更直觀的人機交互方式。,工具條由CWnd類派生的,它們都連接到一個Windows應用程序窗口。因此,CWnd的所有功能如創(chuàng)建、移動、顯示和隱藏窗口等在用控制條工作時都是可用的。,32,CToolBar類提供了許多工具條的處理方法,這些方法分別是構(gòu)造方法、工具條按鈕的操作方法和虛擬方法。 構(gòu)造方法是用來建立Windows工具條CToolBar對象并在運行時將它們附加到框架窗口上,它的構(gòu)造方法見下表:,3
26、3,CToolBar的構(gòu)造方法,Create(): 創(chuàng)建一個工具條并把它附加到CToolBar對象上CreateEx():創(chuàng)建一個定義了邊界的工具條并附加到 CToolBar對象上SetSizes(): 設置按鈕及位圖大小SetHeight(): 設置工具條的高度LoadToolBar():裝載工具條資源LoadBitmap(): 裝載包含工具按鈕圖像的
27、位圖SetBitmap(): 設置位圖圖像SetButtons(): 設置按鈕并使每個按鈕與位圖圖像相關,34,工具條按鈕的操作方法用來處理某一工具條按鈕的,方法見表:,,35,在MFC中使用CToolBarCtrl類來控制工具條, CToolBarCtrl類的主要成員函數(shù)見下表:,36,2 、 加入用戶自定義的工具條,(1)增加工具條資源 Insert?Resource ?Toolbar ? New插入新的工具
28、條資源。(2)將工具條添加到窗口中 添加后,需把工具條的對象加入到應用程序框架窗口中(CMainFrame)。在應用程序的CMainFrame類中加入工具條對象m_wndToolBar。protected: CToolBar m_wndToolBar; //自己定義的工具條,37,在框架窗口類的OnCreate()函數(shù)中調(diào)用工具條類的Create()或CreateEx()成員函數(shù)創(chuàng)建該工具條,并調(diào)用LoadTo
29、olBar()成員函數(shù)將工具條對象和前面創(chuàng)建的工具條資源連接在一起。 if(!m_wndToolBar.Create(this, WS_VISIBLE|CBRS_TOP) ||!m_wndToolBar.LoadToolBar(IDR_TOOLBAR))//引入資源IDR_TOOLBAR{TRACE0("Failed to create toolba
30、r\n");return -1; // fail to create},38,39,3 、對工具條進行操作 創(chuàng)建完成工具條后,可調(diào)用工具條類中的成員函數(shù)對工具條進行操作,例如設定工具條風格,在窗口中移動工具條,控制工具條的顯隱等。 用下述代碼實現(xiàn),當鼠標光標在按鈕上暫停時,顯示工具提示和命令描述,并設定工具條的大小是可變的。m_wndToolBar.SetBarStyle(
31、 CBRS_TOOLTIPS |CBRS_FLYBY | CBRS_SIZE_DYNAMIC);,40,可在程序中設置允許用戶在程序運行中在框架窗口內(nèi)移動工具條。這是通過調(diào)用CToolBar::EnableDocking和CFrame::EnableDocking來實現(xiàn)的。二函數(shù)原型均如下: void EnableDocking( DWORD dwStyle )其中,參數(shù)dwSty
32、le為工具條風格,其取值見下表:,41,42,下面代碼段是實現(xiàn)工具條移動的常用代碼:m_wndToolBar.EnableDocking(CBS_ALIGN_ANY);EnableDocking(CBS_ALIGN_ANY); 工具條的顯示或隱藏可以通過應用程序框架CMainFrame的成員函數(shù)ShowControlBar()來實現(xiàn)。,43,【例10-4】在【例10-3】中添加工具條,工具條中包含四個按鈕,分別對應菜單的“
33、顯示”、“紅色”、“綠色”和“藍色”菜單項。該工具條可以在窗口中任意位置??浚斒髽送A粼诠ぞ邨l按鈕上時,將顯示該按鈕的功能。,44,在ResourceView中加入工具條資源 IDR_TOOLBAR_NEW。繪制四個按鈕并設置相應ID。 在MainFrm.h中添加如下代碼,聲明一個CToolBar變量 CToolBar m_wndToolBarNew;,在程序中加入替她工具條:,45,在
34、MainFrm.cpp文件的 Int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 函數(shù)中添加如下代碼:if (!m_wndToolBarNew.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS |
35、 CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||!m_wndToolBarNew.LoadToolBar(IDR_TOOLBAR_NEW)){TRACE0("Failed to create toolbar\n");return -1; // fail to create },46,為了使新增的工具條可以在窗口中自由停靠,在OnCreate函數(shù)中,
36、還要增加如下代碼:m_wndToolBarNew.EnableDocking(CBRS_ALIGN_ANY); //工具條可以在父窗口內(nèi)任何一邊??縀nableDocking(CBRS_ALIGN_ANY);// 父窗口允許子工具條窗口在任何一邊停靠DockControlBar(&m_wndToolBarNew);// 父窗口內(nèi)按照前面指定的風格??吭摴ぞ邨l,47,10.2.5 圖標資源的創(chuàng)建及其使用
37、,每個Windows應用程序在資源管理器中都有自己的圖標,這個圖標就是ICON資源。,【例10-5】在【例10-4】的基礎上通過修改光標資源,使得執(zhí)行程序的圖標變?yōu)槿鐖D所示的樣子,48,ResourceView?Icon?IDR_MAINFRAME,就會看到圖標編輯器,在這里可以選擇圖標的尺寸,默認的是16×16和32×32。 16×16的圖標用于程序運行時左上角圖標、任務條圖標、資源管理器的列表和詳
38、細信息模式; 32×32的圖標用于程序運行時默認對話框圖標、資源管理器圖標模式; 48×48的圖標用于資源管理器的平鋪和縮略圖模式。,49,單擊New Device Image按鈕對光標資源進行修改,50,10.2.6 字符串資源的使用,字符串資源最主要的用途就是用于程序的多語言版本。如果要想動態(tài)切換界面語言,使用字符串資源是很好的選擇。 在MFC中,可以通過CString類的LoadString方
39、法來從資源載入字符串。 具體操作是打開ResourceView?String Table,在表中的空白高亮處雙擊,在彈出的String Properties對話框中的ID編輯框中輸入IDS_STRING_HELLO,Caption編輯框中輸入“Hello VC!”。,51,在My_ResView.cpp文件的構(gòu)造函數(shù)中,將原來的 m_strShow = "Hello World!"
40、; 改為:m_strShow.LoadString(IDS_STRING_HELLO); 這樣我們的程序的輸出就變?yōu)椤癏ello VC!”了,使用字符串資源的好處就是不需要在整個程序中去尋找某個字符串,如果某些字符串可能在將來會發(fā)生變更,那么最好將它寫在字符串資源中。,52,10.2.7 對話框資源的創(chuàng)建及其應用,【例10-6】在上例的基礎上編寫一個對話框用于接收用戶輸入,然后用這個輸入來替換主程序原來顯示的字符串。,
41、53,(1)對話框控件的建立,類型 ID CaptionStaticText IDC_STATIC 請輸入新的字符Edit Box IDC_EDIT_INPUT Button IDOK OKButton
42、 IDCANCEL Cancel,54,(2)生成一個對話框類 在創(chuàng)建完對話框資源之后,需要生成一個相關的對話框類。View?ClassWizard ?Create a New Class ? OK,在Name中填入“CInputDlg”即可。,55,56,將對話框上的IDC_EDIT_INPUT控件與一個CString類型的m_strInput變量綁定,建立一種映射關系。
43、 在MFC ClassWizard 對話框中的MemberVariable頁中雙擊IDC_EDIT_INPUT,在彈出的Add Member variable name編輯框中輸入“m_strInput”,其余的保持不變,這樣就為IDC_EDIT_INPUT添加了一個DDX(Dialog Data eXchange)變量。,57,上面的操作使MFC在幕后作了些什么? 在InputDlg.h文件中,MFC加入了如下代碼:
44、;// Dialog Data//{{AFX_DATA(CInputDlg)enum { IDD = IDD_DIALOG_NEW };CStringm_strInput;//}}AFX_DATA,58,在InputDlg.cpp的構(gòu)造函數(shù)中,MFC加入了如下代碼: //{{AFX_DATA_INIT(CInputDlg) m_strInput = _T(""); //}}AF
45、X_DATA_INIT,對m_strInput的初始化,在InputDlg.cpp文件的DoDataExchange函數(shù)中,MFC加入了如下代碼: //{{AFX_DATA_MAP(CInputDlg) DDX_Text(pDX, IDC_EDIT_INPUT, m_strInput);//}}AFX_DATA_MAP 在函數(shù)DDX_Text調(diào)用中,完成了控件與變量之間的數(shù)據(jù)交換。,59,下面要在CMy_ResVie
46、w中使用新創(chuàng)建的對話框。首先為“操作”菜單增加菜單項“修改字符串”,其ID為ID_OPER_STRING。增加COMMAND消息響應函數(shù)OnOperString。然后在My_ResView.cpp文件頭部include部分最后加入: #include "InputDlg.h",(3)使用對話框類,60,在OnOperString中加入如下代碼:void CMy_ResView::OnOperString()
47、{ CInputDlg dlgInput; // 聲明對話框變量 if(dlgInput.DoModal() == IDOK) // 如果用戶點擊OK按鈕 { m_strShow = dlgInput.m_strInput;// 更改字符串Invalidate(); // 強制重繪 } },61
48、,10.2.8位圖資源的創(chuàng)建及其應用,標準控件比較單調(diào),若能通過一些精美的圖片來點綴,就活潑了,這個問題,可以選擇位圖資源來實現(xiàn)。 位圖是一種數(shù)字化的圖形表示形式,基本數(shù)據(jù)結(jié)構(gòu)是象素,一個像素表示一個離散點的顏色值。 常見位圖有2色、4色、16色、256色、16位、24位。其中VC 6的資源編輯器只支持256色以下(包括256色)的位圖的編輯,而最新的VC7已經(jīng)支持24位真彩位圖的編輯了。保存在文件中的位圖可以看
49、作是設備無關的,文件本身的數(shù)據(jù)用來描述位圖的內(nèi)容。,62,【例10-7】在【例10-6】的基礎上顯示兩幅圖片,一幅是256色,另一幅是24位真彩,兩幅圖片都是通過資源來顯示,63,(1)將一副圖片分別保存為256色位圖或24位圖。 單擊Resource View|My_Res Resource,單擊鼠標右鍵,選擇Import,在彈出的對話框中的Open as中選擇Auto,文件類型選擇All Files,選擇一個256色畏途,并定義
50、ID為ID_BITMAP_256,然后以同樣的方式定義一個24位位圖,定義其ID為ID_BITMAP_24bit。,64,在CMy_ResView.cpp的OnDraw函數(shù)中加入如下代碼:CDC dcMemory; // 創(chuàng)建內(nèi)存緩沖DCdcMemory.CreateCompatibleDC(pDC);CBitmap bmp1; // 加載256位圖
51、bmp1.LoadBitmap(IDB_BITMAP_256);BITMAP bmpInfo1;bmp1.GetBitmap(&bmpInfo1); // 獲得位圖的尺寸CBitmap* pOldBitmap = dcMemory.SelectObject(&bmp1); // 選擇位圖到內(nèi)存緩沖設備中pDC->BitBlt(200,10,bmpInfo1.bmWidth,bmpInf
52、o1.bmHeight,&dcMemory,0,0,SRCCOPY); // 繪制到屏幕,65,CBitmap bmp2; bmp2.LoadBitmap(IDB_BITMAP_24bit); // 加載24位位圖BITMAP bmpInfo2;bmp2.GetBitmap(&bmpInfo2);dcMemory.SelectObject(&bmp2);pDC->BitBlt(400,1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- mfc基本應用程序的建立
- 2創(chuàng)建應用程序的過程
- 第3章 mfc基本應用程序的建立
- 第17章 創(chuàng)建windows應用程序
- vs2010和mfc編程入門之2(利用mfc向?qū)蓡挝臋n應用程序框架)
- vs2010和mfc編程入門之2(利用mfc向?qū)蓡挝臋n應用程序框架)
- Web應用程序的并發(fā)控制以及在ERP中的應用.pdf
- 語義技術在基于網(wǎng)絡應用程序中的研究.pdf
- android應用程序基礎
- 應用程序基礎——論文
- 分布式應用程序和AJAX技術在WebGIS設計中的應用.pdf
- 修改應用程序外觀
- 替換 access 2010 應用程序中的日歷控件
- PRISM框架及其在企業(yè)級應用程序設計中的應用.pdf
- 驅(qū)動程序與應用程序的接口
- 創(chuàng)建一套用于可視化作圖的應用程序.pdf
- windowsphone的應用程序認證要求
- 應用程序調(diào)用驅(qū)動的方式
- JSP應用程序中安全問題的研究.pdf
- 有限資源下的看板方法手機應用程序敏捷開發(fā).pdf
評論
0/150
提交評論