visualcmfc编程基础内容摘要:

// 主窗口派生类 : public CFrameWnd { public: CHelloWnd( )。 // 构造主窗口 }。 57 最简单的 MFC 应用程序(续) CHelloApp HelloApp。 // 应用程序 BOOL CHelloApp::InitInstance() { m_pMainWnd = new CHelloWnd( )。 // 主窗口 m_pMainWndShowWindow( m_nCmdShow )。 m_pMainWndUpdateWindow( )。 // 显示 return TRUE。 } CHelloWnd::CHelloWnd( ) { Create( NULL, “Hello World!” )。 } // 创建主窗口结构 58 程序调用关系 C W i n A p p : : I n i t A p p l i c a t i o nC W n d : : C re a t eC H e l l o W n d : : C H e l l o W n dC W n d : : S h o w W i n d o wC W n d : : U p d a t e W i n d o wC H e l l o A p p : : I n i t I n s t a n c eC W i n A p p : : R u nC W i n A p p : : E x i t I n s t a n c e W i n M a i n程序入口 构造窗口类 实例初始化 构造 CHelloWnd 对象 调 CreatWindow() 调 UpdateWindow() 调消息循环 59 应用框架的作用 提供 WinMain 函数的程序结构 – 包括主窗口类登记和消息循环 CWinApp 类提供可重载的函数: – InitInstance 用于初始化 – 如:构造单文档、多文档或对话框的主窗口 – ExitInstance 用于结束处理 60 CWnd 类和消息处理机制 封装 API 中窗口处理的数据结构和相关函数  提供两类成员函数: 窗口 API 函数:代替 SDK API 函数 消息响应函数:响应各种系统消息  窗口 API 函数例 ShowWindow、 ScrollWindow、 SetWindowText  消息响应函数例 OnPaint、 OnLButtonDown、 OnKeyUp、 OnMouseMove、 OnClose、 OnHScroll 61 CWnd 的使用方法 *.CPP 文件中提供消息映射,指定消息响应函数 BEGIN_MESSAGE_MAP(派生类,窗口基类) ON_WM_PAINT( ) 各种消息的入口 ON_WM_CLOSE( ) ON_WM_KEYUP( ) ON_WM_LBUTTONDOWN( ) ON_COMMAND(菜单项标识,响应函数名 ) END_MESSAGE_MAP( ) *.H 文件中加入以下语句: DECLARE_MESSAGE_MAP( ) 62 CWnd 中的消息响应  CWnd 提供窗口函数负责消息识别 – 调用规定的消息响应函数  多数系统消息由 CWnd 的消息响应成员函数处理; – 例: ON_WM_PAINT( ) 规定 – 函数 OnPaint 响应 WM_PAINT  菜单消息、通知消息等由指定响应函数处理 – 例: ON_COMMAND( ItemID, OnAbout ) – 规定 OnAbout 响应菜单项 ItemID 63 CWnd 派生类的构造 class 派生类名 : public CWnd { 属性、状态的数据结构 public: 构造函数、析构函数 一般的成员函数 afx_msg 消息响应成员函数 DECLARE_MESSAGE_MAP( ) }。 64 一个消息映射应用例  类定义 CTheApp 应用程序类 CMainWin 主窗口类  程序代码 theApp 应用程序对象 CTheApp::InitInstance 实例初始化函数 CMainWin::OnRButtonDown 左鼠标按下消息响应 CMainWin::OnLButtonDown 右鼠标按下消息响应 MESSAGE_MAP 主窗口消息映射 65 运行中的事件流图 用户 应用程序 主窗口 鼠标双击 启动 构造 Windows WM_CREATE WM_PAINT … 左鼠标按下 WM_LBUTTONDOWN 右鼠标按下 WM_RBUTTONDOWN 66 函数调用关系C Wnd:: C r e a teC Wnd:: S how WindowC Wnd:: U pda teWindowC TheA pp: :Init InstanceWinM a inC Fr a me Wnd :: O nLB utt onD ow nC M a inWi n:: O nLB utt onD ow nC Fr a me Wnd :: O nR B utt onD ow nC M a inWi n:: O nR B utt onD ow nC Wn d:: Win dow P r ocWindow s 系统67 MFC 设备描述类  封装设备描述表和图形设备接口 – 抽象描述图形输出设备 – ( 如 : 显示器 , 打印机 , 绘图仪 )  常用派生类 – CPaintDC 类 用于 WM_PAINT处理 – CClientDC 类 用于其他消息处理 – CWindowDC类 用于整个窗口 68 CClientDC 的应用 void CMainWnd::OnLButtonDown( UINT flg, CPoint pt ) { CClientDC dc( this )。 // 建立设备描述对象 CRect rct。 GetClientRect( rct )。 // 取得窗口矩形 ( rct )。 // 画椭圆 CFrameWnd::OnLButtonDown( cfg, pt )。 } 69 CPaintDC 的应用 void CMainWnd::OnPaint(UINT flg, CPoint pt ) { // 处理 WM_PAINT 消息 CClientDC dc( this )。 CRect rct。 GetClientRect( rct )。 ( rct )。 CFrameWnd::OnLButtonDown( cfg, pt )。 } // 当窗口重新显示时 , 自动产生此消息 70 窗口输入消息处理  鼠标输入消息 – 鼠标左键按下: WM_LBUTTONDOWN – 鼠标左键释放: WM_LBUTTONUP – 鼠标左键双点: WM_LBUTTONDBLCLK – 鼠标移动: WM_MOUSEMOVE  键盘输入消息 – 键按下: WM_KEYDOWN – 键释放: WM_KEYUP – 字符键输入: WM_CHAR 71 鼠标消息处理  CWnd 的鼠标消息响应函数 afx_msg void OnLButtonDown( UINT flg, CPoint pt )。 afx_msg void OnMouseMove( UINT flg, CPoint pt )。 …… – flg 虚拟键标志; pt 鼠标的屏幕坐标  鼠标的消息入口 ON_WM_LBUTTONDOWN( ) ON_WM_MOUSEMOVE( ) …… 72 应用例:鼠标画线  OnLButtonDown( UINT flg, CPoint pt ) pDrag = new CClientDC( this )。 // 构造用户区设备对象 pDragMoveTo( , )。 // 设输出位置(设备属性)  OnMouseMove( UINT flg, CPoint pt ) pDragLineTo( , )。 // 画线到点 pt、并改变输出位置  OnLButtonUp( UINT flg, CPoint pt ) delete pDrag。 // 释放设备对象 73  用户区设备类 ( 非 WM_PAINT处理 ) – CClientDC 封装 GetDC 和 ReleaseDC 等 API – 其基类 CDC 提供 GDI 输出 函数  鼠标捕获与释放 – 迫使所有鼠标消息发向当前窗口  无效区与 WM_PAINT – Invalidate 指定无效区,等效于 WM_PAINT  CWnd::Close – 提供关闭窗口的功能 74 键盘输入处理 CWnd 的键盘输入消息响应函数 – afx_msg OnKeyDown( UINT ch, UINT rep, UINT flg )。 – afx_msg OnChar( ... )。 – afx_msg OnKeyUp( ... )。 – …… – ch 字符的 ASCII值, rep 重复次数, flg 虚拟键 键盘输入消息入口 – ON_WM_KEYDOWN( ) – ON_WM_CHAR( ) – ON_WM_KEYUP( ) 75 应用例:光标状态的切换  系统光标的获得 hCursor = ::AfxGetApp( )LoadStandardCursor( IDC_WAIT )。 // AfxGetApp( ) 获得 CMyApp 指针  OnKeyDown( UINT ch, UINT rep, UINT flg ) hCursor = ::SetCursor( hCursor )。 // 改变光标,并保存原光标  OnKeyUp( UINT ch, UINT rep, UINT flg ) hCursor = ::SetCursor(。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。