亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 03.3.2 在窗口中顯示按鈕(1).txt

?? 網(wǎng)上第一本以TXT格式的VC++深入詳解孫鑫的書.全文全以TXT格式,并每一章節(jié)都分了目錄,清晰易讀
?? TXT
字號:
3.3.2  在窗口中顯示按鈕
為了更好地理解窗口類、窗口類對象和窗口之間的關(guān)系,我們接下來實(shí)現(xiàn)在窗口中顯示一個按鈕這一功能,仍在已有的Test程序中實(shí)現(xiàn)。首先需要創(chuàng)建一個按鈕類對象,按鈕對應(yīng)的MFC類是CButton類,其繼承層次結(jié)構(gòu)如圖3.24所示,從而可以得知CButton類派生于CWnd類。



圖3.24  CButton類的繼承層次結(jié)構(gòu)

在MFC提供的資源類中,有些類的對象的構(gòu)造(包括對象構(gòu)造與初始化)直接通過其構(gòu)造函數(shù)就可以完成。也就是說,這些對象的構(gòu)造函數(shù)包含這個對象的初始化操作。但有些對象的產(chǎn)生除了調(diào)用構(gòu)造函數(shù)外,還需要調(diào)用其他一些函數(shù)來進(jìn)行初始化的工作,然后才能使用該對象。

對于一個CButton對象,在定義之后就可以使用了。但是作為一個窗口類對象,即CWnd對象,如果在構(gòu)造之后還需要產(chǎn)生這個窗口的話,還需要調(diào)用CreateEx函數(shù)來完成初始化工作。也就是說,如果要顯示一個按鈕的話,在定義這個CButton類對象之后,即調(diào)用CButton類的構(gòu)造函數(shù)之后,還需要調(diào)用CButton的Create函數(shù)創(chuàng)建這個按鈕窗口,從而把按鈕窗口與CButton對象關(guān)聯(lián)起來。

CButton的Create函數(shù)聲明如下。

BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );

各個參數(shù)的意義如下所述。

n  lpszCaption

指定按鈕控件的文本。

n  dwStyle

指定按鈕控件的風(fēng)格。按鈕控件不僅具有按鈕風(fēng)格類型,還具有窗口風(fēng)格類型。多種風(fēng)格類型可以通過位或操作加以組合。

n  rect

指定按鈕控件的大小和位置。該參數(shù)是RECT結(jié)構(gòu)體類型,通過指定左上角和右下角兩個點(diǎn)的坐標(biāo)定義一個矩形。結(jié)構(gòu)體也是一種特殊的類,所以可以用類CRect來構(gòu)造一個RECT結(jié)構(gòu)體。

n  pParentWnd

指定按鈕控件的父窗口。這是一個CWnd類型的指針。MFC中不再通過窗口句柄,而是通過一個與窗口相關(guān)的C++窗口類對象指針來傳遞窗口對象。

n  nID

指定按鈕控件的標(biāo)識。

為了在框架窗口上產(chǎn)生一個按鈕控件,顯然應(yīng)該是在框架窗口產(chǎn)生之后,再創(chuàng)建該按鈕控件,否則沒有地方放置它。窗口創(chuàng)建時都會產(chǎn)生WM_CREATE消息,CMainFrame類提供一個OnCreate函數(shù),該函數(shù)就是用來響應(yīng)這條窗口創(chuàng)建消息的。該函數(shù)的默認(rèn)實(shí)現(xiàn)代碼如例3-22所示。

例3-22

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)

        return -1;

    

    if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

        | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

        !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

    {

        TRACE0("Failed to create toolbar\n");

        return -1;      // fail to create

    }

 

    if (!m_wndStatusBar.Create(this) ||

        !m_wndStatusBar.SetIndicators(indicators,

          sizeof(indicators)/sizeof(UINT)))

    {

        TRACE0("Failed to create status bar\n");

        return -1;      // fail to create

    }

 

    // TODO: Delete these three lines if you don't want the toolbar to

    //  be dockable

    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

    EnableDocking(CBRS_ALIGN_ANY);

    DockControlBar(&m_wndToolBar);

 

    return 0;

}

