精华内容
下载资源
问答
  • 2021-08-04 09:06:10

    分(未计分)

    HarmonyOS中可以用一套统一的开发范式来覆盖不同的设备。

    True 正确

    False

    HarmonyOS中应用被唤起时只能从主页面入口开始运行。

    True

    False 正确

    HarmonyOS中应用的基础单元是Ability。

    True 正确

    False

    以下哪一项不属于Harmony应用程序框架的范围:

    应用市场 正确

    JS UI & Java UI

    BMS

    DMS

    HarmonyOS中将有UI的Ability称为:

    元服务

    元程序 正确

    可视化Ability

    HarmonyOS中的AMS全称是?

    Activity管理服务

    Ability管理系统

    Ability管理服务 正确

    针对多设备的形态差异下应用开发的效率提升,HamonyOS的解决策略包括哪些?

    多态控件

    动态布局

    开箱即用的工程模板

    交互事件归一

    HarmonyOS都有哪些类型的Ability?

    元程序

    元服务

    数据Ability

    服务Ability

    哪些是HamonyOS的Ability的特征?

    可免安装启动

    可跨设备调用

    可跨设备状态迁移

    可直达到指定页面入口启动

    HarmonyOS JS UI框架具备哪些特征?

    类Web前端的开发方式

    高性能

    一致的跨平台体验

    PC端实时预览能力

    更多相关内容
  • Zigbee应用程序框架是一组嵌入式C代码,AppBuilder可以配置这些代码来...• 为应用程序框架的所有方面提供参考,包括回调、插件、API和CLI。 • 讨论扩展ZCL (Zigbee集群库)。 • 提供AppBuilder设计应用程序的指南
  • Windows Presentation Foundation(WPF)Windows Presentation Foundation(WPF)是用于构建Windows桌面应用程序的UI框架。 WPF支持广泛的应用程序开发功能,其中包括Windows Presentation Foundation(WPF)的应用...
  • 应用程序框架-DevExpress VCL MDI版本 这是MDI应用程序的应用程序框架。 该框架使用以下组件: Delphi事件总线2.x DevExpress VCL 其中包含的大多数图像是使用Axialis Office Pro 2019套装的Axialis ...
  • 简单的 YARN 应用程序框架 这个 repo 包含一个 YARN 应用程序的准系统实现,包括: YARN 客户端。 应用大师。 一个容器。 配置所需的 Utils 类。 行为: 此应用程序启动 YARN 客户端, 依次启动 Application ...
  • Java桌面应用程序框架包括:更新管理器安装程序gradle支持bean gui编辑器插件首选项
  • 一个PHP OOP Web应用程序框架,该框架使用MVC架构模式创建一个包含登录和多语言系统的基本应用程序,并且可以任何Web项目使用。 创建它是为了摆脱从头创建MVC脚本的麻烦 描述 MVC(模型-视图-控制器)Web应用...
  • Windows MFC编程入门——应用程序框架

    千次阅读 2020-02-22 12:21:55
    程序运行都要有入口函数,C/C++程序中都是main函数,而windows应用程序的入口函数是WinMain或wWinMain。MFC程序也是从这个入口开始的。Windows SDK开发程序就是不使用MFC类库,直接用Windows API函数进行开发。 ...

     一、SDK应用程序与MFC应用程序运行过程对比

      程序运行都要有入口函数,在C/C++程序中都是main函数,而windows应用程序的入口函数是WinMain或wWinMain。MFC程序也是从这个入口开始的。Windows SDK开发程序就是不使用MFC类库,直接用Windows API函数进行开发。

      下面就是SDK应用程序示例

    #ifndef UNICODE
    #define UNICODE
    #endif 
    
    #include <windows.h>
    
    LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
    
    int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
    {
        // Register the window class.
        const wchar_t CLASS_NAME[]  = L"Sample Window Class";
        
        WNDCLASS wc = { };
    
        wc.lpfnWndProc   = WindowProc;
        wc.hInstance     = hInstance;
        wc.lpszClassName = CLASS_NAME;
    
        RegisterClass(&wc);
    
        // Create the window.
    
        HWND hwnd = CreateWindowEx(
            0,                              // Optional window styles.
            CLASS_NAME,                     // Window class
            L"Learn to Program Windows",    // Window text
            WS_OVERLAPPEDWINDOW,            // Window style
    
            // Size and position
            CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
    
            NULL,       // Parent window    
            NULL,       // Menu
            hInstance,  // Instance handle
            NULL        // Additional application data
            );
    
        if (hwnd == NULL)
        {
            return 0;
        }
    
        ShowWindow(hwnd, nCmdShow);
    
        // Run the message loop.
    
        MSG msg = { };
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    
        return 0;
    }
    
    LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        switch (uMsg)
        {
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
    
        case WM_PAINT:
            {
                PAINTSTRUCT ps;
                HDC hdc = BeginPaint(hwnd, &ps);
    
                FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1));
    
                EndPaint(hwnd, &ps);
            }
            return 0;
    
        }
        return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
    

     上面的程序运行的流程是:进入WinMain函数->初始化WNDCLASS,调用RegisterClass函数注册窗口类->调用CreateWindowEx函数->调用ShowWindow显示窗口->进入消息循环。关于消息循环再简单说下,Windows应用程序是消息驱动的,系统或用户让应用程序进行某项操作或完成某个任务时会发送消息,进入程序的消息队列,然后消息循环会将消息队列中的消息取出,交予相应的窗口过程处理,此程序的窗口过程函数就是myWndProc函数,窗口过程函数处理完消息就完成了某项操作或任务。

    1. 设计窗口
    2. 注册窗口
    3. 创建窗口
    4. 显示和更新
    5. 通过循环取消息
    6. 处理消息(窗口过程)

     

    WINAPI在我环境下被定义为__stdcall  ,即参数的传递顺序:参数列表从右到左依次入栈,并在函数返回前清空堆栈

     

    MFC应用程序:编写MFC程序需要包含#include<afxwin.h>头文件

    自己创建MFC应用程序框架:自定义类继承自CWinApp应用程序类,创建MyApp app应用程序对象(有且只有一个)。程序入口为InitInstance()函数。在程序入口函数中创建自定义框架类(MyFrame继承自CFrameWnd)。在MyFrame类构造函数中创建窗口Create。显示更新窗口并保存框架类对象指针。

    使用应用程序向导生成单文档应用程序框架:

     

     

     

     

    消息映射是一个将消息和成员函数相互关联的表。比如,框架窗口接收到一个鼠标左击消息,MFC将搜索该窗口的消息映射,如果存在一个处理WM_LBUTTONDOWN消息的处理程序,然后就调用OnLButtonDown。

    将消息映射添加到一个类中所做的全部工作:

    1)在所操作类中,声明消息映射宏

    2)通过放置标识消息的宏来执行消息映射,相应的类将在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP的调用之间处理消息。

    3)对应消息处理函数分别在类中声明,类外定义

    展开全文
  • 一个包含Watson Developer Cloud Gallery应用程序使用的通用类和实用程序的项目。 建造 运行mvn install来构建项目。 框架-ega-codegen 包含用于使用Swagger代码生成API类的支持文件。 的更多信息 框架-ega-...
  • 该存储库包含业务应用程序开发框架。 ERP是通过集成Hexya的模块而构建的Hexya Hexya是一个开源ERP和一个用Go编写的业务应用程序开发框架。 该存储库包含业务应用程序开发框架。 通过集成Hexya Addons项目的模块来...
  • 本书详细介绍了现有MFC应用程序中综合运用.NET框架的技术。全书共分11章,内容包括正则表达式、文件I/O和注册表、数据加密、XML和DOM、ADO .NET数据库、远程处理、事件日志等。为了让读者透彻理解如何运用.NET框架...
  • 这是一个高级框架,允许快速开发数据库应用程序包括搜索/创建/显示/更新,相关实体之间的用户导航等等。 作为示例应用程序包括FAMTREE:家族树维护系统。 它使用了CFE的大多数功能,可以按原样使用或用作开发...
  • 该平台包含以下开源组件: ,和现成的应用程序可扩展其功能,以及可视化开发环境可为该应用程序创建元数据。 UML方案建模的应用程序可以启动。 描述 IONDV。 框架-是用于基于元数据创建高级Web应用程序的工具。 ...
  • @ dojo /框架 Dojo是使用TypeScript构建的现代Web应用程序的渐进框架。 请访问 ,有关文档,教程,食谱和其他材料的信息。...Dojo生态系统还有其他软件包,可帮助您快速轻松地创建Dojo应用程序: interop-
  • android 五大应用开发框架什么

    千次阅读 2021-06-07 18:02:08
    android应用开发框架是 Application Framework. 其系统架构由5部分组成,分别是:Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。第二部分将详细介绍这5个部分。下面自底向上分析...

    android应用开发框架是 Application Framework. 其系统架构由5部分组成,分别是:Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。第二部分将详细介绍这5个部分。下面自底向上分析各层。

    Android架构:

    1、Linux Kernel

    Android基于Linux 2.6提供核心系统服务,例如:安全、内存管理、进程管理、网络 堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。 如果你学过计算机网络知道OSI/RM,就会知道分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。也就是说各层各尽其职,各层提供固定的SAP(Service Access Point),专业点可以说是高内聚、低耦合。 如果你只是做应用开发,就不需要深入了解Linux Kernel层。

    2、Android Runtime

    Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。Dalvik虚拟机设计成,在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是.dex,dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。 大多数虚拟机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的。两种架构各有优劣,一般而言,基于栈的机器需要更多指令,而基于寄存器的机器指令更大。dx 是一套工具,可以将 Java .class 转换成 .dex 格式。一个dex文件通常会有多个.class。由于dex有时必须进行最佳化,会使文件大小增加1-4倍,以ODEX结尾。 Dalvik虚拟机依赖于Linux 内核提供基本功能,如线程和底层内存管理。

    3、Libraries

    Android包含一个C/C++库的集合,供Android系统的各个组件使用。这些功能通过Android的应用程序框架(application framework)暴露给开发者。下面列出一些核心库: 系统C库--标准C系统库(libc)的BSD衍生,调整为基于嵌入式Linux设备 媒体库--基于PacketVideo的OpenCORE。这些库支持播放和录制许多流行的音频和视频格式,以及静态图像文件,包括MPEG4、 H.264、 MP3、 AAC、 AMR、JPG、 PNG 界面管理--管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层 LibWebCore--新式的Web浏览器引擎,驱动Android 浏览器和内嵌的web视图 SGL--基本的2D图形引擎 3D库--基于OpenGL ES 1.0 APIs的实现。库使用硬件3D加速或包含高度优化的3D软件光栅 FreeType --位图和矢量字体渲染 SQLite --所有应用程序都可以使用的强大而轻量级的关系数据库引擎

    4、Application Framework

    通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。 开发者可以完全使用核心应用程序所使用的框架APIs。应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。这一机制允许用户替换组件。 所有的应用程序其实是一组服务和系统,包括: 视图(View)--丰富的、可扩展的视图集合,可用于构建一个应用程序。包括包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器 内容提供者(Content Providers)--使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据 资源管理器(Resource Manager)--提供访问非代码资源,如本地化字符串、图形和布局文件 通知管理器(Notification Manager)--使所有的应用程序能够在状态栏显示自定义警告 活动管理器(Activity Manager)--管理应用程序生命周期,提供通用的导航回退功能

    5、Applications

    Android装配一个核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置。所有应用程序都是用Java编程语言写的。更加丰富的应用程序有待我们去开发! 从上面我们知道Android的架构是分层的,非常清晰,分工很明确。Android本身是一套软件堆迭(Software Stack),或称为「软件迭层架构」,迭层主要分成三层:操作系统、中间件、应用程序。

    展开全文
  • 您想构建一个可靠的Web应用程序,但又不想使用express和构建基本网站所需的许多软件包,Grandjs是一个框架,其中包含构建令人惊叹,可靠和安全的Web应用程序所需的所有主要功能。需要大量的软件包和库。 Grandjs专...
  • 《盛荣应用程序框架》软件组合技术。使用COM技术设计的二次开发应用程序框架,可以开发出像Microsft Office、Visual Sutdio X同样的宏功能,插件功能,软件组合功能。实现软件与软件框架分离,支持windows标准多文档...
  • MFC应用程序框架入门(转)

    千次阅读 2017-10-11 09:13:50
    1 MFC概述顾名思意,MFC应用程序框架是以MFC作为框架基础的,以此程序框架模式搭建起来的应用程序程序结构组织上是完全不同于以前的Win32 SDK编程方式的。自20世纪90年代初问世以来,MFC一直试图把Windows API函数...
    1 MFC概述

    顾名思意,MFC应用程序框架是以MFC作为框架基础的,以此程序框架模式搭建起来的应用程序在程序结构组织上是完全不同于以前的Win32 SDK编程方式的。自20世纪90年代初问世以来,MFC一直试图把Windows API函数封装到类库中个各个逻辑类中。MFC的这种封装并非简单地对API函数进行分组与打包,而是更多地通过类来试图实现全部的系统策略。随着越来越多系统功能的加入,MFC的规模也在不断拓展,目前已包括有200多个类,涵盖了通用Windows 类、文档/视框架、OLE、数据库、Internet以及分布式功能等多方面的基本内容。这样一个坚实的程序开发基础无疑从很大程度上方便了程序设计人员对Windows 程序的开发。

    MFC提供了相当多不同功能的类以适合尽可能广泛的需求。这里绝大多数的MFC类都是直接或间接从CObject类派生出来的,CObject类为其派生类提供了三个重要的特性支持:持久性(Serialization)支持、运行时(Run-time)类信息支持和诊断(Diagnostic)调试支持等。其中持久性是以流的方式将某个类对象中的持久性数据输出或输入到外部存储介质如磁盘文件等的过程;运行时类信息(Run-time Class Information,RTCI)则可以重新获取一个对象的类名及其他一些有关对象在运行时的信息。RTCI也是C++中除运行时类型信息(Run-time Type Information,RTTI)机制外的另一个重要工具;诊断和调试支持作为CObject类的一个组成部分,可以在实现CObject派生类时执行有效性检查并可向调试窗口输出状态信息。

    并非MFC提供的所有函数都是类成员函数,MFC也提供了一系列以Afx为前缀的全局函数。类成员函数只能在其所属类对象所在的上下文中使用,但是这些AFX函数却可以在任何时候的任何地方直接使用。下表列出的是几个比较重要AFX函数:

    函数名函数说明
    AfxAbout无条件终止一个应用程序;通常在发生无法回复的错误时使用
    AfxBeginThread创建一个新的线程并开始执行
    AfxEndThread 终止当前正在执行的线程
    AfxMessageBox显示一个Windows 消息窗口
    AfxGetApp 返回一个指向应用程序对象的指针
    AfxGetAppName返回应用程序名
    AfxGetMainWnd返回一个指向应用程序主窗口的指针
    AfxGetInstanceHandle返回一个标识当前应用程序实例的句柄
    AfxRegisterWndClass 为一个MFC应用程序注册一个用户自定义的窗口类

    2 MFC对API函数的封装

    如果读者曾经有过SDK的开发经历,一定会对其烦琐的编程方式和大量的Win32 API函数调用深有感触。所有不同功能的API函数均是以全局函数的形式放在一起的,由于API函数数目比较庞大,因此无论是学习还是使用都是有一定难度的。相比而言,建立在API函数基础之上的MFC类库则通过把相关API函数的分类封装而可以大大简化编程的难度,用MFC类编写的Windows 应用程序完成相同的任务只需要进行少量的工作。

    众多的API函数根据功能的不同而被MFC封装到200多个类中,这些类基本涵盖了进行Windows 编程大部分可能用到的功能。由于封装后的MFC类太多,这里不能一一介绍,下面就以其中比较重要的CObject类和CWnd类为例对API函数的封装情况做一简要介绍。

    CObject类是MFC中最主要也是最基本的类之一,该类不支持多重继承,派生的类只能有一个CObject基类。CObject类是位于类层次结构最顶层的,绝大多数MFC类都是从CObject类派生出来的。CObject类包含了所有MFC类必须具备的几个基本功能:持久性支持、运行时类信息支持和诊断调试支持。其中持久性支持功能由成员函数IsSerializable()和Serialize()提供。前者用于检测对象是否支持序列化。如果一个类能够被序列化,就必须在声明时包含DECLARE_SERIAL宏、在实现时包含IMPLEMENT_SERIAL宏。Serialize()函数则可以将对象写入档案文件(Archive)或从档案文件读出对象。成员函数GetRuntimeClass()可以获取到一个指向CruntimeClass类对象的指针,通过该指针可以得到对象的运行时类信息。CObject类在诊断调试支持方面提供了成员函数AssertValid()和Dump(),前者可对对象内存状态的有效性进行检查,后者负责将对象的内容转储到一个CdumpContext对象中,并可以提供诊断服务及一些有用的调试信息。

    在MFC中,CWnd类提供了所有窗口类的基本功能,是一个非常重要的类,大约三分之一的MFC类都是以此为基类。该类主要对创建、操纵窗口类的API函数进行了封装,而且通过消息映射机制隐藏了SDK编程中使用相当不便的窗口处理函数,是消息的分发处理更加方便。

    CWnd类最重要的一个封装是对API函数CreateWindow()的封装,该函数被封装为CWnd类成员函数Create()。从VC提供的MFC源文件WinCore.cpp中可以清楚看出CWnd类对CreateWindow()函数的封装过程,下面给出相关部分的实现清单:

    BOOL CWnd::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)

    {

    // can't use for desktop or pop-up windows (use CreateEx instead)

    ASSERT(pParentWnd != NULL);

    ASSERT((dwStyle & WS_POPUP) == 0);

    return CreateEx(0, lpszClassName, lpszWindowName, dwStyle | WS_CHILD, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, pParentWnd->GetSafeHwnd(), (HMENU)nID, (LPVOID)pContext);

    }



    可以看出,主要工作是在CreateEx()成员函数中完成的,而该函数又是对API函数CreateWindowEx()的封装。封装后的代码在调用CreateWindowEx()前构造并填充了一个非常类似于WNDCLASS结构的CREATESTRUCT结构,并调用了PreCreateWindow()。

    BOOL CWnd::CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU nIDorHMenu, LPVOID lpParam)

    {

    // allow modification of several common create parameters

    CREATESTRUCT cs;

    cs.dwExStyle = dwExStyle;

    cs.lpszClass = lpszClassName;

    cs.lpszName = lpszWindowName;

    cs.style = dwStyle;

    cs.x = x;

    cs.y = y;

    cs.cx = nWidth;

    cs.cy = nHeight;

    cs.hwndParent = hWndParent;

    cs.hMenu = nIDorHMenu;

    cs.hInstance = AfxGetInstanceHandle();

    cs.lpCreateParams = lpParam;

    if (!PreCreateWindow(cs))

    {

    PostNcDestroy();

    return FALSE;

    }

    AfxHookWindowCreate(this);

    HWND hWnd = ::CreateWindowEx(cs.dwExStyle, cs.lpszClass, cs.lpszName, cs.style, cs.x, cs.y, cs.cx, cs.cy, cs.hwndParent, cs.hMenu, cs.hInstance, cs.lpCreateParams);

    #ifdef _DEBUG

    if (hWnd == NULL)

    {

    TRACE1("Warning: Window creation failed: GetLastError returns 0x%8.8Xn", GetLastError());

    }

    #endif

    if (!AfxUnhookWindowCreate())

    PostNcDestroy(); // cleanup if CreateWindowEx fails too soon

    if (hWnd == NULL)

    return FALSE;

    ASSERT(hWnd == m_hWnd); // should have been set in send msg hook

    return TRUE;

    }



    看上去经过封装的窗口创建函数要比原API函数复杂许多,但这并不说明MFC的封装将导致编程的效率低下,恰恰相反,由于CWnd在绝大多数场合中是以基类的形式出现的,因此可在派生类中添加代码完成对CWnd::Create()的调用而比较方便的实现对派生类窗口的创建。

    3 MFC应用程序框架

    MFC应用程序框架可以看作是MFC基本类库的一个超集(Superset),类库是众多可在任何程序中使用的类的集合,而应用程序框架则定义了程序自身的结构。下面给出一个使用了MFC应用程序框架的简单例子,通过这段例程可以比较清楚地了解MFC应用程序框架的一般结构。

     

    // Sample01.h文件

    // 应用程序类

    class CSample01App : public CWinApp

    {

    public:

    virtual BOOL InitInstance();

    };

    // 框架窗口类

    class CSample01Frame : public CFrameWnd

    {

    public:

    CSample01Frame();

    protected:

    afx_msg void OnPaint();

    DECLARE_MESSAGE_MAP()

    };

    // Sample01.cpp文件

    #include <afxwin.h>

    #include "Sample01.h"

    // 应用程序对象

    CSample01App theApp;

    // 初始化应用程序实例

    BOOL CSample01App::InitInstance()

    {

    m_pMainWnd = new CSample01Frame();

    m_pMainWnd->ShowWindow(m_nCmdShow);

    m_pMainWnd->UpdateWindow();

    return TRUE;

    }

    // 消息映射

    BEGIN_MESSAGE_MAP(CSample01Frame, CFrameWnd)

    ON_WM_PAINT()

    END_MESSAGE_MAP()

    // 构造函数

    CSample01Frame::CSample01Frame()

    {

    Create(NULL, "MFC应用程序框架程序");

    }

    // WM_PAINT消息响应函数

    void CSample01Frame::OnPaint()

    {

    CPaintDC dc(this);

    dc.TextOut(100, 100, "Hello World!");

    }



    仍象编写Sample00程序一样建立一个Win32应用程序工程Sample01(配套程序见"光盘配套程序Sample01"),然后分别向工程添加头文件Sample01.h和源文件Sample01.cpp,并将上述代码写入相应的文件。为了能顺利编译,还需要修改一下编译命令,通过"Alt+F7"快捷键呼出【Project Settings】对话框,在【Preprocessor definitions】栏的最后添加选项"_AFXDLL",前面用逗号分隔。接下来还需要在【Project Options】栏的最后添加命令行"/MD",用空格同其他命令行参数进行分隔。编译运行,可以看出效果同SDK方式编写的Sample00程序是一样的,但在代码实现上更加结构化,编写过程也更加简单。

    接下来,对上述应用程序框架代码进行分析。首先从MFC应用程序的核心--CWinApp类的派生类CSample01App谈起。CWinApp类提供了可以获取消息并将获取到的消息分发到应用程序窗口的消息循环和一些关键的虚函数,通过对这些虚函数的重载可使开发人员对应用程序的一些固有行为进行扩展。当把头文件Afxwin.h包含进来后,就可以在程序中使用包括CWinApp在内的一些MFC类了。一个MFC应用程序有且只能有一个应用程序对象而且必须被以全局方式进行声明,所以该对象自程序开始运行起就一直驻留在内存。

    由于使用了MFC应用程序框架的程序在本质上仍是Windows 应用程序,因此必然需要在程序中存在作为Windows 应用程序入口的WinMain()函数。在前面的示例代码中之所以没有看到WinMain()函数是由于该函数已经通过封装的手段隐藏到应用程序框架中了。除WinMain()外,CWinApp类成员函数Run()也是隐含执行的,这个函数也是非常重要的,它负责把消息放进应用程序窗口的消息循环中,由WinMain()函数完成对Run()的调用 。

    当WinMain()函数寻找到应用程序对象后将立即调用CWinApp类的虚函数InitInstance()。由于CWinApp基类是不知道究竟需要何种主框架窗口的,因此在使用时必须在CWinApp的派生类中对InitInstance()函数进行重载。InitInstance()函数是在应用程序已经开始运行但窗口尚未创建时被调用的,若非由InitInstance()创建了窗口,应用程序是无法拥有窗口的,这也就意味着缺少了InitInstance()函数的应用程序将无法接收、处理消息,对Windows程序而言这也就失去了存在的意义。由此可见,从CWinApp类中进行派生,并且对InitInstance()函数进行重载是编写MFC应用程序框架程序的必要条件。

    除应用程序类外,从CFrameWnd派生的CSample01Frame类还对应用程序的主框架窗口做了描述。在构造函数中调用基类的CFrameWnd成员函数Create(),由Windows 负责创建出实际的窗口结构,并由应用程序框架将其链接到C++对象。

    本示例程序的大部分功能实际是在MFC的CWinApp和CFrameWnd等基类中完成的,在编程时,只需在派生类中编写少量功能代码,C++允许以这样的方式借用基类中的大量代码而无须复制代码。应用程序框架负责提供程序的结构框架,开发人员在此基础上为其添加相应的实现代码,从而可以非常方便地完成一个完整的应用程序。应用程序框架不仅定义了应用程序的结构安排,实际上还包含了更多的C++基类。

    4 小结

    SDK的API编程方法、MFC的编程方法以及本系列讲座后面将要介绍的ATL编程方法是VC++程序设计中比较常用的几种编程方法,其中MFC以其强大的功能和灵活的编程方式而成为大多数程序开发人员最经常使用的一种编程方式。本文从基础问题入手对MFC及其框架程序做了较为详细的论述,使读者能够对MFC编程有一个基本的认识。

    转自(http://blog.chinaunix.net/uid-9563036-id-352088.html

    展开全文
  • Qt应用程序开发框架-快速入门篇

    千次阅读 多人点赞 2021-12-05 15:20:48
    Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器...
  • 本文由 漫慢忙 翻译自 Best 10 Cross-Platform App Frameworks to Consider ...随着需求增长,一些跨平台的应用程序开发工具和框架也开始市场上出现,很多公司都尝试这些有趣的技术。 结果呢?是我们现在拥有大...
  • 除了应用程序本身之外,存储库还包含两个框架: 塔尔·纳隆·萨马林 Tag.Neuron.Xamarin.UI 第一种将框架包装到适合于手机环境的库。 它还为Xamarin平台提供了便利代码和应用程​​序生命周期支持。 第二个包含...
  • 使用.NET5 创建的控制台应用程序无法添加ADO.NET实体模型,报错“项目的目标框架包含实体框架运行时程序集,请查看项目属性页的目标框架信息”</p>
  • Android应用程序框架

    千次阅读 2018-06-12 10:49:45
    应用程序框架可以说是一个应用程序的核心,是所有参与开发的程序员共同使用和遵守的约定,大家其约定上进行必要的扩展,但程序始终保持主体结构的一致性。其作用是让程序保持清晰和一目了然,满足不同需求的同时...
  • 5. 通知管理器(Notification Manager):使应用程序可以状态栏显示自定义信息。 6. 包管理器(Package Manager):管理所有安装Android系统应用程序。如卸载应用程序。 7. 资源管理器(Resource ...
  • 尼克维 使用WPF构建的Nickvision应用程序库,其中包含轻量级MVVM框架,自定义控件和更新框架 样本 可在上找到使用Nickvision.WPF的示例应用程序
  • android 应用程序框架

    2014-08-05 19:23:15
    进行Android软件开发时,开发者所开发的Android应用程序都是通过应用程序框架来与Android底层进行交互的,所以开发接触到最多的部分就是应用程序框架整合应用程序框架 有4个重要的组件,介绍如下。 ...
  • Android应用框架原理与程序设计(高焕堂)(中文简体+全书源码) 一本关于Android的不错的书,可惜之前只有繁体中文的,阅读起来比较费劲,现在上传一个简体版的跟大家分享。另外本资源还包含了书所有的源码,供...
  • 微信小程序框架介绍 微信团队为小程序提供的框架命名为MINA。MINA框架通过封装微信客户端提供的文件系统、网络通信、任务管理、数据安全等基础功能,对上层提供一整套JavaScript API,让开发者方便的使用微信 客户端...
  • 构建Web应用程序的10个JavaScript框架

    千次阅读 2019-04-25 09:23:57
    本文,我将列出用来构建 Web 应用程序的前10个 JavaScript 框架。 10、 Aurelia Aurelia 是一个开源的现代 JavaScript 模块工具箱,其有助于 Web 和移动应用程序的发展。它也被称为“下一代框架”。该框架自推出...
  • 什么是.NET应用程序框架

    千次阅读 2013-01-04 13:06:14
    .NET应用程序框架主要包括三个部分,这三个部分分别为公共语言运行时、统一的编程类和活动服务器页面。 1、公共语言运行时 公共语言运行时组件的开发及运行过程扮演着非常重要的角色。经历了传统的面向过程...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 826,792
精华内容 330,716
关键字:

在应用程序框架中包括什么