久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

狀態(tài)欄設計 CStatusBar

 株野 2018-08-11

來源:http://blog.sina.com.cn/s/blog_4b3c1f950100b2pa.html

標簽:狀態(tài)欄  CStatusBar

6.3  狀態(tài)欄設計

狀態(tài)欄用于顯示應用程序當前的狀態(tài),、系統(tǒng)時間或其他上下文信息等。例如顯示菜單和工具欄的提示信息,,可以將狀態(tài)欄分成多個面板進而顯示不同的信息,。

6.3.1  狀態(tài)欄類CStatusBar

在MFC類庫中,提供了CStatusBar類用于設計狀態(tài)欄,,CStatusBar類的主要方法如下,。

(1)Create方法:該方法用于創(chuàng)建狀態(tài)欄窗口。語法如下:

BOOL Create( CWnd* pParentWnd, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_BOTTOM,

UINT nID = AFX_IDW_STATUS_BAR );

參數(shù)如下

     pParentWnd:標識狀態(tài)欄父窗口,。

     dwStyle:標識狀態(tài)欄風格,。可選值如下:

             CBRS_TOP:狀態(tài)欄位于框架窗口的頂部,。

             CBRS_BOTTOM:狀態(tài)欄位于框架窗口的底部,。

             CBRS_NOALIGN:當父窗口重新調(diào)整尺寸時不重新定位狀態(tài)欄,。

     nID:標識狀態(tài)欄ID。

(2)CreateEx方法:該方法與Create方法類似,,用于創(chuàng)建狀態(tài)欄窗口,,只是該方法支持擴展風格。語法如下:

BOOL CreateEx( CWnd* pParentWnd, DWORD dwCtrlStyle = 0 ,DWORD dwStyle = WS_CHILD |

WS_VISIBLE | CBRS_BOTTOM,UINT nID = AFX_IDW_STATUS_BAR );

參數(shù)如下

     pParentWnd:標識父窗口指針,。

     dwCtrlStyle:標識狀態(tài)欄的擴展風格,。可選值如下,。

             SBARS_SIZEGRIP:在狀態(tài)欄的右側有一個調(diào)整大小的狀態(tài)欄控件,,它是一個特別      的區(qū)域,可以單擊并拖動它來調(diào)整父窗口的大小,。

             SBT_TOOLTIPS:狀態(tài)欄支持工具提示,。

     dwStyle:標識窗口風格。

     nID:標識狀態(tài)欄ID,。

(3)SetIndicators方法:該方法用于向狀態(tài)欄中添加面板,,并設置面板ID。語法如下:

BOOL SetIndicators( const UINT* lpIDArray, int nIDCount );

參數(shù)如下

     lpIDArray:標識一個無符號整型數(shù)組,,該數(shù)組中包含了面板ID,。

     nIDCount:用于標識數(shù)組元素數(shù)量。

(4)CommandToIndex方法:該方法用于根據(jù)面板ID返回面板索引,。語法如下:

int CommandToIndex( UINT nIDFind ) const;

參數(shù)如下

     nIDFind:標識面板ID,。

返回值:返回值是面板ID對應的面板索引,如果面板ID沒有關聯(lián)的面板,,返回值為-1,。

(5)GetItemID方法:該方法與CommandToIndex方法是相對的,用于根據(jù)面板索引返回面板ID,。語法如下:

UINT GetItemID( int nIndex ) const;

參數(shù)如下

     nIndex:標識面板ID,。

(6)GetItemRect方法:該方法用于獲取某個面板的顯示區(qū)域。語法如下:

void GetItemRect( int nIndex, LPRECT lpRect ) const;

參數(shù)如下

     nIndex:標識面板ID,。

     lpRect:用于接收面板的顯示區(qū)域,。

(7)GetPaneInfo方法:該方法用于獲取面板信息。語法如下:

void GetPaneInfo( int nIndex, UINT& nID, UINT& nStyle, int& cxWidth ) const;

參數(shù)如下

     nIndex:標識面板索引,。

     nID:用于接收面板ID,。

     nStyle:用于接收面板風格。

     cxWidth:用于接收面板寬度,。

(8)GetPaneStyle方法:該方法用于獲取面板風格,。語法如下:

UINT GetPaneStyle( int nIndex ) const;

參數(shù)如下

     nIndex:標識面板索引。

返回值:面板風格,。

(9)GetPaneText方法:該方法用于獲取面板文本,。語法如下:

CString GetPaneText( int nIndex ) const;

void GetPaneText( int nIndex, CString& rString ) const;

參數(shù)如下

     nIndex:標識面板索引,。

     rString:用于接收面板文本。

(10)GetStatusBarCtrl方法:該方法用于返回底層的通用狀態(tài)欄控件,。語法如下:

CStatusBarCtrl& GetStatusBarCtrl( ) const;

(11)SetPaneStyle方法:該方法用于設置面板[g2] 風格。語法如下:

void SetPaneStyle( int nIndex, UINT nStyle );

參數(shù)如下

     nIndex:標識面板索引,。

     nStyle:標識面板風格,。

