青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-341  評論-2670  文章-0  trackbacks-0
    這一次制作的按鈕模板具有通過模板屬性動態配置圖形的功能。模板的屬性一共有6個:x、y、w、h、state、content,其中state有normal、hot和press三個取值。XML、代碼和截圖如下:

    下面的模板文件有兩個模板,分別是background和button。background制作玻璃效果,button給background加上一個邊框,展示了property evaluation和template reference的功能:
 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <irconfig xmlns="http://tempuri.org/irconfig.xsd">
 3   <resources>
 4     <brush name="outer_border_brush" kind="solid">
 5       <main_color r="96" g="128" b="255" a="255"/>
 6     </brush>
 7     
 8     <brush name="up_content_brush_normal" kind="linear_gradient" gradient_angle="0">
 9       <main_color r="224" g="224" b="224" a="255"/>
10       <gradient_color r="192" g="192" b="192" a="255"/>
11     </brush>
12     <brush name="down_content_brush_normal" kind="linear_gradient" gradient_angle="0">
13       <main_color r="128" g="128" b="128" a="255"/>
14       <gradient_color r="160" g="160" b="160" a="255"/>
15     </brush>
16     
17     <brush name="up_content_brush_hot" kind="linear_gradient" gradient_angle="0">
18       <main_color r="224" g="224" b="255" a="255"/>
19       <gradient_color r="192" g="192" b="255" a="255"/>
20     </brush>
21     <brush name="down_content_brush_hot" kind="linear_gradient" gradient_angle="0">
22       <main_color r="128" g="128" b="255" a="255"/>
23       <gradient_color r="160" g="160" b="255" a="255"/>
24     </brush>
25     
26     <brush name="up_content_brush_press" kind="linear_gradient" gradient_angle="0">
27       <main_color r="224" g="224" b="255" a="255"/>
28       <gradient_color r="160" g="160" b="255" a="255"/>
29     </brush>
30     <brush name="down_content_brush_press" kind="linear_gradient" gradient_angle="0">
31       <main_color r="32" g="32" b="255" a="255"/>
32       <gradient_color r="96" g="96" b="255" a="255"/>
33     </brush>
34     
35     <brush name="background_brush" kind="solid">
36       <main_color r="255" g="255" b="255" a="255"/>
37     </brush>
38     <brush name="text_brush" kind="solid">
39       <main_color r="0" g="0" b="0" a="255"/>
40     </brush>
41     <pen name="outer_border_pen" brush="outer_border_brush" endcap="round" join="round" weight="1"/>
42     <font name="text_font" face="微軟雅黑" size="18"/>
43   </resources>
44   <templates>
45     <template name="background">
46       <properties>
47         <property name="x" type="int" default="0"/>
48         <property name="y" type="int" default="0"/>
49         <property name="w" type="int" default="100"/>
50         <property name="h" type="int" default="100"/>
51         <property name="state" type="str" default="normal"/>
52         <property name="content" type="str" default=""/>
53       </properties>
54       <content>
55         <rectangle name="client" x="$x" y="$y" width="$w" height="$h">
56           <text brush="text_brush" font="text_font" text="$content" x="(client.width-this.width)/2" y="(client.height-this.height)/2"/>
57 
58           <rectangle brush="up_content_brush_normal" visible="$state=='normal'"
59                      x="0" y="0" width="client.width" height="client.height/2" />
60           <rectangle brush="down_content_brush_normal" visible="$state=='normal'"
61                      x="0" y="client.height/2" width="client.width" height="client.height/2+1" />
62 
63           <rectangle brush="up_content_brush_hot" visible="$state=='hot'"
64                      x="0" y="0" width="client.width" height="client.height*4/9" />
65           <rectangle brush="down_content_brush_hot" visible="$state=='hot'"
66                      x="0" y="client.height*4/9" width="client.width" height="client.height*5/9+1" />
67 
68           <rectangle brush="up_content_brush_press" visible="$state=='press'"
69                      x="0" y="0" width="client.width" height="client.height*5/9" />
70           <rectangle brush="down_content_brush_press" visible="$state=='press'"
71                      x="0" y="client.height*5/9" width="client.width" height="client.height*4/9+1" />
72         </rectangle>
73       </content>
74     </template>
75     <template name="button">
76       <properties>
77         <property name="x" type="int" default="0"/>
78         <property name="y" type="int" default="0"/>
79         <property name="w" type="int" default="100"/>
80         <property name="h" type="int" default="100"/>
81         <property name="state" type="str" default="normal"/>
82         <property name="content" type="str" default=""/>
83       </properties>
84       <content>
85         <rectangle name="border" brush="background_brush" pen="outer_border_pen" x="$x" y="$y" width="$w" height="$h">
86           <instance reference="background">
87             <setter name="x" value="1"/>
88             <setter name="y" value="1"/>
89             <setter name="w" value="border.client_width-2"/>
90             <setter name="h" value="border.client_height-2"/>
91             <setter name="state" value="$state"/>
92             <setter name="content" value="$content"/>
93           </instance>
94         </rectangle>
95       </content>
96     </template>
97   </templates>
98 </irconfig>

    程序由4個按鈕組成,4個按鈕都是button的實例化,但是只處理了最后一個按鈕的消息。因為現在只有畫圖,所以消息處理部分是手動的。下面是截圖:

    下面是代碼:
  1 class ConfigForm : public VL_WinForm
  2 {
  3 protected:
  4     IVL_IrFactory::Ptr                FFactory;
  5     IVL_IrCanvas::Ptr                FCanvas;
  6     VL_IrConfigLoader::Ptr            FLoader;
  7     VL_IrConfig::Ptr                FConfig;
  8     VL_IrTemplateInstance::Ptr        FNormalButton;
  9     VL_IrTemplateInstance::Ptr        FHotButton;
 10     VL_IrTemplateInstance::Ptr        FPressButton;
 11     VL_IrTemplateInstance::Ptr        FButton;
 12     VBool                            FClickedOnButton;
 13 
 14     VL_IrTemplateInstance::Ptr CreateButton(VL_IrPoint Position , VUnicodeString State , VUnicodeString Text)
 15     {
 16         VL_IrTemplateInstance::Ptr Instance=FConfig->FindTemplate(L"button")->CreateInstance();
 17         for(VInt i=0;i<Instance->GetRootElements().GetCount();i++)
 18         {
 19             FCanvas->GetRootElement()->Container()->AddChild(Instance->GetRootElements()[i]);
 20         }
 21 
 22         Instance->GetInts()[L"x"]=Position.X;
 23         Instance->GetInts()[L"y"]=Position.Y;
 24         Instance->GetInts()[L"w"]=100;
 25         Instance->GetInts()[L"h"]=30;
 26         Instance->GetStrs()[L"state"]=State;
 27         Instance->GetStrs()[L"content"]=Text;
 28         Instance->Update();
 29 
 30         return Instance;
 31     }
 32 
 33     VBool IsOnButton(VLS_MouseStruct Struct)
 34     {
 35         return FButton->GetRootElements()[0]->Properties()->ContainedPoint(VL_IrPoint(Struct.X,Struct.Y))!=IVL_IrElement::htrNone;
 36     }
 37 
 38     void Form_MouseDown(VL_Base* Sender , VLS_MouseStruct Struct)
 39     {
 40         FClickedOnButton=IsOnButton(Struct);
 41         FButton->GetStrs()[L"state"]=FClickedOnButton?L"press":L"normal";
 42         FButton->Update();
 43         FCanvas->Render();
 44     }
 45 
 46     void Form_MouseMove(VL_Base* Sender , VLS_MouseStruct Struct)
 47     {
 48         VUnicodeString PreviousState=FButton->GetStrs()[L"state"];
 49         if(FClickedOnButton)
 50         {
 51             FButton->GetStrs()[L"state"]=IsOnButton(Struct)?L"press":L"hot";
 52         }
 53         else if(Struct.LeftButton)
 54         {
 55             FButton->GetStrs()[L"state"]=IsOnButton(Struct)?L"hot":L"normal";
 56         }
 57         else
 58         {
 59             FButton->GetStrs()[L"state"]=IsOnButton(Struct)?L"hot":L"normal";
 60         }
 61         if(FButton->GetStrs()[L"state"]!=PreviousState)
 62         {
 63             FButton->Update();
 64             FCanvas->Render();
 65         }
 66     }
 67 
 68     void Form_MouseUp(VL_Base* Sender , VLS_MouseStruct Struct)
 69     {
 70         FClickedOnButton=false;
 71         FButton->GetStrs()[L"state"]=IsOnButton(Struct)?L"hot":L"normal";
 72         FButton->Update();
 73         FCanvas->Render();
 74     }
 75 public:
 76     ConfigForm():VL_WinForm(true)
 77     {
 78         SetBorder(vwfbSingle);
 79         SetMinimizeBox(false);
 80         SetMaximizeBox(false);
 81         SetClientWidth(800);
 82         SetClientHeight(600);
 83         SetText(L"Vczh Interaction Renderer Template Test");
 84 
 85         OnLeftButtonDown.Bind(this,&ConfigForm::Form_MouseDown);
 86         OnLeftButtonUp.Bind(this,&ConfigForm::Form_MouseUp);
 87         OnMouseMove.Bind(this,&ConfigForm::Form_MouseMove);
 88         FClickedOnButton=false;
 89 
 90         FFactory=CreateInteractionFactory(L"GDI");
 91         FCanvas=FFactory->CreateCanvas(this);
 92         FLoader=new VL_IrConfigLoader(FFactory);
 93         FConfig=FLoader->Load(VFileName(GetApplication()->GetAppName()).MakeAbsolute(L"..\\Renderer\\IrConfig_Test.xml").GetStrW());
 94 
 95         VL_IrBrushRec WhiteBrushRec;
 96         WhiteBrushRec.BrushKind=VL_IrBrushRec::bkSolid;
 97         WhiteBrushRec.MainColor=VL_IrColor(255,255,255);
 98         IVL_IrBrush::Ptr WhiteBrush=FFactory->CreateBrush(WhiteBrushRec);
 99 
100         IVL_IrRectangle::Ptr Root=FFactory->CreateRectangle();
101         Root->Properties()->SetBrush(WhiteBrush);
102         Root->Update(VL_IrPoint(0,0),VL_IrPoint(800,600));
103         FCanvas->SetRootElement(Root);
104 
105         FNormalButton=CreateButton(VL_IrPoint(10,10),L"normal",L"Normal");
106         FHotButton=CreateButton(VL_IrPoint(10,50),L"hot",L"Hot");
107         FPressButton=CreateButton(VL_IrPoint(10,90),L"press",L"Press");
108         FButton=CreateButton(VL_IrPoint(10,130),L"normal",L"Click Me");
109 
110         FCanvas->Render();
111     }
112 };

    程序創建了一個白色的全屏的長方形當背景,然后把button的四個實例產生的圖形都加入長方形中。使用類似的方法就可以將不同的東西堆疊起來,最后組成一個完整的程序界面了。接下來開始設計界面庫的架構,做一系列可以自動排版、基于MVC和上面那個模板的組件。
