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

隨筆-341  評(píng)論-2670  文章-0  trackbacks-0
    GacUI新增了一個(gè)Demo。這里模擬了一個(gè)簡單到過頭了的編輯程序。界面是一個(gè)標(biāo)簽頁,第一頁里面只有一個(gè)按鈕:Add Page。點(diǎn)中了他之后,其它頁包含一個(gè)用來關(guān)掉自己的按鈕,和一個(gè)多行的文本框。

    這個(gè)Demo要展示的其中一個(gè)問題是,在按下關(guān)閉按鈕的時(shí)候,由于那個(gè)Page會(huì)被移除并刪除,會(huì)導(dǎo)致按鈕自己也被刪除。但是事件發(fā)生過后,實(shí)際上還有很多事情要做的。所以這里展示了如何使用GacUI進(jìn)行“延遲執(zhí)行”,在事件結(jié)束之后再刪除自己。為了方便,這個(gè)Demo使用了C++11(但是庫的實(shí)現(xiàn)并不依賴與C++11)。先上圖:





    然后我們來看代碼:

#include "..\..\Public\Source\GacUIIncludes.h"
#include 
<Windows.h>

int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int CmdShow)
{
    
return SetupWindowsDirect2DRenderer();
}

class TextBoxPage : public GuiTabPage
{
private:
    
static int pageCounter;

    GuiButton
*                closeButton;
    GuiMultilineTextBox
*    textBox;

    
void closeButton_Clicked(GuiGraphicsComposition* sender, GuiEventArgs& arguments)
    {
        
// deleteing the tab page will also delete the button, because the button is in the page
        
// when an event is processing, the button is not going to be deleted
        
// because there are many works to do after this event
        
// and maybe someone has already added another event handler to this button
        
// so it use GetApplication()->InvokeInMainThread to send a function to the queue
        
// so that this function will be executed after this input message (an input message raises multiple events)
        
// to the user, this page is closed after cliking this button
        GetApplication()->InvokeInMainThread([this]()
        {
            
// remove the page and delete it
            this->GetOwnerTab()->RemovePage(this);
            delete 
this;
        });
    }

    
void OnPageContainerReady(GuiGraphicsComposition* sender, GuiEventArgs& arguments)
    {
        
// create a table to place a button and a text box
        GuiTableComposition* table=new GuiTableComposition;
        table
->SetRowsAndColumns(21);
        table
->SetRowOption(0, GuiCellOption::MinSizeOption());
        table
->SetRowOption(1, GuiCellOption::PercentageOption(1.0));
        table
->SetColumnOption(0, GuiCellOption::PercentageOption(1.0));
        table
->SetAlignmentToParent(Margin(0000));
        table
->SetCellPadding(2);

        {
            GuiCellComposition
* cell=new GuiCellComposition;
            table
->AddChild(cell);
            cell
->SetSite(0011);
            
            closeButton
=g::NewButton();
            closeButton
->SetText(L"Close Me!");
            closeButton
->Clicked.AttachMethod(this&TextBoxPage::closeButton_Clicked);
            cell
->AddChild(closeButton->GetBoundsComposition());
        }
        
        {
            GuiCellComposition
* cell=new GuiCellComposition;
            table
->AddChild(cell);
            cell
->SetSite(1011);
            
            textBox
=g::NewMultilineTextBox();
            textBox
->GetBoundsComposition()->SetAlignmentToParent(Margin(0000));
            textBox
->SetText(L"You can input several lines of text here.\r\nThis is a multiple line text box.");
            cell
->AddChild(textBox->GetBoundsComposition());
        }

        
this->GetContainer()->GetContainerComposition()->AddChild(table);
    }

public:
    TextBoxPage()
        :closeButton(
0)
        ,textBox(
0)
    {
        PageContainerReady.AttachMethod(
this&TextBoxPage::OnPageContainerReady);
        
this->SetText(L"Page "+itow(++pageCounter));
    }

    
~TextBoxPage()
    {
    }
};

int TextBoxPage::pageCounter=0;