從例3-22所示代碼可知,CMainFrame類的OnCreate函數(shù)首先調(diào)用基類CFrameWnd的OnCreate函數(shù),創(chuàng)建一個窗口,然后創(chuàng)建工具條(m_wndToolBar)和狀態(tài)欄(m_ wndStatusBar)對象。我們可以在該函數(shù)的最后完成按鈕的創(chuàng)建工作,即在return語句之前添加例3-23所示代碼中加灰顯示的代碼。

例3-23

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

……

    CButton btn;

    btn.Create("按鈕",WS_CHILD | BS_DEFPUSHBUTTON,CRect(0,0,100,100),this, 123);

 

    return 0;

}

其中,將該按鈕的名稱設(shè)置為“按鈕”,其位置由CRect(0,0,100,100)這一矩形確定,ID號為123。前面已經(jīng)講過,按鈕控件不僅具有按鈕風(fēng)格類型,還具有窗口風(fēng)格類型,因此,在按鈕的Create函數(shù)中指定該按鈕具有WS_CHILD窗口風(fēng)格類型,同時還具有BS_DEFPUSHBUTTON按鈕風(fēng)格類型,即下按按鈕風(fēng)格。

另外,我們知道每個對象都有一個this指針,代表對象本身。為了使按鈕控件的父窗口就是框架窗口,這里可以直接將代表CMainFrame對象的this指針作為參數(shù)傳遞給按鈕的Create函數(shù)。

編譯并運(yùn)行Test程序,但發(fā)現(xiàn)按鈕并沒有顯示出來。問題的原因有兩個:一是這里定義的btn對象是個局部對象,當(dāng)執(zhí)行到OnCreate函數(shù)的右大括號(})時,該對象的生命周期就結(jié)束了,就會發(fā)生析構(gòu)。前面已經(jīng)講過,如果一個窗口與一個C++窗口類對象相關(guān)聯(lián),當(dāng)這個C++對象生命周期結(jié)束時,該對象在析構(gòu)時通常會把與之相關(guān)聯(lián)的窗口資源進(jìn)行回收。這就是說,當(dāng)執(zhí)行到例3-22所示的OnCreate函數(shù)的右大括號時,剛剛創(chuàng)建的btn窗口就被與之相關(guān)的C++對象銷毀了。因此,不能將這個按鈕對象定義為一個局部對象。解決方法是:將其定義為CMainFrame類的一個成員變量,可以將其訪問權(quán)限定義為private類型以實(shí)現(xiàn)信息隱藏。

有多種方法可以定義一個類的成員變量,可以直接在該類的定義中添加成員變量定義代碼,也可以利用VC++提供的工具來定義。后者的方法是:在ClassView標(biāo)簽頁中的類名上單擊鼠標(biāo)右鍵,從彈出的快捷菜單上選擇【Add member variable…】菜單命令,將彈出Add Member Variable對話框。通常,在定義類的成員變量名稱時都以“m_”為前綴,表明這個變量是類的一個成員變量。在添加成員變量對話框的Variable Type(變量類型)文本框中輸入變量類型CButton,Variable Name(變量名稱)文本框中輸入按鈕對象名稱m_btn,并為其選擇private類型的訪問權(quán)限,如圖3.25所示。



圖3.25  Add Member Variable對話框

然后單擊對話框上的【OK】按鈕,即可以在CMainFrame類的頭文件中看到新成員變量的定義,代碼如下:

private:

    CButton m_btn;

修改例3-23所示CMainFrame類OnCreate函數(shù)中創(chuàng)建按鈕的代碼,刪除局部按鈕對象的定義,并將按鈕創(chuàng)建函數(shù)的對象名稱改為m_btn,結(jié)果如例3-24所示。