posted on 2009-08-20 05:38 陳梓瀚(vczh) 閱讀(4277) 評論(7)  編輯 收藏 引用 所屬分類: 2D

評論:
# re: C++界面庫:使用Graphic Element Template制作按鈕模板[未登錄] 2009-08-20 06:00 | megax
你的命名方式很奇怪。  回復  更多評論
  
# re: C++界面庫:使用Graphic Element Template制作按鈕模板[未登錄] 2009-08-20 21:27 | koobin
就等待老兄的IDE了,看好你的庫  回復  更多評論
  
# re: C++界面庫:使用Graphic Element Template制作按鈕模板 2009-08-21 01:19 | 99讀書人
是看見對方答復  回復  更多評論
  
# re: C++界面庫:使用Graphic Element Template制作按鈕模板 2009-08-23 07:14 | zheqian
you're amazing  回復  更多評論
  
# re: C++界面庫:使用Graphic Element Template制作按鈕模板 2009-08-24 18:09 | radar
令人驚嘆!  回復  更多評論
  
# re: C++界面庫:使用Graphic Element Template制作按鈕模板 2010-01-25 18:10 | 陳昱(CY)
今天弄蘋果開發,發現蘋果XCode的界面庫開發的內部機制和你這個是一樣的~~  回復  更多評論
  
