日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第05章笔记

發布時間:2025/3/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第05章笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

主要內容:

使程序能夠響應菜單事件和鼠標事件(按下左鍵、移動、松開左鍵)。


關于事件:

視窗程序通過事件進行用戶進行交互。當用戶進行單擊鼠標、選擇菜單、按下鍵盤等操作時都會產生一個事件。在程序中,我們需要:1,為指定的事件編寫處理程序;2.將事件處理程序進行注冊。


編寫事件處理程序

編寫事件處理程序其實就是為處理事件的類添加一個方法(即成員函數)。在MFC中,無論是視窗框架類(如CFrameWnd,CMDIFrameWnd,CMDIChildWnd),還是文檔類,或者視圖類,都可以處理事件,我們只需要在類中添加相應的方法即可。

由于事件處理程序是特殊的方法,所以事件處理程序必須要以afx_msg開頭


事件處理程序注冊

要處理事件的類,在類體中除了要添加負責處理事件的方法外,還要:1,在類體中添加以下宏DECLARE_MESSAGE_MAP();2,在類體外添加事件處理程序注冊宏,格式如下:

BEGIN_MESSAGE_MAP(類名,父類名)

????具體的事件注冊宏

END_MESSAGE_MAP()


有一些事件,如:單擊鼠標、移動鼠標等,被稱為系統消息,其特點是:1,處理該類事件的方法聲明是由系統固定的,如移動鼠標的方法聲明是:afx_msg void OnMouseMove(UINT nFlags, CPoint point);2,在注冊該類事件時,都是以ON_WM開頭的,如移動鼠標的事件注冊為:ON_WM_MOUSEMOVE()。

而對于有一些操作,例如選擇菜單,雖然動作都是單擊,但是由于不同的菜單項需要不同的處理函數,所以對于此類方法來說:1,處理事件的函數名是可以自己定義的;2,注冊事件的宏名是固定的,如選擇菜單的注冊事件宏是:ON_COMMAND;3,需要給事件處理宏添加2個參數,第一個參數是發生事件的資源ID,第二個是參數是處理在資源上指定事件的函數名。

例如:在菜單中有一個菜單項“Test”,其ID為:IDM_TEST,其事件處理函數的聲明是:afx_msg void OnTest(),則其事件注冊宏為:ON_COMMAND(IDM_TEST, OnTest)。


示例程序:

創建一個簡單的視窗程序,程序有一個簡單的菜單“File”,有兩個菜單項:“Exit1”和“Exit”。

菜單項
資源ID
功能
Exit1
IDM_EXIT
顯示提示信息后退出程序。
Exit
ID_APP_EXIT
退出程序。

其中:ID_APP_EXIT是系統提供的資源ID,功能是退出程序,無需用戶自己編程。而IDM_EXIT是用戶自定的資源ID,需要自己添加處理程序。

在程序窗口中按下鼠標左鍵移動時,會在窗口中繪制紅色的點。


主要事件分析:

1:單擊”Exit1“菜單時,調用程序,顯示對話框并退出程序。

2:在視窗中,按下鼠標,開始捕捉鼠標軌跡。

3:按住左鍵移動鼠標時,繪制紅色的點。

4:松開鼠標時,結束捕捉。


程序代碼:

#include?<afxwin.h> #include?"Message.h"class?CMyFrame?:?public?CFrameWnd { private:CMenu?*pMenu; public:CMyFrame(){Create(NULL,?"Hello?MFC");pMenu?=?new?CMenu;pMenu->LoadMenu(IDR_MENU1);SetMenu(pMenu);}~CMyFrame(){delete?pMenu;}afx_msg?void?OnExit()//事件處理函數必須以afx_msg開頭{MessageBox("Exit1");DestroyWindow();}afx_msg?void?OnLButtonDown(UINT?nFlags,?CPoint?point)//系統消息的方法聲明是固定格式的{SetCapture();}afx_msg?void?OnMouseMove(UINT?nFlags,?CPoint?point){if(GetCapture()?==?this){CClientDC?aDC(this);aDC.SetPixel(point,?RGB(255,?0,?0));}}afx_msg?void?OnLButtonUp(UINT?nFlags,?CPoint?point){ReleaseCapture();}DECLARE_MESSAGE_MAP() }; BEGIN_MESSAGE_MAP(CMyFrame,?CFrameWnd)ON_COMMAND(ID_Exit1,?OnExit)ON_WM_LBUTTONDOWN()ON_WM_MOUSEMOVE()ON_WM_LBUTTONUP() END_MESSAGE_MAP()class?CMyApp?:?public?CWinApp { public:BOOL?InitInstance(){CFrameWnd?*pFrame?=?new?CMyFrame;m_pMainWnd?=?pFrame;pFrame->ShowWindow(SW_SHOW);return?true;} }a_app;

。。。

轉載于:https://blog.51cto.com/3677403/1655304

總結

以上是生活随笔為你收集整理的第05章笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。