(12)SetPaneText方法:該方法用于設置面板文本。語法如下:

BOOL SetPaneText( int nIndex, LPCTSTR lpszNewText, BOOL bUpdate = TRUE );

參數(shù)如下

     nIndex:標識面板ID,。

     lpszNewText:標識面板文本,。

     bUpdate:標識是否立即更新面板。

(13)SetPaneInfo方法:該方法用于設置面板基本信息,。語法如下:

void SetPaneInfo( int nIndex, UINT nID, UINT nStyle, int cxWidth );

參數(shù)如下

     nIndex:標識面板索引,。

     nID:表示設置的面板ID。

     nStyle:表示設置的面板風格,。

     cxWidth:表示設置的面板寬度,。

6.3.2  狀態(tài)欄的創(chuàng)建

在應用程序窗口的最下方就是狀態(tài)欄,狀態(tài)欄可以顯示應用程序的狀態(tài)等信息,。本節(jié)來介紹一下如何創(chuàng)建狀態(tài)欄,。

(1)創(chuàng)建一個基于對話框的應用程序。

(2)在主窗口的頭文件中聲明一個CStatusBar類對象m_StatusBar,,代碼如下:

CStatusBar m_StatusBar;

(3)在主窗口的OnInitDialog函數(shù)中創(chuàng)建狀態(tài)欄,,代碼如下:

BOOL CStatusBarDlg::OnInitDialog()

{

    ……

    UINT array[3];

    for(int i=0;i<3;i++)

    {

       array[i] = 100+i;

    }

    m_StatusBar.Create(this); //創(chuàng)建狀態(tài)欄窗口

    m_StatusBar.SetIndicators(array,sizeof(array)/sizeof(UINT)); //添加面板

    for(int n=0;n<3;n++)

    {

       m_StatusBar.SetPaneInfo(n,array[n],0,130); //設置面板寬度

    }

    //設置面板文本

    m_StatusBar.SetPaneText(0,"當前用戶");

    m_StatusBar.SetPaneText(1,"mrkj");

    m_StatusBar.SetPaneText(2,"逍逍自在,敢將功名盡棄");

    RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); //顯示狀態(tài)欄

    return TRUE;

}

程序運行結果如圖6.38所示,。

 

圖6.38  狀態(tài)欄的創(chuàng)建

6.3.3  在狀態(tài)欄中顯示滾動字幕

在應用程序中經(jīng)常會看到文本可以進行滾動的狀態(tài)欄,。下面就來看一下如何在狀態(tài)欄中顯示滾動字幕。

(1)創(chuàng)建一個基于對話框的應用程序,。

(2)在主窗口的頭文件中聲明一個CStatusBar類對象m_StatusBar,,代碼如下:

CStatusBar m_StatusBar;

(3)在主窗口的OnInitDialog函數(shù)中創(chuàng)建狀態(tài)欄,代碼如下:

BOOL CStatusTextDlg::OnInitDialog()

{

    ……

    // TODO: Add extra initialization here

    UINT array[3];

    for(int i=0;i<3;i++)

    {

       array[i] = 100+i;

    }

    m_StatusBar.Create(this); //創(chuàng)建狀態(tài)欄窗口

    m_StatusBar.SetIndicators(array,sizeof(array)/sizeof(UINT)); //添加面板

    for(int n=0;n<3;n++)

    {

       m_StatusBar.SetPaneInfo(n,array[n],0,130); //設置面板寬度

    }

    //設置面板文本

    m_StatusBar.SetPaneText(0,"當前用戶");

    m_StatusBar.SetPaneText(1,"mrkj");

    m_StatusBar.SetPaneText(2,"                滿目山河空念遠");

    RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

    SetTimer(1,300,NULL); //設置定時器

    return TRUE;  // return TRUE  unless you set the focus to a control

}

(4)處理WM_TIMER消息,,設置定時器是為了定時設置要滾動顯示的字符串,,代碼如下:

void CStatusTextDlg::OnTimer(UINT nIDEvent)

{

    CString sText,sleft,sright;

    int len;

    sText = m_StatusBar.GetPaneText(2); //獲得狀態(tài)欄第3個面板的顯示字符

    len = sText.GetLength();             

    sright = sText.Left(2);

    sleft = sText.Right(len-2);

    sText = sleft + sright;

    m_StatusBar.SetPaneText(2,sText); //設置狀態(tài)欄第3個面板的顯示字符

    CDialog::OnTimer(nIDEvent);

}

通過不斷改變狀態(tài)欄第3個面板的顯示字符,從而達到顯示滾動字幕的效果,,如圖6.39所示,。

 

圖6.39  在狀態(tài)欄中顯示滾動字幕

6.3.4  帶進度條的狀態(tài)欄

狀態(tài)欄多用于顯示程序執(zhí)行的狀態(tài)信息。但是,,如果程序正在執(zhí)行一個任務,,狀態(tài)欄將如何描述程序當前的執(zhí)行進度呢?最好的辦法是在狀態(tài)欄中放置一個進度條控件,,由進度條控件來顯示程序的執(zhí)行進度,。下面就來看一下如何在狀態(tài)欄中放置進度條控件,。

 