# re: C++界面庫:使用Graphic Element Template制作按鈕模板 2010-01-27 09:40 | 陳梓瀚(vczh)
@陳昱(CY)
其實我抄了WPF  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲三级电影在线观看 | 在线亚洲一区观看| 美国十次成人| 久久亚洲不卡| 欧美成人精品不卡视频在线观看| 美女国内精品自产拍在线播放| 久久综合狠狠综合久久综合88| 蜜臀久久99精品久久久画质超高清| 美女图片一区二区| 亚洲韩国一区二区三区| 99国内精品| 欧美在线影院在线视频| 麻豆成人在线观看| 欧美亚日韩国产aⅴ精品中极品| 国产精品男女猛烈高潮激情| 黄色精品一区二区| 一区二区三区四区五区在线| 久久久久久久久久久成人| 亚洲激情校园春色| 欧美一区二区在线免费播放| 欧美精品在线免费| 国产一区二区精品久久91| 亚洲精品影院| 久久久噜噜噜久噜久久| 亚洲三级性片| 久久久精品国产99久久精品芒果| 欧美日韩国产一区二区三区| 国产午夜久久久久| av成人免费观看| 玖玖在线精品| 亚洲影视中文字幕| 欧美日韩国产精品一卡| 永久91嫩草亚洲精品人人| 亚洲欧美日韩国产中文| 亚洲国产一区二区精品专区| 久久爱www| 国产精品久久久久久久免费软件| 亚洲国产精品一区| 久久免费视频在线| 亚洲欧美日韩电影| 国产精品二区影院| 亚洲午夜激情免费视频| 欧美jizzhd精品欧美喷水 | 亚洲影视九九影院在线观看| 久久久噜噜噜久久中文字免 | 午夜久久久久久久久久一区二区| 欧美黄色大片网站| 亚洲激情偷拍| 亚洲第一视频| 欧美承认网站| 亚洲国产日韩欧美一区二区三区| 久久国产婷婷国产香蕉| 亚洲午夜精品久久久久久app| 欧美精品久久久久久久久老牛影院| 激情久久影院| 免费短视频成人日韩| 欧美一区免费视频| 精品9999| 欧美激情一区二区三区全黄| 狼狼综合久久久久综合网| 在线视频观看日韩| 免费影视亚洲| 欧美va天堂va视频va在线| 亚洲国产成人在线播放| 欧美成人资源网| 欧美国产精品日韩| 中日韩美女免费视频网址在线观看 | 小处雏高清一区二区三区| 在线亚洲电影| 国产精品美女xx| 翔田千里一区二区| 欧美一区二区大片| 在线观看日韩精品| 亚洲片国产一区一级在线观看| 欧美激情无毛| 亚洲欧美国产制服动漫| 先锋a资源在线看亚洲| 激情另类综合| 亚洲精品视频中文字幕| 国产精品美腿一区在线看 | 欧美国产精品| 午夜欧美大尺度福利影院在线看| 亚洲欧美在线免费| 在线精品亚洲| 一区二区高清视频| 国产在线精品自拍| 91久久午夜| 国产精品免费一区豆花| 久久亚洲欧美国产精品乐播| 国产精品久久久久久久久| 国产一区二区日韩精品欧美精品| 久久亚洲视频| 欧美日韩国产一级片| 久久福利精品| 欧美精品一区二区三区蜜桃 | 在线观看91精品国产麻豆| 亚洲免费观看视频| 黄网动漫久久久| 一本色道久久综合亚洲精品不| 国产亚洲欧美另类中文| 亚洲精品一区二区三区在线观看| 国产视频精品va久久久久久| 亚洲国产一区二区三区青草影视| 国产麻豆日韩| 亚洲精品久久久一区二区三区| 国产一区二区黄| 国产精品99久久久久久久久久久久 | 欧美a级片网站| 国产精品一区久久| 91久久精品国产91久久性色tv| 国产日韩综合一区二区性色av| 日韩亚洲一区二区| 91久久精品视频| 久久av一区二区三区漫画| 亚洲一区二区三区精品在线观看| 美女诱惑黄网站一区| 久久亚洲风情| 国产精自产拍久久久久久| 日韩亚洲欧美一区二区三区| 亚洲精品专区| 欧美刺激午夜性久久久久久久| 另类天堂av| 国内精品久久久久久久影视蜜臀| 亚洲免费在线播放| 亚洲欧美激情一区| 欧美午夜不卡在线观看免费| 亚洲美女在线看| 一区二区欧美国产| 欧美日韩高清在线| 亚洲精品一区二区三区在线观看| 亚洲精品免费电影| 欧美成人中文| 亚洲二区免费| 日韩午夜激情电影| 欧美日韩在线播放三区| 亚洲日本中文| 亚洲图片在线观看| 国产精品久久久久久久第一福利| 一区二区免费在线观看| 亚洲在线视频网站| 国产精品亚发布| 欧美制服丝袜| 免费在线观看成人av| 亚洲国内高清视频| 欧美日本韩国一区| 亚洲一区二区三区四区五区黄 | 麻豆精品在线观看| 国产欧美在线观看一区| 亚洲视频在线一区观看| 亚洲欧美制服另类日韩| 国产精品亚洲激情| 久久精品女人的天堂av| 欧美激情一区二区| 亚洲一区久久久| 国产日韩欧美二区| 久久人人精品| 99国内精品久久| 欧美一区二区视频在线观看| 国产一区日韩欧美| 嫩草伊人久久精品少妇av杨幂| 亚洲国产精品一区二区久 | 亚洲黑丝在线| 欧美日韩一区在线观看视频| 亚洲视频成人| 狼人社综合社区| 中文亚洲免费| 国产综合网站| 欧美日韩国产二区| 久久精品人人做人人综合| 亚洲国产精品第一区二区| 亚洲一二三四久久| 激情久久久久久久| 国产精品草莓在线免费观看| 久久高清国产| 一本久久综合亚洲鲁鲁五月天| 免费不卡视频| 亚洲淫性视频| 亚洲理论在线| 韩国久久久久| 国产精品国产自产拍高清av| 另类春色校园亚洲| 亚洲欧美综合精品久久成人| 亚洲国产一成人久久精品| 久久九九国产| 亚洲欧美一区二区精品久久久| 最新国产成人在线观看| 国产精品一区二区你懂得 | 99伊人成综合| 亚洲国产精品第一区二区三区| 久久国产精品99久久久久久老狼| 日韩网站在线| 亚洲人成小说网站色在线 | 午夜精品久久久久久久蜜桃app| 亚洲国产视频一区二区| 国产在线视频欧美| 国产精品一区久久| 国产精品免费一区二区三区在线观看 | 久久精品国产一区二区电影| 亚洲天堂成人在线视频| 9色porny自拍视频一区二区|