例3-24

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

……

    m_btn.Create("按鈕",WS_CHILD | BS_DEFPUSHBUTTON,CRect(0,0,100,100), this,123);

 

    return 0;

}

再次運(yùn)行Test程序,將會發(fā)現(xiàn)按鈕還沒有出現(xiàn)。這一問題的第二個原因就是在一個窗口創(chuàng)建完成之后,應(yīng)該將這個窗口顯示出來。因此,需要在調(diào)用Create函數(shù)之后再添加一條窗口顯示代碼,如例3-25所示。

例3-25

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

……

1. m_btn.Create("按鈕",WS_CHILD | BS_DEFPUSHBUTTON,CRect(0,0,100,100), this,123);

2. m_btn.ShowWindow(SW_SHOWNORMAL);

 

    return 0;

}

再次運(yùn)行Test程序,這時就可以看到按鈕出現(xiàn)了,如圖3.26所示。



圖3.26  在框架窗口中顯示按鈕

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一三区三区四区免费在线看 | 国产综合色精品一区二区三区| 欧美手机在线视频| 亚洲第一二三四区| 91精品国产91综合久久蜜臀| 久久国产精品一区二区| 欧美激情在线观看视频免费| 成人av影院在线| 亚洲国产你懂的| 精品少妇一区二区三区日产乱码 | 色呦呦一区二区三区| 一区二区三区四区av| 91精品国产全国免费观看| 国模套图日韩精品一区二区| 中日韩av电影| 欧美视频日韩视频在线观看| 精品系列免费在线观看| 国产精品伦一区| 精品视频一区二区不卡| 韩日欧美一区二区三区| 亚洲男同性恋视频| 日韩欧美成人激情| a级精品国产片在线观看| 性久久久久久久| 欧美国产精品一区二区| 欧美人与性动xxxx| 成人免费观看视频| 日本vs亚洲vs韩国一区三区| 欧美国产精品久久| 3atv一区二区三区| va亚洲va日韩不卡在线观看| 美女久久久精品| 亚洲欧美一区二区不卡| 久久综合给合久久狠狠狠97色69| 972aa.com艺术欧美| 麻豆国产精品777777在线| 一色屋精品亚洲香蕉网站| 欧美xxxxxxxx| 欧美日韩一卡二卡| 国产成人av电影免费在线观看| 日韩中文字幕不卡| 亚洲人成精品久久久久久 | 制服丝袜亚洲色图| 91视频免费看| 国产乱码一区二区三区| 天堂av在线一区| 亚洲激情在线播放| 亚洲国产精品精华液ab| 欧美zozo另类异族| 欧美一区二区三区在线看| 欧美中文一区二区三区| 成人精品国产一区二区4080| 国产精品一区二区久久不卡| 美女脱光内衣内裤视频久久网站| 一区二区三区日韩| 亚洲欧美一区二区三区孕妇| 欧美国产成人在线| 国产亚洲人成网站| 精品国产免费久久| 日韩一区二区三区三四区视频在线观看| 一本一本久久a久久精品综合麻豆| 国产成人亚洲综合a∨猫咪| 久久国产精品免费| 老司机精品视频在线| 免费亚洲电影在线| 日韩国产欧美在线视频| 日一区二区三区| 亚洲v日本v欧美v久久精品| 亚洲一区二区三区四区的| 一区二区三区欧美视频| 一区二区三区免费在线观看| 亚洲乱码一区二区三区在线观看| 自拍视频在线观看一区二区| 国产精品欧美综合在线| 国产精品美女久久久久久久久久久 | 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产v综合v亚洲欧| 国产一区二区看久久| 韩国理伦片一区二区三区在线播放| 久久国内精品视频| 国产专区欧美精品| 国产成人午夜99999| 成人激情文学综合网| 色综合久久综合| 欧美视频一区二区三区| 91麻豆精品国产| 日韩精品一区在线| 久久九九国产精品| 中文字幕在线不卡一区| 亚洲女性喷水在线观看一区| 亚洲成a人片在线观看中文| 青青草一区二区三区| 国产在线视频一区二区三区| 国产成人免费视频网站 | 国产精品免费视频一区| 亚洲欧洲日韩女同| 亚洲成国产人片在线观看| 免播放器亚洲一区| 国产成人精品一区二区三区网站观看| 床上的激情91.| 欧亚一区二区三区| 日韩一区二区精品在线观看| 国产午夜精品福利| 一级做a爱片久久| 免费久久精品视频| 成人综合激情网| 在线观看日韩电影| 欧美xxxxx裸体时装秀| 中文字幕一区二区三区视频| 亚洲午夜久久久久中文字幕久| 久久精品久久99精品久久| www.欧美日韩| 日韩一区二区精品在线观看| 国产精品丝袜在线| 青娱乐精品视频在线| 高清成人免费视频| 欧美日韩激情一区| 中文字幕第一页久久| 婷婷国产v国产偷v亚洲高清| 国产成人免费视频网站| 欧美蜜桃一区二区三区| 国产精品无人区| 日本午夜一本久久久综合| 99天天综合性| 欧美videos中文字幕| 亚洲另类中文字| 国产曰批免费观看久久久| 欧美系列日韩一区| 国产精品黄色在线观看| 男人操女人的视频在线观看欧美| 99久久精品国产麻豆演员表| 日韩免费视频一区| 亚洲国产日韩在线一区模特 | 91香蕉视频mp4| 精品国产乱码久久久久久蜜臀 | 91亚洲精品久久久蜜桃| 精品免费视频一区二区| 无吗不卡中文字幕| 色999日韩国产欧美一区二区| 久久婷婷一区二区三区| 天天射综合影视| 欧美在线一二三| 国产精品久久久久影院| 国产精品一区一区三区| 日韩欧美国产电影| 日韩精品国产欧美| 欧美无乱码久久久免费午夜一区| 日韩一区在线免费观看| 高清成人免费视频| 久久久国产一区二区三区四区小说 | 伊人色综合久久天天人手人婷| 国产**成人网毛片九色| 久久美女高清视频| 国模冰冰炮一区二区| 精品欧美一区二区久久| 麻豆成人免费电影| 日韩视频免费观看高清在线视频| 日韩高清在线观看| 91麻豆精品国产| 蜜臀久久99精品久久久画质超高清 | 久久久av毛片精品| 国产一区二区剧情av在线| 久久久亚洲综合| 国产在线精品一区二区 | 国产精品国产精品国产专区不蜜| 国产久卡久卡久卡久卡视频精品| 久久久欧美精品sm网站| 国产一区二区免费看| 国产视频911| 成人午夜av电影| 一区二区中文字幕在线| 91色视频在线| 亚洲成人av一区二区| 在线成人高清不卡| 琪琪一区二区三区| 精品sm在线观看| 成人高清av在线| 一区二区三区在线影院| 欧美日韩高清不卡| 欧美aaaaaa午夜精品| 精品国产髙清在线看国产毛片| 黄色精品一二区| 国产精品视频观看| 色综合久久88色综合天天免费| 亚洲成人在线免费| 精品精品国产高清一毛片一天堂| 国产成人在线观看| 有码一区二区三区| 日韩欧美精品在线| 成人亚洲精品久久久久软件| 亚洲乱码一区二区三区在线观看| 欧美精品123区| 国产一区二区电影| 一区二区久久久| 日韩一区二区三区三四区视频在线观看 | 国产成人av福利| 夜夜嗨av一区二区三区网页 | 日韩一区二区免费在线电影| 国产在线一区观看| 亚洲六月丁香色婷婷综合久久|