• <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>
            隨筆-341  評(píng)論-2670  文章-0  trackbacks-0
                今天我給GacUI添加了一個(gè)新Demo。我發(fā)現(xiàn)寫Demo也是一個(gè)測(cè)試的過程,可以用來檢驗(yàn)類庫提供的API是否夠完整。前面這兩個(gè)Demo都促使我往類庫里面加入了新的函數(shù)。這次的Demo是用Label控件來模仿超鏈接。下載最新代碼之后,可以在“Libraries\GacUI\GacUIDemo\GacUIDemo.sln”下面找到最新的Demo代碼。

                為了模仿超鏈接,我們要做兩件事情。第一件事情就是鼠標(biāo)懸浮在Label上的時(shí)候需要顯示出手的光標(biāo)圖,第二件事情就是在鼠標(biāo)進(jìn)入Label的時(shí)候顯示下劃線,離開的時(shí)候去掉下劃線。因此我們需要監(jiān)聽三個(gè)事件,分別是MouseEnter,MouseLeave和LeftButtonDown。下面是Demo的圖:

                上圖:鼠標(biāo)在Label外。下圖:鼠標(biāo)在Label內(nèi)。單擊Label的時(shí)候會(huì)打開瀏覽器。



                代碼如下:

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

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

            class HyperlinkWindow : public GuiWindow
            {
            private:
                GuiLabel
            *                labelHyperlink;

                
            void labelHyperlink_OnMouseEnter(GuiGraphicsComposition* sender, GuiEventArgs& arguments)
                {
                    FontProperties font
            =labelHyperlink->GetFont();
                    font.underline
            =true;
                    labelHyperlink
            ->SetFont(font);
                }

                
            void labelHyperlink_OnMouseLeave(GuiGraphicsComposition* sender, GuiEventArgs& arguments)
                {
                    FontProperties font
            =labelHyperlink->GetFont();
                    font.underline
            =false;
                    labelHyperlink
            ->SetFont(font);
                }

                
            void labelHyperlink_OnLeftButtonDown(GuiGraphicsComposition* sender, GuiMouseEventArgs& arguments)
                {
                    ShellExecute(NULL, L
            "OPEN", L"http://www.shnenglu.com/vczh", NULL, NULL, SW_SHOWNORMAL);
                }
            public:
                HyperlinkWindow()
                    :GuiWindow(GetCurrentTheme()
            ->CreateWindowStyle())
                {
                    SetText(L
            "Controls.Label.Hyperlink");
                    SetClientSize(Size(
            300200));
                    MoveToScreenCenter();

                    labelHyperlink
            =g::NewLabel();
                    labelHyperlink
            ->SetText(L"http://www.shnenglu.com/vczh");
                    labelHyperlink
            ->SetTextColor(Color(00255));
                    {
                        FontProperties font;
                        font.fontFamily
            =L"Segoe UI";
                        font.size
            =18;
                        font.antialias
            =true;
                        labelHyperlink
            ->SetFont(font);
                    }
                    {
                        INativeCursor
            * hand=GetCurrentController()->ResourceService()->GetSystemCursor(INativeCursor::Hand);
                        labelHyperlink
            ->GetBoundsComposition()->SetAssociatedCursor(hand);
                    }
                    labelHyperlink
            ->GetEventReceiver()->mouseEnter.AttachMethod(this&HyperlinkWindow::labelHyperlink_OnMouseEnter);
                    labelHyperlink
            ->GetEventReceiver()->mouseLeave.AttachMethod(this&HyperlinkWindow::labelHyperlink_OnMouseLeave);
                    labelHyperlink
            ->GetEventReceiver()->leftButtonDown.AttachMethod(this&HyperlinkWindow::labelHyperlink_OnLeftButtonDown);
                    AddChild(labelHyperlink);
                }

                
            ~HyperlinkWindow()
                {
                }
            };

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

                這里展示的主要是監(jiān)聽事件的方法。在使用control->GetEventReceiver()->event的時(shí)候,可以使用Attach、AttachMethod、AttachFunction和AttachLambda。AttachLambda傳入一個(gè)functor,在C++11里面可以直接使用lambda表達(dá)式。在這里使用AttachMethod給一個(gè)事件綁定類成員函數(shù)。C++運(yùn)行類成員函數(shù)的時(shí)候,不僅需要參數(shù),還需要一個(gè)this對(duì)象,所以AttachMethod有兩個(gè)參數(shù),使用方法在Demo里面已經(jīng)展現(xiàn)出來了。

                在這里還引入了GetCurrentController函數(shù)。GetCurrentController返回的INativeController對(duì)象抽象了所有需要的操作系統(tǒng)的功能,其中獲得一個(gè)光標(biāo)的對(duì)象就封裝在了ResourceService里面。INativeController還包含了很多其他的Service,這個(gè)留在以后的Demo展示。
            posted on 2012-04-24 02:37 陳梓瀚(vczh) 閱讀(2117) 評(píng)論(8)  編輯 收藏 引用 所屬分類: GacUI

            評(píng)論:
            # re: GacUI Demo:使用Label控件模仿超鏈接 2012-04-24 06:27 | Zblc(邱震鈺)
            # re: GacUI Demo:使用Label控件模仿超鏈接 2012-04-24 23:05 | 嵌入式培訓(xùn)
            嗯,確實(shí)是  回復(fù)  更多評(píng)論
              
            # re: GacUI Demo:使用Label控件模仿超鏈接 2012-04-24 23:18 | 陳梓瀚(vczh)
            @cymheart
            其實(shí)我的架構(gòu)正是這么干的,就是api還沒有做到那一步。而且對(duì)于簡(jiǎn)單的情況,也要有簡(jiǎn)單的api可以用。這樣用起來才舒服。  回復(fù)  更多評(píng)論
              
            # re: GacUI Demo:使用Label控件模仿超鏈接 2012-04-25 23:41 | cymheart
            暈,LZ怎么把我的評(píng)論刪了??  回復(fù)  更多評(píng)論
              
            # re: GacUI Demo:使用Label控件模仿超鏈接[未登錄] 2012-04-26 01:50 | 陳梓瀚(vczh)
            @cymheart
            cppblog出了bug他自己沒掉的  回復(fù)  更多評(píng)論
              
            # re: GacUI Demo:使用Label控件模仿超鏈接 2012-04-26 08:16 | CY
            正想說,直接把開發(fā)時(shí)的測(cè)試代碼拿來當(dāng)demo就搞定了~  回復(fù)  更多評(píng)論
              
            # re: GacUI Demo:使用Label控件模仿超鏈接 2012-04-26 18:45 | 陳梓瀚(vczh)
            @CY
            demo的作用是教學(xué),怎可隨便寫。  回復(fù)  更多評(píng)論
              
            久久精品国产亚洲AV高清热| 久久播电影网| 亚洲精品tv久久久久久久久久| 久久免费视频网站| 国产精品毛片久久久久久久| 国产午夜福利精品久久2021| 国产精品久久久久影院色 | 午夜精品久久久久久久| 欧美亚洲国产精品久久高清| 亚洲欧美成人久久综合中文网| 亚洲精品乱码久久久久久蜜桃| 久久人做人爽一区二区三区| 亚洲国产精品无码久久久秋霞2 | 办公室久久精品| 国产精品永久久久久久久久久| 国产精品免费久久久久影院| 久久久久久A亚洲欧洲AV冫| 亚洲va久久久久| 久久精品黄AA片一区二区三区| 久久精品一区二区| 久久久久久久久久久免费精品| 久久精品国产乱子伦| 久久久老熟女一区二区三区| 日韩一区二区久久久久久 | 老司机国内精品久久久久| 国产A级毛片久久久精品毛片| 无码国内精品久久人妻麻豆按摩| 色偷偷久久一区二区三区| 蜜桃麻豆www久久| 久久人做人爽一区二区三区 | 精品国产VA久久久久久久冰 | 久久伊人色| 精品久久久久中文字幕日本 | 精品多毛少妇人妻AV免费久久| 久久精品aⅴ无码中文字字幕不卡| 国产免费福利体检区久久| 久久99热这里只有精品国产| 久久99精品国产麻豆不卡| 亚洲乱码精品久久久久..| 日本久久中文字幕| 国产精品久久久久久久|