什么是網(wǎng)絡(luò)營銷行為分析滎陽seo推廣
目錄
一.創(chuàng)建單文檔項目
二.消息映射機(jī)制
三.WM_PAINT消息觸發(fā)
四.CVIEW類
五.設(shè)備上下文
六.資源類和資源的關(guān)系
七.畫線,矩形
八.畫布
九.畫筆
十.畫刷
十一.利用TRACE打印日志
十二.文本編程
十三.ID號
十四.菜單欄
十五.菜單命令路由
十六.工具欄
一.創(chuàng)建單文檔項目
應(yīng)用程序選擇
文檔模板屬性
用戶界面功能
高級功能
生成的類,會生成 APP,VIEW,DOC,MainFrame
因為這兩個項目在同一個解決方案下面,所以把MFCPaint設(shè)置為啟動項目
編譯MFCPaint項目
二.消息映射機(jī)制
在 MFCPaintView.h 文件中記錄了 MFCPaintView 類的原型,在 MFCPaintView.cpp 中記錄 MFCPaintView 類的實現(xiàn),虛函數(shù)的實現(xiàn),消息映射機(jī)制。源碼如下:
BEGIN_MESSAGE_MAP(CMFCPaintView, CView)ON_WM_CONTEXTMENU()ON_WM_RBUTTONUP()ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_WM_MOUSEMOVE()ON_WM_CREATE()ON_WM_CHAR()
END_MESSAGE_MAP()
一些消息比如 WM_PAINT這樣的消息又框架封裝,自動處理這個消息映射到OnDraw函數(shù)處理,這個函數(shù)在CView中是虛函數(shù),MFCPaintView中仍然是虛函數(shù),但在MFCPaintView實例化時進(jìn)行了實現(xiàn)。還有一些消息的處理需要依賴消息映射表來處理
在 BEGIN_MESSAGE_MAP 宏中,CMFCPaintView 是接收消息的類,而 CView 則是基類。
-
CMFCPaintView:表示接收消息的類,也稱為派生類。在這個例子中,CMFCPaintView 是自定義的視圖類,是從 MFC 框架提供的 CView 類派生而來的。CMFCPaintView 類擴(kuò)展了 CView 類的功能,并可以添加自定義的成員函數(shù)、變量和邏輯。
-
CView:表示基類,也稱為父類或者超類。在這個例子中,CView 是 MFC 框架中的一個類,用于實現(xiàn)視圖。它提供了一些基本的功能和接口,包括繪圖、響應(yīng)用戶輸入、窗口管理等。CMFCPaintView 類通過派生自 CView 類,繼承了 CView 類的功能,并可以在派生類中進(jìn)行擴(kuò)展和自定義。
通過將 CMFCPaintView 作為接收消息的類,我們可以在 CMFCPaintView 類中定義消息處理函數(shù),并將它們與相應(yīng)的消息進(jìn)行關(guān)聯(lián)。當(dāng)窗口接收到對應(yīng)的消息時,框架會自動調(diào)用相應(yīng)的處理函數(shù)來處理該消息。
而 CView 則是作為基類,在宏的第二個參數(shù)中提供給 BEGIN_MESSAGE_MAP,它是處理消息的起點,當(dāng)消息映射表中的消息沒有匹配到具體的處理函數(shù)時,框架會繼續(xù)向基類查找,直到找到匹配的處理函數(shù)或者到達(dá)消息映射表的末尾。這樣的設(shè)計使得消息處理可以在派生類和基類中靈活地進(jìn)行組織和劃分。
給消息映射表添加映射,MFCPaintView右鍵,選擇屬性,選擇消息,選擇想要添加的消息即可
比如添加 WM_CHAR消息處理,就會在MFCPaintView中添加一個函數(shù)
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg
是 MFC 框架中的一個宏,用于聲明一個消息處理函數(shù)。在 MFC 中,消息處理函數(shù)需要使用 afx_msg
宏進(jìn)行聲明,以便正確連接到消息映射機(jī)制。
在MFCPaintView中就會添加一個方法。
三.WM_PAINT消息觸發(fā)
WM_PAINT 消息是 Windows 操作系統(tǒng)發(fā)送給窗口的一個重要消息,它用于通知窗口需要進(jìn)行繪圖操作。當(dāng)窗口的客戶區(qū)域(即窗口內(nèi)部可以進(jìn)行繪圖操作的區(qū)域)需要刷新或重繪時,Windows 就會發(fā)送 WM_PAINT 消息給窗口,以便窗口進(jìn)行相應(yīng)的繪圖操作。
WM_PAINT 消息的觸發(fā)通常由以下幾種情況引起:
-
窗口首次創(chuàng)建:當(dāng)一個窗口首次被創(chuàng)建時,Windows 會自動發(fā)送 WM_PAINT 消息給窗口,以便對窗口進(jìn)行初始的繪圖操作。
-
窗口被激活:當(dāng)一個窗口從非激活狀態(tài)轉(zhuǎn)換為激活狀態(tài)時,Windows 會發(fā)送 WM_PAINT 消息給窗口,以便窗口可以重新繪制自己。
-
窗口尺寸變化:當(dāng)窗口的大小發(fā)生變化時,Windows 會發(fā)送 WM_PAINT 消息給窗口,以便窗口可以根據(jù)新的大小來重新繪制自己。
-
窗口重疊變化:當(dāng)窗口與其他窗口發(fā)生重疊變化時,或者其他窗口遮蓋了部分窗口的客戶區(qū)域時,Windows 會發(fā)送 WM_PAINT 消息給被遮蓋的窗口,以便窗口可以重新繪制被遮蓋的區(qū)域。
-
窗口被顯式地要求重繪:開發(fā)人員可以通過調(diào)用
InvalidateRect
或InvalidateRgn
函數(shù)來顯式地要求窗口進(jìn)行重繪操作。當(dāng)這些函數(shù)被調(diào)用時,Windows 會發(fā)送 WM_PAINT 消息給窗口。
當(dāng)窗口接收到 WM_PAINT 消息時,通常會執(zhí)行以下操作:
-
開始繪圖操作:通過調(diào)用
BeginPaint
函數(shù)來獲取一個設(shè)備上下文(DC),以便進(jìn)行后續(xù)的繪圖操作。 -
繪制內(nèi)容:使用獲取到的設(shè)備上下文進(jìn)行繪圖操作,包括繪制圖形、文本、圖像等。
-
結(jié)束繪圖操作:通過調(diào)用
EndPaint
函數(shù)來釋放設(shè)備上下文,并通知系統(tǒng)繪圖操作已完成。
在MFC消息映射表沒有WM_PAINT的映射,WM_PAINT是如何調(diào)用OnDraw()函數(shù)處理?
在 MFC 中,如果消息映射表中沒有 WM_PAINT 的映射,框架會自動調(diào)用 CWnd::DefWindowProc 函數(shù)來處理該消息,進(jìn)而調(diào)用 OnPaint 函數(shù)來進(jìn)行繪圖操作。所以,即使沒有顯式地映射 WM_PAINT 消息,我們也可以在 OnDraw 函數(shù)中實現(xiàn)窗口繪圖。
四.CVIEW類
CView 類是 MFC(Microsoft Foundation Classes)框架中的一個基類,用于實現(xiàn)視圖(View)的功能。在 MFC 應(yīng)用程序中,視圖通常用于顯示和處理用戶界面的可視化部分。
CView 類是從 CWnd 類派生而來的,因此它繼承了 CWnd 類的一些基本窗口功能。CView 類主要用于以下幾個方面的功能:
-
繪圖:CView 類提供了 OnDraw 函數(shù)用于繪制視圖內(nèi)容。開發(fā)人員可以重寫該函數(shù),在其中使用 GDI(圖形設(shè)備接口)繪制圖形、文本、位圖等。繪圖操作可以響應(yīng)窗口消息(如 WM_PAINT),也可以通過代碼觸發(fā)。
-
響應(yīng)用戶輸入:CView 類可以處理鼠標(biāo)、鍵盤等用戶輸入消息。開發(fā)人員可以重寫 OnMouse...、OnKey... 等函數(shù)來響應(yīng)相應(yīng)的用戶輸入事件,并執(zhí)行相應(yīng)的操作。
-
布局管理:CView 類可以用于管理視圖的布局。開發(fā)人員可以通過調(diào)整控件的位置、大小、對齊方式等屬性,來控制視圖元素的布局和外觀。
-
與文檔類的交互:CView 類通常與文檔類(CDocument)緊密相關(guān)。視圖類負(fù)責(zé)將文檔類中的數(shù)據(jù)呈現(xiàn)給用戶,并將用戶的修改反饋給文檔類。開發(fā)人員可以通過重寫 OnUpdate 函數(shù),實現(xiàn)視圖的數(shù)據(jù)更新和刷新。
-
與框架交互:CView 類還可以與 MFC 框架中的其他類進(jìn)行交互,如與窗口類(CFrameWnd)進(jìn)行通信、與菜單類(CMenu)進(jìn)行菜單操作、與工具欄類(CToolBar)進(jìn)行工具條操作等。
也就是說CVIEW主要控制程序的視圖元素。使用VS2019時就會自動的生成一個類繼承自這個類,我們在編寫程序時,只需要注意處理消息即可,在類中對消息處理的實現(xiàn),最后往往會再調(diào)用一個CVIEW中的消息對應(yīng)處理方法。因為系統(tǒng)往往只會給一次消息,對這個消息可以有多個類進(jìn)行處理,而且處理都不一樣,這就是再調(diào)用一次的作用。
五.設(shè)備上下文
設(shè)備上下文(Device Context,簡稱 DC)是一個抽象概念,用于表示用于繪圖和輸出的設(shè)備環(huán)境。設(shè)備上下文封裝了與設(shè)備相關(guān)的繪圖表面、畫筆、字體、剪輯區(qū)域等信息,提供了一組函數(shù)和屬性,用于在特定設(shè)備上進(jìn)行繪圖操作。
設(shè)備上下文是由操作系統(tǒng)提供的,它可以代表不同類型的設(shè)備,如顯示器、打印機(jī)、屏幕緩沖區(qū)等。每個設(shè)備上下文都有自己的屬性和功能,可以通過設(shè)備上下文進(jìn)行繪制、填充、剪輯、文本輸出等操作。
在 Windows 應(yīng)用程序開發(fā)中,設(shè)備上下文通常用于使用 GDI(圖形設(shè)備接口)進(jìn)行繪圖。GDI 提供了一組函數(shù)和數(shù)據(jù)結(jié)構(gòu),用于在設(shè)備上進(jìn)行繪圖操作。設(shè)備上下文是 GDI 中的核心概念,通過設(shè)備上下文可以獲取和操作設(shè)備相關(guān)的繪圖資源,如畫筆、畫刷、字體等。
在 MFC(Microsoft Foundation Classes)框架中,設(shè)備上下文由 CDC(CDC 類型的指針)表示。CDC 類封裝了設(shè)備上下文操作的功能,例如繪圖、調(diào)色板管理、文本輸出等。通過獲取設(shè)備上下文指針,可以使用 CDC 類的成員函數(shù)來進(jìn)行相應(yīng)的繪圖操作。
設(shè)備上下文的使用是有一定規(guī)則的,例如在使用完設(shè)備上下文后,需要釋放相關(guān)資源,避免資源泄露。通常在獲取設(shè)備上下文之后,需要調(diào)用 ReleaseDC() 或者 DeleteDC() 函數(shù)來釋放設(shè)備上下文。
獲取設(shè)備上下文
void CMyView::OnDraw(CDC* pDC)
{// 獲取設(shè)備上下文指針CDC* pDC = GetDC();// 使用設(shè)備上下文進(jìn)行繪圖操作// ...// 釋放設(shè)備上下文資源ReleaseDC(pDC);
}
CDC類中提供了很多系統(tǒng)調(diào)用,如獲取資源,設(shè)置資源等等。
六.資源類和資源的關(guān)系
資源則是具體的實際資源,可以是文件、圖像、音頻、數(shù)據(jù)庫連接等等,它是應(yīng)用程序所需要的資料或者工具。資源可以以不同的形式存在,例如在內(nèi)存中、硬盤上、網(wǎng)絡(luò)上等。它們可以被資源類所管理和操作。
資源類通過對資源進(jìn)行封裝和抽象,提供了一種統(tǒng)一的接口和管理方式,使得應(yīng)用程序能夠更方便地訪問和利用資源。資源類可以對資源進(jìn)行創(chuàng)建、加載、釋放、更新等操作,同時還可以提供一些額外的功能,如緩存、安全性控制、多線程支持等。
資源類就像是對資源所用的一些屬性等信息進(jìn)行抽象,可以提供對類實例化設(shè)置屬性來設(shè)置資源的屬性,再通過系統(tǒng)調(diào)用來使用資源,釋放資源。
七.畫線,矩形
想要實現(xiàn)畫線功能,需要捕捉到鼠標(biāo)左鍵摁下,鼠標(biāo)左鍵抬起的位置,就可以繪制處一條直線。
還可以實現(xiàn)更復(fù)雜的功能,當(dāng)鼠標(biāo)左鍵摁下后,不抬起,鼠標(biāo)移動,同時會劃出一條線跟隨鼠標(biāo)移動。View相關(guān)的類是控制界面的繪制,需要在其中寫代碼
在 MFCPaintView.h 文件中,是MFCPaintView這個類,給該類加上幾個屬性
CPoint m_start;// 起始點,用于繪制線條的CPoint m_cur; // 當(dāng)前點,用于繪制線條CPoint m_ptStop; // 終止點,用于繪制線條BOOL m_bStatus; // 繪制狀態(tài),用于繪制線條CString m_strText; // 用戶輸入的字符串
有意思的時,CPoint這個類是鼠標(biāo)的坐標(biāo),繼承自一個結(jié)構(gòu)體
typedef struct tagPOINT
{LONG x;LONG y;
} POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;
處理鼠標(biāo)摁下消息,記錄線的起始點;處理鼠標(biāo)移動的消息,記錄一下臨時值,線的臨時終點;處理鼠標(biāo)抬起的消息,記錄線的終點;
現(xiàn)在討論一下實現(xiàn)的思路:
- OnLButtonDown()處理鼠標(biāo)左鍵摁下,記錄起始點;同時設(shè)置狀態(tài)值為TRUE,表示鼠標(biāo)已經(jīng)摁下,FALSE,表示鼠標(biāo)沒有抬起;
- OnMouseMove()處理鼠標(biāo)移動消息,判斷狀態(tài)值,未抬起。就記錄臨時重點,調(diào)用?InvalidateRect(NULL); 進(jìn)行界面重繪;
- OnLButtonUp()處理鼠標(biāo)左鍵抬起,記錄線的終點,調(diào)用?InvalidateRect(NULL); 進(jìn)行界面重繪,修改狀態(tài)值;
// CMFCPaintView 消息處理程序void CMFCPaintView::OnLButtonDown(UINT nFlags, CPoint point)
{// TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值m_start = point;m_bStatus = TRUE;CView::OnLButtonDown(nFlags, point);
}void CMFCPaintView::OnLButtonUp(UINT nFlags, CPoint point)
{// TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值m_ptStop = point;//CDC* pDC = GetDC();// 1. 什么是上下文?// 2. 什么是設(shè)備上下文?//pDC->MoveTo(m_start);//pDC->LineTo(m_stop);//ReleaseDC(pDC);InvalidateRect(NULL);m_bStatus = FALSE;CView::OnLButtonUp(nFlags, point);
}void CMFCPaintView::OnMouseMove(UINT nFlags, CPoint point)
{// TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值if (m_bStatus){m_cur = point;InvalidateRect(NULL); // 調(diào)用OnDraw,界面重回
// CDC* pDC = GetDC();
// pDC->MoveTo(m_start);
// pDC->LineTo(point);
// ReleaseDC(pDC);}CView::OnMouseMove(nFlags, point);
}
InvalidateRect(NULL)是一種觸發(fā)重繪的方法,它可以使窗口客戶區(qū)域全部無效,并強(qiáng)制觸發(fā)WM_PAINT消息,以便應(yīng)用程序?qū)蛻魠^(qū)進(jìn)行重繪。
具體而言,InvalidateRect(NULL)函數(shù)會將整個窗口客戶區(qū)域標(biāo)記為無效(即需要重新繪制),并記錄下這個無效區(qū)域的位置和大小。然后,它會向系統(tǒng)發(fā)送WM_PAINT消息,以通知應(yīng)用程序客戶區(qū)需要重新繪制。
在應(yīng)用程序收到WM_PAINT消息后,它會根據(jù)無效區(qū)域的位置和大小,重新繪制客戶區(qū)。
需要指出的是,InvalidateRect(NULL)函數(shù)通常是在需要強(qiáng)制更新整個客戶區(qū)時使用的,因為它會將整個客戶區(qū)標(biāo)記為無效,即使只有一小部分區(qū)域需要更新。如果只需要更新某個特定的區(qū)域,則可以使用InvalidateRect()函數(shù)的其他重載版本,它們可以指定需要更新的區(qū)域。
在OnDraw來實現(xiàn)畫直線
// 當(dāng)像素超過1時,線型會失效CPen pen(PS_DASHDOT, 1, RGB(255, 0, 0));// 返回一個筆CPen* pOldPen = pDC->SelectObject(&pen);CPoint start = m_start, cur = m_cur;start.y--;if (m_bStatus){cur.y--;pDC->MoveTo(m_start);pDC->LineTo(m_cur);pDC->MoveTo(start);pDC->LineTo(cur);}else{cur = m_cur;cur.y--;pDC->MoveTo(m_start);pDC->LineTo(m_cur);pDC->MoveTo(start);pDC->LineTo(cur);}// 還原原來的筆pDC->SelectObject(pOldPen);
繪制矩形
if (m_bStatus){// 選擇NULL就會用上下文的刷子,不選空就會用指定的刷子else{pDC->FillRect(CRect(m_start, m_ptStop), NULL);}
八.畫布
在MFC中,畫布(Canvas)是指一個表示繪圖區(qū)域的設(shè)備上下文(Device Context,DC),它提供了繪制圖形和文本的基本操作。
畫布通常與窗口客戶區(qū)關(guān)聯(lián),它對應(yīng)于屏幕上的一個矩形區(qū)域,用于繪制窗口的內(nèi)容。在MFC中,可以通過調(diào)用CWnd類的GetDC函數(shù)來獲取當(dāng)前窗口客戶區(qū)的設(shè)備上下文句柄,從而獲得畫布的訪問權(quán)。
一旦獲取了畫布的設(shè)備上下文句柄,就可以使用GDI(圖形設(shè)備接口)函數(shù)來繪制各種圖形和文本。例如,可以使用LineTo函數(shù)在畫布上繪制一條直線,使用Rectangle函數(shù)繪制矩形,使用TextOut函數(shù)繪制文本等。
九.畫筆
實例化畫筆類CPen,并設(shè)置到CDC中,會返回以一個舊的畫筆
CPen pen(PS_DASHDOT, 1, RGB(255, 0, 0));// 返回一個筆CPen* pOldPen = pDC->SelectObject(&pen);
繪制完成后,需要恢復(fù)
pDC->SelectObject(pOldBrush);
十.畫刷
實例化畫刷類CBrush,并設(shè)置到CDC中,會返回以一個舊的畫刷
CBrush brush(RGB(255, 0, 0)), brush2(RGB(0, 255, 0));CBrush* pOldBrush = pDC->SelectObject(&brush);
繪制完成后,需要恢復(fù)
pDC->SelectObject(pOldBrush);
十一.利用TRACE打印日志
LOGPEN logpen;pOldPen->GetLogPen(&logpen);TRACE("style = %d color = %08x width = %d\r\n",logpen.lopnStyle, logpen.lopnColor, logpen.lopnWidth);
LOGPEN logpen;
是一個定義變量的語句,它聲明了一個名為logpen
的變量,并指定了它的數(shù)據(jù)類型為LOGPEN
結(jié)構(gòu)體類型。
在Windows GDI中,LOGPEN
結(jié)構(gòu)體用于描述一個邏輯畫筆的屬性,包括畫筆樣式、寬度和顏色等信息。LOGPEN
結(jié)構(gòu)體的定義如下:
typedef struct tagLOGPEN {UINT lopnStyle; // 畫筆樣式POINT lopnWidth; // 畫筆寬度(當(dāng)樣式為PS_GEOMETRIC時,表示線段兩端的寬度)COLORREF lopnColor; // 畫筆顏色
} LOGPEN;
十二.文本編程
模仿寫一個文本編輯器
響應(yīng)字符消息WM_CHAR
void CMFCPaintView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{// TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值TRACE("%c\r\n", nChar);CClientDC dc(this);m_strText += (TCHAR)nChar;InvalidateRect(NULL);CView::OnChar(nChar, nRepCnt, nFlags);
}
每當(dāng)接受一個新字符就觸發(fā)重繪,在OnDraw進(jìn)行實現(xiàn)
每次都是要遍歷真?zhèn)€字符串,未匹配到換行符就放入到sub中;匹配到換行符,把先前sub中的打印出來,同時調(diào)用CSIZE的GetTextExtent()方法,獲取此時 | 應(yīng)該放置的位置并調(diào)用全局的方法SetCaretPos(sz.cx + 2, y);重置位置。
CString sub = _T("");int y = 0;for (int i = 0; i < m_strText.GetLength(); i++){if ((m_strText.GetAt(i) == '\n') || (m_strText.GetAt(i) == '\r')){pDC->TextOut(0, y, sub);CSize sz = pDC->GetTextExtent(sub);sub.Empty();y += sz.cy + 2;continue;}sub += m_strText.GetAt(i);}if (sub.IsEmpty() == false)pDC->TextOut(0, y, sub); //Textout()只能顯示單行文本CSize sz = pDC->GetTextExtent(sub);//方式一://CPoint pt; //CPoint 是Point的子類//pt.y = y;//pt.x = sz.cx + 2;//SetCarePos(pt.x, pt.y);// 方式二://SetCarePos(CPoint(sz.cx + 2, y));//方式三:::SetCaretPos(sz.cx + 2, y);
CSize sz = pDC->GetTextExtent(sub);
是一個將字符串繪制到設(shè)備上下文(pDC)的語句,并返回繪制的文本區(qū)域的大小。
十三.ID號
在MFC(Microsoft Foundation Classes)中,資源的ID號用于唯一標(biāo)識和引用資源。MFC中的資源可以是窗口、對話框、菜單、圖標(biāo)、位圖、字符串等。
資源的ID號具有以下作用:
-
標(biāo)識資源:每個資源在MFC中都有一個唯一的ID號,通過ID號可以標(biāo)識不同的資源。例如,對話框資源有一個ID號,可以通過該ID號在代碼中引用對話框資源。
-
引用資源:通過資源的ID號,可以在代碼中引用并使用該資源。通過調(diào)用MFC提供的函數(shù)或宏,可以根據(jù)資源的ID號加載、顯示、修改或處理相應(yīng)的資源。
-
管理資源:通過ID號,可以方便地管理和組織資源。在代碼中,可以使用資源的ID號進(jìn)行資源的加載、卸載、創(chuàng)建等操作,并且可以使用ID號將不同類型的資源關(guān)聯(lián)起來。
-
多語言支持:資源的ID號對于實現(xiàn)多語言支持非常重要。通過為不同語言的資源定義不同的ID號,可以根據(jù)當(dāng)前的語言環(huán)境加載相應(yīng)的資源,并實現(xiàn)多語言界面。
十四.菜單欄
在資源視圖->IDR_MAINFRAME中可以編輯菜單欄
主菜單是沒有ID的;子菜單可以設(shè)置
給菜單添加響應(yīng)函數(shù),在類視圖中找打MFCPaintView,選擇類向?qū)?#xff0c;選擇消息,選擇添加處理程序
方法被添加
查看消息映射表,消息翻譯為WM_COMMAND再進(jìn)行區(qū)分。
十五.菜單命令路由
有view和doc,觸發(fā)了view,但是沒有觸發(fā)doc
去掉view類的菜單響應(yīng)函數(shù),打開doc類的響應(yīng)函數(shù)。觸發(fā)view類,不觸發(fā)doc ??view>doc
去掉doc類的菜單響應(yīng)函數(shù),打開框架類的響應(yīng)函數(shù),觸發(fā)doc類,不觸發(fā)app ????doc>框架
去掉app類的菜單響應(yīng)函數(shù),打開app類的響應(yīng)函數(shù)框架》app
響應(yīng)菜單命令順序:View> doc >框架 >app
十六.工具欄
工具欄資源就在資源視圖 TOOLBAR中
添加一個工具
選中最后一個空的,手動繪制
需要注意,這個需要繪制兩個,填入ID,處理方式與菜單一樣。
刪除工具,拖著方塊移出區(qū)域即可。