class TextBoxPageWindow : public GuiWindow
{
private:
    GuiTab
*                        tabControl;
    GuiTabPage
*                    controlPanelPage;
    GuiButton
*                    buttonAddPage;

    
void buttonAddPage_Clicked(GuiGraphicsComposition* sender, GuiEventArgs& arguments)
    {
        
// when the button is clicked, it creates a new TextBoxPage and adds it to the tab control
        TextBoxPage* page=new TextBoxPage;
        tabControl
->CreatePage(page);
        tabControl
->SetSelectedPage(page);
    }
public:
    TextBoxPageWindow()
        :GuiWindow(GetCurrentTheme()
->CreateWindowStyle())
    {
        
this->SetText(L"Controls.Tab.TextBoxPage");
        
this->GetBoundsComposition()->SetPreferredMinSize(Size(640480));

        
// create a tab control
        tabControl=g::NewTab();
        tabControl
->GetBoundsComposition()->SetAlignmentToParent(Margin(2222));
        
this->AddChild(tabControl);

        
// the first page is a control panel
        controlPanelPage=tabControl->CreatePage();
        controlPanelPage
->SetText(L"Control Panel");

        
// add a button to the control panel
        buttonAddPage=g::NewButton();
        buttonAddPage
->SetText(L"Add a tab page");
        buttonAddPage
->Clicked.AttachMethod(this&TextBoxPageWindow::buttonAddPage_Clicked);
        controlPanelPage
->GetContainer()->GetContainerComposition()->SetInternalMargin(Margin(2222));
        controlPanelPage
->GetContainer()->AddChild(buttonAddPage);

        
this->ForceCalculateSizeImmediately();
        
this->MoveToScreenCenter();
    }

    
~TextBoxPageWindow()
    {
    }
};

void GuiMain()
{
    GuiWindow
* window=new TextBoxPageWindow();
    GetApplication()
->Run(window);
    delete window;
}

    那一大段的注釋,就是在講延遲執(zhí)行的事情。看過C++11的人都知道,lambda expression實(shí)際上就是一個(gè)functor。在舊C++里面,調(diào)用InvokeInMainThread的時(shí)候,要么可以傳一個(gè)void(*)(void*)和void*,要么可以傳一個(gè)帶operator()()的struct。在新C++里面,直接把lambda expression寫在里面就好了。

    如果不使用延遲執(zhí)行,在事件發(fā)生的時(shí)候把自己刪掉,會(huì)導(dǎo)致Access Violation的發(fā)生,因?yàn)榻酉聛硪L問的對(duì)象被你刪掉了。如果使用延遲執(zhí)行,就可以在input message處理完之后,執(zhí)行刪除的代碼。這樣一切都是好的。

    下一個(gè)Demo就是關(guān)于文本框的操作,再下一個(gè)Demo是關(guān)于如何做用來顯示代碼的高亮文本框的事情。敬請(qǐng)期待,啊哈哈哈。
posted on 2012-04-30 23:28 陳梓瀚(vczh) 閱讀(2048) 評(píng)論(2)  編輯 收藏 引用 所屬分類: GacUI

評(píng)論:
# re: GacUI Demo:標(biāo)簽頁 2012-05-01 06:31 | CY
AttachMethod如果是只有一個(gè)響應(yīng)或者最后一個(gè)響應(yīng)里面delete自己,應(yīng)該能僥幸沒事不?  回復(fù)  更多評(píng)論
  