(1)創(chuàng)建一個基于對話框的應用程序。

(2)向對話框中添加一個進度條控件,,通過類向導為進度條控件添加變量m_Progress,。

(3)在主窗口的頭文件中聲明一個CStatusBar類對象m_StatusBar,代碼如下:

CStatusBar m_StatusBar;

(4)在主窗口的OnInitDialog函數(shù)中創(chuàng)建狀態(tài)欄,,代碼如下:

BOOL CStatusBarDlg::OnInitDialog()

{

    ……

    UINT array[4];

    for(int i=0;i<4;i++)

    {

       array[i] = 100+i;

    }

    m_StatusBar.Create(this); //創(chuàng)建狀態(tài)欄窗口

    m_StatusBar.SetIndicators(array,sizeof(array)/sizeof(UINT)); //添加面板

    for(int n=0;n<4;n++)

    {

       m_StatusBar.SetPaneInfo(n,array[n],0,90); //設置面板寬度

    }

    //設置面板文本

    m_StatusBar.SetPaneText(0,"當前用戶:");

    m_StatusBar.SetPaneText(1,"mrkj");

    m_StatusBar.SetPaneText(2,"當前狀態(tài):");

    RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); //顯示狀態(tài)欄

    RECT m_rect;

    m_StatusBar.GetItemRect(3,&m_rect); //獲取第4個面板的區(qū)域   

    m_Progress.SetParent(&m_StatusBar); //設置進度條的父窗口為狀態(tài)欄

    m_Progress.MoveWindow(&m_rect);      //設置進度條顯示的位置

    m_Progress.ShowWindow(SW_SHOW);      //顯示進度條控件

    m_Progress.SetRange(0,100);           //設置進度條范圍

    m_Progress.SetPos(70);                 //設置進度條當前位置

    return TRUE;

}

程序運行結果如圖6.40所示,。

 

圖6.40  帶進度條的狀態(tài)欄

6.3.5  狀態(tài)欄控制類CStatusBarCtrl

除了使用CStatusBar可以創(chuàng)建狀態(tài)欄以外,還可以使用CStatusBarCtrl類,。CStatusBarCtrl類提供了Windows通用狀態(tài)欄控件的功能,。它是一個水平的窗口,通常顯示在父窗口的底部,,可以分割為多個窗格,,在其中應用程序可以顯示不同類型的狀態(tài)信息。

CStatusBarCtrl類的主要方法如表6.2所示,。

表6.2                                                   CStatusBarCtrl類主要方法表

方   

描   

Create

創(chuàng)建狀態(tài)欄并將它與一個CStatusBarCtrl類對象連接

SetText

設置狀態(tài)欄的給定窗格中的文本

GetText

獲取狀態(tài)欄的給定窗格中的文本

GetTextLength

獲取狀態(tài)欄的給定窗格中的文本字符數(shù)表示的長度

SetParts

設置狀態(tài)欄中分割的窗格數(shù),,及每個部分的右邊坐標

GetParts

獲取狀態(tài)欄中分割的窗格數(shù)

GetBorders

獲取狀態(tài)欄的水平或垂直邊界的對齊寬度

續(xù)表

方   

描   

SetMinHeight

設置狀態(tài)欄繪制區(qū)域的最小高度

SetSimple

指定狀態(tài)欄是顯示文本還是顯示由上一次調(diào)用SetParts所設置的窗格

GetRect

獲取狀態(tài)欄中的一個窗格的邊界矩形

IsSimple

檢查狀態(tài)欄是否處于簡單模式

GetTipText

獲取狀態(tài)欄中的一個窗格的提示文本

SetTipText

設置狀態(tài)欄中的一個窗格的提示文本

SetBkColor

設置狀態(tài)欄窗格的背景顏色

SetIcon

設置狀態(tài)欄窗格圖標

DrawItem

繪制狀態(tài)欄外觀

下面使用CStatusBarCtrl類創(chuàng)建一個狀態(tài)欄。

 

步驟如下:

(1)創(chuàng)建一個基于對話框的應用程序,。

(2)在主窗口的頭文件中聲明一個CStatusBarCtrl類對象m_StatusBar,,代碼如下:

CStatusBarCtrl m_StatusBar;

(3)在主窗口的OnInitDialog函數(shù)中創(chuàng)建狀態(tài)欄,代碼如下,。

BOOL CStatusCtrlDlg::OnInitDialog()

{

    ……

    m_StatusBar.Create(WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),this,1100);

    int width[]={200,340,480};

    m_StatusBar.SetParts(3, &width[0]);

    m_StatusBar.SetText("吉林省明日科技有限公司",0,0);

    m_StatusBar.SetText("當前用戶:mrkj",0,1);

    CTime t;

    t = CTime::GetCurrentTime();

    CString strdate;

    strdate.Format("當前日期:%s",t.Format("%y-%m-%d"));

    m_StatusBar.SetText(strdate,0,2);

    return TRUE;

}

程序運行結果如圖6.41所示,。

 

圖6.41  使用CStatusBarCtrl類創(chuàng)建狀態(tài)欄

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多