?? index.html
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>MultiViews Example</title><link href="style.css" rel="stylesheet" type="text/css"></head><table border="0" width="100%" height="8" bgcolor="#eeeeee"><tr> <td width="100%" height="1"><b><font size="2" color="#000000" face="Arial, Helvetica, sans-serif"><strong><a name=Top></a>S60 3rd Edition SDK FP1 for Symbian OS </strong></font></b><br><i>Example Applications Guide</i></td></tr> </table><!-- Generated by Doxygen 1.4.5 --><div class="tabs"> <ul> <li id="current"><a href="index.html"><span>Main Page</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li><a href="files.html"><span>Files</span></a></li> </ul></div><h1>MultiViews Example</h1><p><a class="el" href="index.html#Intro_sec">1. About this Example</a> <br><a class="el" href="index.html#Arch_sec">2. Architecture</a> <br><a class="el" href="index.html#Design_sec">3. Design and Implementation</a><p><hr><h2><a class="anchor" name="Intro_sec">1. About this Example</a></h2>The MultiViews example demonstrates how to implement different user interface views in an application, and how the different views can be activated alternately at runtime.<p>Each 'view' has:<ul><li>A Control Button Array (CBA) that defines the operation of the soft keys.</li><li>A Menu bar, that is displayed on selecting the Options soft key.</li><li>Operations which are invoked when the view is activated or deactivated.</li><li>The ability to handle menu commands.</li><li>A visual appearance on the display.</li></ul><h3><a class="anchor" name="Sub11">1.1 APIs demonstrated</a></h3><ul><li>CAknView</li><li>CAknViewAppUi</li><li>CCoeControl</li></ul><h3><a class="anchor" name="Sub12">1.2 Prerequisites</a></h3>The example makes use of the standard Symbian OS application framework comprising the Application, Document, UI, and View classes. The reader should be aware of this architecture before attempting to understand this example.<h3><a class="anchor" name="Sub13">1.3 Running this example</a></h3>When the application starts up, the following screen is displayed.<p><div align="center"><img src="VIEW1.JPG" alt="VIEW1.JPG"></div><p>The Options menu displays two choices, <b>Go to view 2</b> and <b>Exit</b>.<p><div align="center"><img src="VIEW1_MENU.JPG" alt="VIEW1_MENU.JPG"></div><p><ul><li>Select <b>Go to view 2</b> to switch to View 2.</li><li>Select <b>Exit</b> at any time to exit the application.</li></ul><p>After selecting <b>Go to view 2</b> the screen below is displayed.<p><div align="center"><img src="VIEW2.JPG" alt="VIEW2.JPG"></div><p>The Options menu displays three choises.<p><div align="center"><img src="VIEW2_MENU.JPG" alt="VIEW2_MENU.JPG"></div><p><ul><li>Select <b>Go to View 1</b> to switch to View 1.</li><li>Select <b>Say hello</b> to display a message box.</li><li>Select <b>Exit</b> at any time to exit the application.</li></ul><p>Selecting <b>Say hello</b> displays the note shown on the following image.<p><div align="center"><img src="VIEW2_COM1.JPG" alt="VIEW2_COM1.JPG"></div><p><hr><h2><a class="anchor" name="Arch_sec">2. Architecture</a></h2>This example exists as a complete application and has the Avkon View-Switching architecture comprising the the Application, Document, UI, and View classes.<p><hr><h2><a class="anchor" name="Design_sec">3. Design and Implementation</a></h2>The view properties listed in the <a class="el" href="index.html#Intro_sec">1. About this Example</a> section are defined in the Resource file, and the View and Container classes. The Resource file contains entries of type AVKON_VIEW for each view. Each AVKON_VIEW entry can define an Options menu bar and CBA keys. The View class is derived from CAknView and defines the view activation and deactivation behaviour, as well as the menu command handling. The Container class is derived from CCoeControl. It is responsible for the drawing to the screen and may contain other controls.<h3><a class="anchor" name="Sub31">3.1 Capabilities</a></h3>The application does not require any capabilities. The program capabilities are defined in mmp-files as CAPABILITY NONE.<h3><a class="anchor" name="Sub32">3.2 The resource file</a></h3>In this example the Resource file (MultiViews.rss) contains two AVKON_VIEW entries, one for each view. The code snippets below show the entries for the two views. The resource EIK_APP_INFO does not include entries for the menu bar and CBA since this is defined on a per view basis.<p>Resource entries for both views: <div class="fragment"><pre class="fragment"> RESOURCE EIK_APP_INFO { <span class="comment">// no implementation required</span> } . . . RESOURCE AVKON_VIEW r_multiviews_view1 { menubar = r_multiviews_menubar1; cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT; } . . . RESOURCE AVKON_VIEW r_multiviews_view2 { menubar = r_multiviews_menubar2; cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT; }</pre></div><h3><a class="anchor" name="Sub33">3.3 The View classes</a></h3>A view class defines objects which encapsulate such tasks as handling menu options. The views' classes are defined in <a class="el" href="class_c_multi_views_view1.html">CMultiViewsView1</a> and <a class="el" href="class_c_multi_views_view2.html">CMultiViewsView2</a>. The class hierarchy is illustrated in the following diagram. The methods DoActivateL and DoDeactivate define the views' activation and deactivation behaviour. HandleCommandL captures the menu command invocations.<p>MultiViews hierarchy diagram: <div align="center"><img src="VIEW_HIERARCHY.JPG" alt="VIEW_HIERARCHY.JPG"></div><h3><a class="anchor" name="Sub34">3.4 Container classes</a></h3>A container class defines objects which manage drawing to the screen. The container's classes are defined in <a class="el" href="class_c_multi_views_container1.html">CMultiViewsContainer1</a> and <a class="el" href="class_c_multi_views_container2.html">CMultiViewsContainer2</a> The class hierarchy is illustrated in the following diagram.<p>MultiViews container hierarchy: <div align="center"><img src="CONTAINER_HIERARCHY.JPG" alt="CONTAINER_HIERARCHY.JPG"></div><p>The Draw method draws the screen. In this example the containers simply draw different coloured screens; in a more sophisticated example the containers could be different dialogs. Switching between views is achieved by calling ActivateLocalViewL on the <a class="el" href="class_c_multi_views_app_ui.html">CMultiViewsAppUi</a> objects.<h3><a class="anchor" name="Sub35">3.5 Creation and Activation of a View</a></h3>Normally an application's AppUI is derived from CAknAppUi. However, when using CAknView it must be derived from CAknAppViewUi, because CAknAppViewUi adds support for classes which are derived from CAknView. The construction sequence of this class and the View classes is illustrated in the sequence diagram below. <div align="center"><img src="CONSTRUCT.JPG" alt="CONSTRUCT.JPG"></div><p><ol type=1><li>The framework completes the construction of the App UI by calling its ConstructL method.</li><li>The ConstructL method first calls the base class's BaseConstructL. This performs such tasks as reading the resource file associated with the application.</li><li>The application view <a class="el" href="class_c_multi_views_view1.html">CMultiViewsView1</a> is constructed, using the standard Symbian OS two phase construction.</li><li>The construction sequence calls the base class's BaseConstructL. It will read the R_MULTIVIEWS_VIEW1 resource defined for the view, as described in the <a class="el" href="index.html#Sub32">3.2 The resource file</a> section.</li><li>The application view <a class="el" href="class_c_multi_views_view2.html">CMultiViewsView2</a> is constructed, using the standard Symbian OS two phase construction.</li><li>The construction sequence calls the base class's BaseConstructL. It will read the R_MULTIVIEWS_VIEW2 resource defined for the view.</li><li>AddViewL registers the view 1 with the AppUi.</li><li>AddViewL registers the view 2 with the AppUi.</li><li>SetDefaultViewL is called which will cause the specified view to be activated on startup.</li><li>The framework calls the DoActivateL of view 1.</li><li>DoActivateL creates the Container object.</li></ol><p>Note that in order to receive key-related events, the application would have to be modified as follows:<p><ul><li>The containers would have to override the OfferKeyEventL method. The body of this method would interpret the key event.</li><li>After the call to NewL (message 11 above) the new container instance would have be added to the App UI's control stack, by calling AddToStackL.</li></ul><p>Also if the container contained other controls then it would be necessary to call the container's method SetMopParent with the App Ui as parameter.<h3><a class="anchor" name="Sub36">3.6 Command Invocation</a></h3>The following sequence diagram shows the sequence of events that occurs on selecting the menu option to switch views.<p><div align="center"><img src="DOACTIVATE.JPG" alt="DOACTIVATE.JPG"></div><p><ol type=1><li>Menu command Go To View 2 is selected and the view's HandleCommandL method is called with the command parameter EMultiViewsSwitchToView2.</li><li>HandleCommandL calls ActivateLocalViewL with the id returned by <a class="el" href="class_c_multi_views_view2.html#a9048c3ff4f288da47ab9b2de1833749">CMultiViewsView2::Id</a>.</li><li>The framework calls the DoActivateL method of view 2.</li><li>The DoActivateL creates the Container 2 object.</li><li>The framework calls DoDeactivate on view 1.</li><li>DoDeactivate removes Container 1 from the app UI's control stack.</li><li>DoDeactivate deletes Container 1. </li></ol><hr><table x-use-null-cells style="x-cell-content-align: top; width: 100%; border-spacing: 0px; border-spacing: 0px;" cellspacing=0 width=100%> <col style="width: 50%;"> <col style="width: 50%;"> <tr style="x-cell-content-align: top;" valign=top> <td style="width: 50%; padding-right: 10px; padding-left: 10px; border-right-style: None; border-left-style: None; border-top-style: None; border-bottom-style: None;" width=50%> <p style="font-family: Arial;"><small style="font-size: smaller;">
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -