第11单元资源 pFrame->Create(0, T("Beautiful Cats")) pFrame->ShowWindow(m nCmdShow) this->m pMainWnd peral return TRUe //全局应用程序对象 CMinMFCApp Thisapp Bewtiful Cats 输出:在框架窗口中显示一幅 图片,如图11-1所示。 分析:在框架窗口类的构造函 数中载入位图资源并取得其宽度和高度 数据。在 OnPaint()函数中,首先建立 内存设备环境并选入已装载的位图资 源,然后使用 Bitblt()函数将位图显 示在框架窗口的客户区 CDC类的成员函数 StreTchBlt() 也可用来显示位图资源。其原型为 图11-1显示图片程序 BOOL StretchBlt( int x, int y, int nwidth, int nHeight, CDC* pSrcDC int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop ) 与BBt()对比,可发现 StretchBlt()多了两个参数 nSrcwidth和 nSrcheight.这两个参 数与xSre和ysre配合可确定位图中的一个矩形区域。通过改变由参数 n width和 nheight 确定的目标区矩形,可实现图象的缩放输出(参看例11-3 114菜单(Menu) 菜单在 Windows应用程 序中具有非常重要的地位。菜 新建 单也是一种资源,因此也要通打开@c 过 Developer Studio的资源编_男存为a 辑器编辑。“弹出式菜单”打印四 popup)、“选项 打印设置0B 出a) tem)和“分隔线”( separator) 是构成“树状菜单的三大要 素”,如图11-2所示。 通过“弹出式菜单”可以 ○ 调出一个子菜单,也可以说弹 出式菜单就是一个子菜单。分 隔线用来区分一组选项。 图112典型的菜单
第 11 单元 资源 - 220 - pFrame->Create(0,_T("Beautiful Cats”)); pFrame->ShowWindow(m_nCmdShow); this->m_pMainWnd = pFrame; return TRUE; } // 全局应用程序对象 CMinMFCApp ThisApp; 输 出:在框架窗口中显示一幅 图片,如图 11-1 所示。 分 析:在框架窗口类的构造函 数中载入位图资源并取得其宽度和高度 数据。在 OnPaint()函数中,首先建立 一内存设备环境并选入已装载的位图资 源,然后使用 BitBlt()函数将位图显 示在框架窗口的客户区。 CDC 类的成员函数 StreTchBlt() 也可用来显示位图资源。其原型为: BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop ); 与 BitBlt()对比,可发现 StretchBlt()多了两个参数 nSrcWidth 和 nSrcHeight。这两个参 数与 xSrc 和 ySrc 配合可确定位图中的一个矩形区域。通过改变由参数 nWidth 和 nHeight 确定的目标区矩形,可实现图象的缩放输出(参看例 11-3)。 11.4 菜单(Menu) 菜单在 Windows 应用程 序中具有非常重要的地位。菜 单也是一种资源,因此也要通 过 Developer Studio 的资源编 辑器编辑。“弹出式菜单” (popup)、“选项”(menu item)和“分隔线”(separator) 是构成“树状菜单的三大要 素”,如图 11-2 所示。 通过“弹出式菜单”可以 调出一个子菜单,也可以说弹 出式菜单就是一个子菜单。分 隔线用来区分一组选项。 图 11-2 典型的菜单 图 11-1 显示图片程序
第11单元资源 通过菜单中的“选项”可以调用应用程序的某项功能。每个选项均有一个标识符,而且 只有选项才有标识符,弹出式菜单和分隔线都没有标识符,在应用程序中只对选项编程 当用户选择了一个菜单选项后,就会向应用程序发送一个命令消息 WM COMMAND 该消息的格式为 ON COMMAND( id, memberFxn 其中参数id可以是菜单选项的标识符,而参数 member Fxr为接收该消息的窗口中用于处理 该消息的成员函数名。 在MFC程序中,通过 CMenu类对象对菜单进行操作。 在应用程序中加入菜单的要通过三个步骤 编辑菜单资源,设置菜单属性(见118:“向项目中添加资源”和11.9.3:“菜单编 辑器”); 2.在Wnd类的 PreCreate Window()成员函数中载入菜单 3.为每个菜单选项添加 WM COMMAND消息映射和对应的消息处理函数。 载入菜单的工作可在CWnd类的 PreCreate Window()函数中进行,其原型为 virtual BOOL Pre Create Window( CREATESTRUCT& cs 其中参数cs的类型为 CREATESTRUCT。该类型用于存放建立窗口的初始化参数: typedef struct tag CREATESTRUCT i LPVOID ∥创建窗口的参数指针 HANDLE ∥实例句柄 HMENU hMenu ∥菜单 HWND hwnd Parent ∥/父窗口 ∥窗口高 ∥窗口宽 ∥窗口左上角y坐标 ∥窗口左上角x坐标 LONG ∥窗口类型 LPCSTR lpszName, ∥窗口名称 LPCSTR IpszClass ∥/窗口类名 dwExStyle ∥附加类型 I CREATESTRUCT PreCreate Window()函数在窗口创建前被调用,通过重载该函数,程序员可以设置各种窗 口参数,也可以使用 Load Menu()载入菜单资源。其方法为: cS hMenu= LoadMenu(NULL, MAKEINTRESOURCE(IDR MAINMENUD)) 载入菜单后,还需为每个菜单选项添加消息映射和消息处理成员函数 例11-3修改1-2,使之可以不同比例放大或缩小图象 说明:使用 StretchBlt()函数代替 BitBlt()函数就可实现图象的缩放显示。在项
第 11 单元 资源 - 221 - 通过菜单中的“选项”可以调用应用程序的某项功能。每个选项均有一个标识符,而且 只有选项才有标识符,弹出式菜单和分隔线都没有标识符,在应用程序中只对选项编程。 当用户选择了一个菜单选项后,就会向应用程序发送一个命令消息 WM_COMMAND。 该消息的格式为: ON_COMMAND ( id, memberFxn ) 其中参数 id 可以是菜单选项的标识符,而参数 memberFxn 为接收该消息的窗口中用于处理 该消息的成员函数名。 在 MFC 程序中,通过 CMenu 类对象对菜单进行操作。 在应用程序中加入菜单的要通过三个步骤: 1. 编辑菜单资源,设置菜单属性(见 11.8:“向项目中添加资源”和 11.9.3:“菜单编 辑器”); 2. 在 Wnd 类的 PreCreateWindow()成员函数中载入菜单; 3. 为每个菜单选项添加 WM_COMMAND 消息映射和对应的消息处理函数。 载入菜单的工作可在 CWnd 类的 PreCreateWindow()函数中进行,其原型为: virtual BOOL PreCreateWindow( CREATESTRUCT& cs ); 其中参数 cs 的类型为 CREATESTRUCT。该类型用于存放建立窗口的初始化参数: typedef struct tagCREATESTRUCT { LPVOID lpCreateParams; // 创建窗口的参数指针 HANDLE hInstance; // 实例句柄 HMENU hMenu; // 菜单 HWND hwndParent; // 父窗口 int cy; // 窗口高 int cx; // 窗口宽 int y; // 窗口左上角 y 坐标 int x; // 窗口左上角 x 坐标 LONG style; // 窗口类型 LPCSTR lpszName; // 窗口名称 LPCSTR lpszClass; // 窗口类名 DWORD dwExStyle; // 附加类型 } CREATESTRUCT; PreCreateWindow()函数在窗口创建前被调用,通过重载该函数,程序员可以设置各种窗 口参数,也可以使用 LoadMenu()载入菜单资源。其方法为: cs.hMenu = LoadMenu(NULL, MAKEINTRESOURCE(IDR_MAINMENU)); 载入菜单后,还需为每个菜单选项添加消息映射和消息处理成员函数。 [例 11-3] 修改 11-2,使之可以不同比例放大或缩小图象。 说 明:使用 StretchBlt()函数代替 BitBlt()函数就可实现图象的缩放显示。在项