# re: GacUI Demo:標(biāo)簽頁 2012-05-01 09:55 | 陳梓瀚(vczh)
@CY
不能  回復(fù)  更多評(píng)論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            裸体一区二区| 欧美国产亚洲视频| 日韩午夜中文字幕| 欧美亚洲在线播放| 亚洲一级影院| 欧美激情中文字幕在线| 噜噜噜91成人网| 国产精品外国| 亚洲性av在线| 亚洲欧美视频一区二区三区| 欧美人与禽猛交乱配视频| 另类尿喷潮videofree| 国产欧美日韩在线播放| 亚洲午夜精品福利| 亚洲一区在线播放| 欧美日韩国产综合网| 亚洲国产一区二区三区青草影视| 国产一区二区精品丝袜| 性欧美xxxx大乳国产app| 午夜在线精品| 国产欧美日韩免费| 亚洲综合色噜噜狠狠| 午夜视频久久久| 国产精品理论片在线观看| 99在线精品观看| 亚洲欧美变态国产另类| 国产精品免费观看视频| 亚洲欧美www| 久久国产精彩视频| 国产一区二区高清不卡| 久久狠狠亚洲综合| 牛人盗摄一区二区三区视频| 一区二区三区在线观看视频| 久久亚洲捆绑美女| 欧美丰满高潮xxxx喷水动漫| 亚洲精品美女在线观看| 欧美电影在线观看完整版| 欧美高清视频免费观看| 欧美暴力喷水在线| 国内精品视频一区| 国内精品久久久| 亚洲国产精品视频| 这里只有视频精品| 欧美一区二区三区免费大片| 国产深夜精品福利| 美女视频网站黄色亚洲| 亚洲三级视频| 亚洲欧美制服另类日韩| 国产亚洲精品一区二555| 久久久久久久网| 亚洲欧洲一二三| 欧美一级久久久久久久大片| 精久久久久久| 欧美久久在线| 午夜亚洲视频| 亚洲国产综合在线| 欧美在线视频日韩| 亚洲国产免费看| 国产精品毛片一区二区三区 | 中日韩视频在线观看| 国产精品丝袜白浆摸在线| 久久精品国产精品亚洲| 亚洲精品美女免费| 久久久国产精品一区二区三区| 亚洲国产清纯| 国产美女精品视频| 欧美成人免费小视频| 亚洲欧美激情视频在线观看一区二区三区 | 99精品久久久| 国产欧美二区| 欧美日韩福利在线观看| 欧美一区二区视频在线观看| 亚洲精品久久久久久久久久久久久 | 亚洲视频观看| 亚洲成色777777女色窝| 国产精品免费看久久久香蕉| 欧美1区2区3区| 午夜久久久久久久久久一区二区| 亚洲激情影视| 久久综合久色欧美综合狠狠| 亚洲伊人伊色伊影伊综合网 | 99亚洲精品| 精品不卡在线| 国产日产亚洲精品系列| 欧美乱大交xxxxx| 久久久久天天天天| 亚洲欧美日韩另类| 亚洲精品国精品久久99热一| 巨乳诱惑日韩免费av| 欧美在线观看一区二区三区| 日韩午夜一区| 亚洲区一区二区三区| 黑人操亚洲美女惩罚| 国产精品看片资源| 欧美午夜片欧美片在线观看| 欧美国产日韩精品免费观看| 久久天堂精品| 老牛嫩草一区二区三区日本| 欧美在线关看| 欧美在线一二三四区| 性刺激综合网| 亚洲综合视频网| 亚洲婷婷综合色高清在线| 亚洲毛片在线免费观看| 亚洲欧洲三级| 亚洲免费av观看| 日韩视频一区二区三区在线播放免费观看 | 久久躁狠狠躁夜夜爽| 久久久久在线| 老鸭窝91久久精品色噜噜导演| 久久人人97超碰国产公开结果| 久久国产精品免费一区| 久久久国产午夜精品| 久久久久青草大香线综合精品| 久久精品在线视频| 久久综合一区二区| 蜜臀av一级做a爰片久久| 欧美电影打屁股sp| 欧美啪啪成人vr| 国产精品久久久久久久久果冻传媒| 欧美小视频在线| 国产精品系列在线| 黄色成人精品网站| 亚洲精品国精品久久99热| 亚洲精品孕妇| 亚洲午夜久久久| 久久成人免费网| 老色批av在线精品| 亚洲激情亚洲| 亚洲一区国产视频| 亚洲免费影院| 乱人伦精品视频在线观看| 欧美激情国产日韩精品一区18| 国产精品s色| 黄色另类av| 99国产一区| 久久gogo国模裸体人体| 欧美国产日韩视频| 一区二区三区蜜桃网| 欧美在线观看日本一区| 欧美黑人在线观看| 国产精品区二区三区日本| 狠狠色丁香婷婷综合影院| 亚洲激情在线观看| 亚洲一区在线播放| 麻豆精品国产91久久久久久| 亚洲精品一区二区三区婷婷月 | 亚洲欧美春色| 免费成人黄色| 国产精品无人区| 亚洲精品久久嫩草网站秘色 | 99精品视频免费观看| 午夜精品区一区二区三| 欧美大片在线观看一区| 一区二区三区久久久| 美女黄网久久| 国产精品亚发布| 99伊人成综合| 你懂的网址国产 欧美| 亚洲午夜精品久久| 欧美成人在线免费观看| 国产亚洲激情视频在线| 亚洲视屏在线播放| 欧美成人一区二区在线| 午夜精品婷婷| 欧美性大战久久久久久久蜜臀| **网站欧美大片在线观看| 欧美一级理论性理论a| 亚洲精品日产精品乱码不卡| 久久久青草婷婷精品综合日韩 | 亚洲精品国产欧美| 久久精品人人做人人爽| 亚洲视频1区2区| 欧美国产成人在线| 在线国产亚洲欧美| 久久激情综合| 亚洲在线成人| 欧美日韩在线观看一区二区三区 | 久久狠狠婷婷| 国产免费亚洲高清| 亚洲摸下面视频| 99这里只有精品| 欧美日韩精品伦理作品在线免费观看| 一区二区三区亚洲| 久久午夜激情| 久久国产精品毛片| 国产亚洲综合在线| 欧美在线播放| 亚洲欧美福利一区二区| 国产美女诱惑一区二区| 午夜精品久久久久影视 | 久久久亚洲国产天美传媒修理工 | 91久久精品国产91久久性色| 麻豆久久久9性大片| 亚洲第一狼人社区| 欧美暴力喷水在线| 女人天堂亚洲aⅴ在线观看| 亚洲欧洲偷拍精品| 最新中文字幕亚洲| 欧美日韩视频第一区|