freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

visualc網(wǎng)絡(luò)編程案例實戰(zhàn)之郵件接收和發(fā)送客戶端之二(編輯修改稿)

2025-02-14 04:30 本頁面
 

【文章內(nèi)容簡介】 , UINT nHitTest, UINT message)。 ? afx_msg void OnClicked()。 ? //}}AFX_MSG ? 修改返回值類型如下: ? //{{AFX_MSG(CBitButtonNL) ? afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)。 ? afx_msg BOOL OnClicked()。 ? //}}AFX_MSG ? 同樣,單擊按鈕的事件響應(yīng)函數(shù) OnClicked()的定義出也需要修改返回值類型。在類 CBitButtonNL的實現(xiàn)文件中找到單擊事件的消息映射: ? BEGIN_MESSAGE_MAP(CBitButtonNL, CButton) ? //{{AFX_MSG_MAP(CBitButtonNL) ? ON_WM_SETCURSOR() ? ON_CONTROL_REFLECT(BN_CLICKED, OnClicked) ? //}}AFX_MSG_MAP ? END_MESSAGE_MAP() ? 修改消息映射為: ? BEGIN_MESSAGE_MAP(CBitButtonNL, CButton) ? //{{AFX_MSG_MAP(CBitButtonNL) ? ON_WM_SETCURSOR() ? ON_CONTROL_REFLECT_EX(BN_CLICKED, OnClicked) ? //}}AFX_MSG_MAP ? END_MESSAGE_MAP() ? 現(xiàn)在我們?yōu)轫憫?yīng)函數(shù) OnClicked()添加播放聲音的代碼,如下: ? 好了現(xiàn)在來解釋下為什么要做剛才的修改: ? 通常情況下,按鈕的單擊事件是由按鈕所在的窗體或者對話框來負責處理,特殊情況下按鈕也可以自己來處理被單擊的事件。我們這里所做的工作就是:按鈕為自己添加了單擊時的聲音。 ? 但我們在按鈕處理了單擊的消息后還想讓按鈕所在的窗體或?qū)υ捒騺砝^續(xù)處理單擊消息的話, ON_CONTROL_REFLECT和ON_CONTROL_REFLECT_EX就有所不同了。前者截取到消息后不會再把消息傳遞給父窗口,而后者可以完成這樣的功能,后者的響應(yīng)函數(shù)有返回值,是 BOOL類型,返回 false說明消息要繼續(xù)傳遞給父窗口,返回 true則不再允許消息繼續(xù)傳遞。 ? ClassWizard無法為我們生成 ON_CONTROL_REFLECT_EX映射,所以我們需要手動修改。 ? ( 2)鼠標在按鈕上劃過。 ? 再來為按鈕添加鼠標在按鈕上劃過時消息WM_MOUSEMOVE的響應(yīng)函數(shù) OnMouseMove(),添加代碼如下: ? 函數(shù) OnMouseMove()的實現(xiàn)看起來比較繁瑣,實際上想要完成的檢測和功能是很簡單的:它要確定鼠標是在按鈕上方、鼠標的左鍵還沒有按下,兩個條件同時滿足才播放鼠標滑過時的聲音。 ? 鼠標左鍵有沒有按下很好判斷,可以借助于函數(shù)OnMouseMove()的參數(shù) nFlags,只要檢查 nFlags是否包含鼠標左鍵被按下的標志位 MK_LBUTTON就可以了。 ? 那么鼠標是否在按鈕的上方要如何檢測呢?只要判斷鼠標所在的窗口與按鈕這個特殊的“窗口”是不是同一個窗口就可以了,這里使用了函數(shù)WindowFromPoint(),用來獲取指定點的窗口句柄。變量 m_hWnd是繼承自 CWnd的成員變量,保存了按鈕的句柄。 ? 那么鼠標移過的聲音開始播放了,又要什么時候停止呢?答案就是:鼠標離開按鈕了。如何檢測鼠標離開按鈕的事件呢?這里就需要用到函數(shù)_TrackMouseEvent()了,此函數(shù)會在鼠標指針離開窗口或者在窗口上方懸停指定的時間后投遞指定的消息。 ? 該函數(shù)原型如下: ? BOOL _TrackMouseEvent( ? LPTRACKMOUSEEVENT lpEventTrack ? )。 ? 參數(shù) lpEventTrack是結(jié)構(gòu) TRACKMOUSEEVENT的指針,結(jié)構(gòu)的成員如下: ? typedef struct tagTRACKMOUSEEVENT { ? DWORD cbSize。 ? DWORD dwFlags。 ? HWND hwndTrack。 ? DWORD dwHoverTime。 ? } TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT。 ? 各個結(jié)構(gòu)成員的含義如下: ? cbSize:指定此結(jié)構(gòu)的大小。 ? 我們使用的此函數(shù)會發(fā)送 WM_MOUSELEAVE消息,所以我們現(xiàn)在該添加這個消息的捕獲和響應(yīng)了,添加過程如下: ? 為類 CBitButtonNL添加私有成員函數(shù) OnMouseLeave的聲明,如下: ? LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam)。 ? 再添加消息映射: ? 然后實現(xiàn)它: ? 兩個響應(yīng)函數(shù) OnMouseMove()和 OnMouseLeave()都調(diào)用了一個函數(shù) CancelHover(),是類 CBitButtonNL的公有成員函數(shù),定義如下: ? 此函數(shù)是用來修改一個類型為 BOOL的變量 m_bMouseOnButton,記錄鼠標此時已經(jīng)不再按鈕上了。 自繪按鈕 ? 必須修改按鈕的樣式為“自繪”類型,我們才能為按鈕添加圖像和 3D文本。 ? 重載類的虛函數(shù) PreSubclassWindow(),代碼填寫如下: ? 類 CWnd的成員函數(shù) ModifyStyle()用來修改窗口的樣式,函數(shù)原型如下: ? BOOL ModifyStyle( ? DWORD dwRemove, ? DWORD dwAdd, ? UINT nFlags = 0 ? )。 ? 參數(shù)含義如下: ? dwRemove:指定要移除的窗口樣式。 ? 類 CWnd的成員函數(shù) GetFont(),用來獲取當前的字體。虛函數(shù) PreSubclassWindow()完成的功能是:設(shè)置了自繪按鈕的樣式,初始化當前字體結(jié)構(gòu)變量 m_lf。 ? 設(shè)置了自繪按鈕樣式后,我們再來重載函數(shù) DrawItem(),代碼填寫如下: ? 結(jié)構(gòu) DRAWITEMSTRUCT包含了如何繪制控件或窗體的信息,定義如下: ? typedef struct tagDRAWITEMSTRUCT { ? UINT CtlType。 ? UINT CtlID。 ? UINT itemID。 ? UINT itemAction。 ? UINT itemState。 ? HWND hwndItem。 ? HDC hDC。 ? RECT rcItem。 ? DWORD itemData。 ? } DRAWITEMSTRUCT。 ? 我們僅介紹一下函數(shù)中用到的結(jié)構(gòu)成員: ? itemState:指定自繪按鈕發(fā)生的改變。 ODS_SELECTED表示按鈕被選中。 ? 虛函數(shù) DrawItem()調(diào)用了我們自己實現(xiàn)的成員函數(shù) DrawTheBitmap()和DrawTheText(),設(shè)置按鈕的圖像和顯示的文字。 頭文件總覽 ? 頭文件中包含了所有成員函數(shù)和成員變量的聲明,如下: ? 我們自定義的繼承于 CButton的類 CBitButtonNL到底提供了哪些功能函數(shù),哪些可以被直接使用,在類的頭文件中一目了然。 郵件管理程序示例 ? 本節(jié)開始,我們就要應(yīng)用前面講解的知識,慢慢完成本章的示例了。包括各個功能模塊的設(shè)計,然后將這些模塊組合。本示例是基于對話框的應(yīng)用程序,我們命名為 EmailManager。在工程中添加類CBitButtonNL的頭文件和實現(xiàn)文件。 程序主窗體 ? 本小節(jié)將會完成程序主窗體界面和功能的設(shè)計,需要在類 CEmailManagerDlg的頭文件中加入文件包含指令,如下: ? include ? 因為我們的按鈕將要創(chuàng)建的變量就是 CBitButtonNL類型的,所以當然要包含這個類的頭文件才能使用這個類。其它的窗體只要用到了這個類,也同樣需要包含這個文件。 ? 對話框 ID修改為 IDD_EMAILMANAGER_DIALOG,當然大家完全可以選擇個短點的名字。添加按鈕控件,并設(shè)計如圖 : 圖 程序主窗體 ? 這么設(shè)計的原因是筆者用“畫圖”工具繪制了圖 主窗體界面。所以按鈕擺放在了對話框靠右下的位置。 I D C _ R E C E I V EI D C _ S E N DI D C _ S E T圖 主窗體界面 ? 需要注意的是:窗體的大小要和圖片的大小一致,否則會出現(xiàn)圖像顯示不完整(窗體小于圖片),或者圖片重復顯示(窗體大于圖片)。將圖片插入到工程中, ID修改為 IDB_MBACK。 ? 為按鈕繪制 3個狀態(tài)下的圖片,如圖 。 圖 按鈕不同狀態(tài)下的界面設(shè)計 ? 本示例的所有按鈕,均使用這 3個圖片,插入工程,修改 ID分別為: IDB_BTN_NORMAL、IDB_BTN_DOWN、 IDB_BTN_HLIGHT。 正 常 狀 態(tài) 按 下 狀 態(tài) 高 亮 狀 態(tài) ? 尋找適合的按鈕聲音導入到工程文件中,我們這里選擇 WAV格式的音樂文件。兩個音樂文件分別在鼠標單擊和鼠標劃過按鈕時播放,修改聲音文件的 ID為 IDR_WAVECLICK何 IDR_WAVEMOVE,如圖。 圖 導入聲音文件 ? 同樣,選擇適合的鼠標圖像導入到工程中,鼠標資源的文件后綴為 cur,用在鼠標位于按鈕之上時顯示。修改鼠標圖像資源的 ID為 IDC_CURSOR_HAND,如圖 。 圖 導入鼠標圖像 ? 用向?qū)?3個按鈕創(chuàng)建變量,類型是 CButton,如圖“收件箱”按鈕創(chuàng)建變量。 為按鈕關(guān)聯(lián)變量 ? 其它按鈕方法一樣,“發(fā)件箱”按鈕創(chuàng)建變量 m_bnSend,“設(shè)置”按鈕創(chuàng)建變量 m_bnSet,然后在類 CEmailManager的頭文件中找到如下代碼: ? //{{AFX_DATA(CEmailManagerDlg) ? enum { IDD = IDD_EMAILMANAGER_DIALOG }。 ? CButton m_bnSet。 ? CButton m_bnSend。 ? CButton m_bnReceive。 ? //}}AFX_DATA ? 修改為: ? //{{AFX_DATA(CEmailManagerDlg) ? enum { IDD = IDD_EMAILMANAGER_DIALOG }。 ? CBitButtonNL m_bnSet。 ? CBitButtonNL m_bnSend。 ? CBitButtonNL m_bnReceive。 ? //}}AFX_DATA ? 就是把類型修改一下而已,然后就可以用到我們在 講到的類 CBitButtonNL了。同時為類 CEmailManager添加保護的成員變量,如下: ? 在類 CEmailManager的成員函數(shù) OnInitDialog()中添加初始化的代碼,如下: ? 函數(shù) OnInitDialog()為主窗體設(shè)置背景,功能實現(xiàn)過程如下: ? 調(diào)用類 CGdiObject的成員函數(shù) Del
點擊復制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1