CStatic控制項的基本使用

來源:互聯網
上載者:User

CStatic 繼承於 CWnd,是一種特殊的表單。他可以顯示文本字串(這也是最常用的用法)、表徵圖、指標(cursor)、位元影像和增強圖文元件. 通常靜態控制項不提供輸入和輸出。但是如果把他的屬性設定為 SS_NOTIFY,他可以通知其父視窗的擊滑鼠事件。<br />一。CStatic 用於顯示文本</p><p> 如果文本不變,可以直接設定其 Caption。如果想在運行過程中改變其顯示文本,可以用如下方式:</p><p>CStatic *pStatic=(CStatic*)GetDlgItem(IDC_STATIC);<br />pStatic->SetWindowText("Just a Test of Static Control!");<br />二。CStatic 用於顯示表徵圖</p><p> 如果要顯示表徵圖,則必須要設定視窗屬性為 SS_ICON 和 SS_CENTERIMAGE,執行個體代碼如下:</p><p>CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC);<br />LONG style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);style |= SS_ICON;<br />style |= SS_CENTERIMAGE;<br />SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE,style);<br />pStatic->SetIcon(m_hIcon);<br />三。CStatic 用於顯示指標 cursor</p><p> 如果要顯示 cursor,則必須要設定視窗屬性為 SS_ICON 和 SS_CENTERIMAGE,執行個體代碼如下:</p><p>CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC);<br />LONG style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);<br />style |= SS_ICON;<br />style |= SS_CENTERIMAGE;<br />SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE,style);<br />pStatic->SetCursor(OnQueryDragIcon());<br />四。CStatic 用於顯示位元影像</p><p> 如果要顯示表徵圖,則必須要設定視窗屬性為 SS_BITMAP 和 SS_CENTERIMAGE,執行個體代碼如下:</p><p>//獲得指向靜態控制項的指標<br />CStatic *pStatic=(CStatic*)GetDlgItem(IDC_STATIC);<br />//獲得位元影像控制代碼<br />HBITMAP hBitmap=::LoadBitmap(AfxGetApp()->m_hInstance,<br /> MAKEINTRESOURCE(IDB_BITMAP2));<br />//LONG result = SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE,style);<br />//設定靜態控制項的樣式,使其可以使用位元影像,並試位標顯示使置中<br />pStatic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);<br />//設定靜態控制項顯示位元影像<br />pStatic->SetBitmap(hBitmap); </p><p>文章出處:CSDN </p><p>使用Visual C++ 6.0編製軟體時,靜態控制項是最常用的控制項之一。一般情況下,靜態控制項用作那些沒有固定標題文字屬性的控制項(如文本編輯控制項、列表框等)的標籤,或者用來為控制項分組,或者用來顯示一些提示性的檔案。實際上,靜態控制項除了顯示靜態文本這一準系統外,還有許多其他的特殊功能,如在靜態控制項中可以顯示表徵圖、位元影像,甚至還可以在靜態控制項中顯示動畫。本文將通過樣本程式來介紹靜態控制項的這些特殊用法。<br />  <br />  1. 顯示表徵圖<br />  ⑴ 使用AppWizard建立一個基於對話方塊的MFC應用程式,設定其工程名為ShowIco。<br />  ⑵ 在對話方塊上增加一個靜態控制項。需要注意的是,有資源管理員添加的靜態控制項在預設情況下其ID均為IDC_STATIC,因此,如果需要在程式中區分和操縱各個不同的靜態控制項,一般情況下,需要更改新添加的靜態控制項的ID值。這裡將靜態控制項的ID值設定為IDC_SHOWICO。<br />  ⑶ 在資源管理員中添加表徵圖資源,其ID為IDI_ICON1。<br />  ⑷ 使用ClassWizard添加WM_INITDIALOG訊息處理函數OnInitDialog。<br />  ⑸ 在OnInitDialog函數中下面的代碼:<br />  //獲得指向靜態控制項的指標<br />  CStatic *pStatic=(CStatic *)GetDlgItem(IDC_SHOWICO);<br />  //載入表徵圖<br />  HICON hIcon=AfxGetApp()->LoadIcon(IDI_ICON1);<br />  //設定靜態控制項的樣式,使其可以使用表徵圖,並試表徵圖顯示使置中<br />  pStatic->ModifyStyle(0xF,SS_ICON|SS_CENTERIMAGE);<br />  //設定靜態控制項表徵圖<br />  pStatic->SetIcon(hIcon);<br />  運行該程式,顯示如。<br />  <br />  2.顯示位元影像<br />  ⑴ 使用AppWizard建立一個基於對話方塊的MFC應用程式,設定其工程名為ShowBmp。<br />  ⑵ 在對話方塊上增加一個靜態控制項,將靜態控制項的ID值設定為IDC_SHOWBMP。<br />  ⑶ 在資源管理其中添加位元影像資源,其ID為IDB_INFO。<br />  ⑷ 使用ClassWizard添加WM_INITDIALOG訊息處理函數OnInitDialog。<br />  ⑸ 在OnInitDialog函數中下面的代碼:<br />  //獲得指向靜態控制項的指標<br />  CStatic *pStatic=(CStatic *)GetDlgItem(IDC_SHOWBMP);<br />  //獲得位元影像控制代碼<br />  HBITMAP Bitmap=::LoadBitmap(AfxGetApp()_hInstance,<br />    MAKINTRESOURCE(IDB_INFO));<br />  //設定靜態控制項的樣式,使其可以使用位元影像,並試位標顯示使置中<br />  pStatic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);<br />  //設定靜態控制項顯示位元影像<br />  pStatic->SetBitmap(hBitmap);<br />  運行該程式即可。<br />  <br />  3. 顯示動畫<br />  編寫一個字串在靜態控制項中不停的移動的程式。<br />  ⑴ 使用AppWizard建立一個基於對話方塊的MFC應用程式,設定其工程名為ShowAnimation。<br />  ⑵ 在對話方塊上增加一個靜態控制項。將靜態控制項的ID值設定為IDC_PREVIEW。<br />  ⑶ 使用ClassWizard添加WM_INITDIALOG訊息處理函數OnInitDialog和WM_TIMER的訊息處理函數OnTimer。<br />  ⑷ 在CshowAnimationDlg類中,增加兩個變數m_x和m_y,用以表示字串的座標。<br />  ⑸ 在OnInitDialog函數中添加下列代碼:<br />   m_x=0;<br />   m_y=0;<br />    KillTimer(1);<br />   VERIFY(SetTimer(1, 500, NULL) != 0);<br />  1. 在CshowAnimationDlg類中,增加一個成員函數Draw()如下:<br />  void CshowAnimationDlg::Draw()<br />   {<br />    CWnd *pWnd=GetDlgItem(IDC_PREVIEW);<br />  CDC *pDC=pWnd->GetDC();<br />  RECT rect;<br />   pWnd->GetClientRect(&rect);<br />  pWnd->Invalidate();<br />  pWnd->UpdateWindow();<br />   pDC->SelectStockObject(BLACK_BRUSH);<br />  pDC->Rectangle(0,0,rect.right,rect.bottom);<br />   pDC->SetTextColor(RGB(255,0,0));<br />  pDC->SetBkColor(RGB(0,0,0));<br />  if((m_x>=rect.right)||(m_y>=rect.bottom-20))<br />  { m_x=0;<br />  m_y=0;<br />    }<br />  pDC->TextOut(m_x,m_y,/"動畫/");<br />   }<br />  2. 在OnTimer函數中,添加如下代碼:<br />     if (nIDEvent == 1)<br />    {<br />    m_x+=5;<br />    m_y+=5;<br />    Draw();<br />     }<br />   else CWnd::OnTimer(nIDEvent);</p><p>MFC中 CStatic類(靜態控制項類)</p><p>【說明】CStatic類提供了一個Windows靜態控制項的功能。一個靜態控制項可以用來顯示一<br />個文本字串、方框、矩形、表徵圖、游標、位元影像或增強圖元檔案。它可以被用來作為<br />標籤、方框或用來分隔其它的控制項。靜態控制項通常不接收輸入,也不提供輸出;但是,<br />如果它具有SS_NOTIFY風格,則它可以通知其父有關裝置點擊的訊息。<br />建立一個靜態控制項分兩步。首先,調用建構函式來構造一個CStatic類的對象,然後調用<br />成員函數Create來建立此靜態控制項並將它分配給當前的CStatic類的對象。<br />如果你是在一個對話方塊中建立了一個靜態控制項(通過一個對話方塊資源),則當使用者關閉這<br />個對話方塊時, CStatic類的對象被自動銷毀。<br />如果你是在一個視窗中建立了一個CStatic類的對象,則可能需要你自己來銷毀它。在一<br />個視窗的堆棧中建立的CStatic類的對象將自動被銷毀。如果你是使用new函數在堆中創<br />建CStatic類的對象,則當你使用完後,必須調用delete來銷毀這個CStatic類的對象。</p><p>【庫 名】<afxwin.h></p><p>【成員函數】</p><p>(1)BOOL Create(LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pP<br />arentWnd, UINT nID = 0xffff);<br />【傳回值】如果本成員函數調用成功則返回非零值;否則返回0。<br />【參 數】<br />lpszText<br />指定要放置在靜態控制項中的文本。如果是NULL,則表示沒有文本是可見的。<br />dwStyle<br />指定靜態控制項的視窗風格。以下任何靜態控制項風格的組合都可以用於這個控制項。<br />SS_BITMAP<br />指定在靜態控制項中顯示一個被定義在資源檔中的位元影像。該風格將忽略靜態控制項的高度<br />和寬度,靜態控制項將根據位元影像的大小自動調節自身的尺寸。<br />SS_BLACKFRAME<br />建立一個黑色的邊框。<br />SS_BLACKRECT<br />建立一個黑色的矩形。<br />SS_CENTER<br />使文字在靜態控制項中水平置中。<br />SS_CENTERIMAGE<br />當靜態控制項用於顯示文本時,該風格將使文本在靜態控制項中垂直置中。當靜態控制項用於<br />顯示位元影像或表徵圖時,該風格將使位元影像或表徵圖在靜態控制項中垂直置中,當位元影像或表徵圖小於<br />靜態控制項時,靜態控制項將使用位元影像或表徵圖左上方的點的顏色填充空白處。<br />SS_ENHMETAFILE<br />指定在靜態控制項中顯示一個增強型圖元檔案。該風格將不會忽略靜態控制項的高度和寬度<br />,而圖元檔案將調節自身的大小來適應靜態控制項的尺寸。<br />SS_ETCHEDFRAME<br />建立一個浮雕邊框。<br />SS_ETCHEDHORZ<br />建立一個邊框,並將頂端邊框設定為浮雕風格。<br />SS_ETCHEDVERT<br />建立一個邊框,並將左側邊框設定為浮雕風格。<br />SS_GRAYFRAME<br />建立一個灰色的邊框。<br />SS_GRAYRECT<br />建立一個灰色的矩形。<br />SS_ICON<br />指定在靜態控制項中顯示一個被定義在資源檔中的表徵圖。該風格將忽略靜態控制項的高度<br />和寬度,靜態控制項將根據位元影像的大小自動調節自身的尺寸。<br />SS_LEFT<br />使文字在靜態控制項中靠左對齊。<br />SS_LEFTNOWORDWRAP<br />在預設情況下,靜態控制項把’/n’和’/t’都作為換行標記。只有在設定本風格後,靜<br />態控制項才把’/t’看作是製表鍵(預設時製表鍵的寬度為8個字元的寬度)。<br />SS_NOPREFIX<br />該標誌表示終止對前置詞字元的處理。通常,本成員函數將首碼助記符’&’解釋為一個指<br />令,即在’&’後面的字元下面劃一底線。並且將’&&’解釋成一個單個的’&’指令<br />。通過指令指定該標誌,這種處理就不再進行了。<br />SS_NOTIFY<br />在預設情況下,靜態控制項是不響應滑鼠事件的。只有在設定該風格後,當使用者單擊靜態<br />控制項時,靜態控制項才向父視窗發送STN_CLICKED通知。<br />SS_OWNERDRAW<br />在指定該風格後,當靜態控制項在視覺外觀發生變化時,該靜態控制項的屬主視窗將響應WM<br />_DRAWITEM訊息。<br />SS_RIGHT<br />使文字在靜態控制項中靠左對齊。<br />SS_SIMPLE<br />只顯示一行文本,文本不能被剪下或替換(父視窗不能處理CTLCOLOR訊息)。<br />SS_SUNKEN<br />設定一個下沉的靜態控制項,當靜態控制項為一個方框時,方框的四邊下沉;當靜態控制項為<br />一個矩形時,整個矩形下沉。<br />SS_USERITEM<br />建立一個使用者自訂項目。<br />SS_WHITEFRAME<br />建立一個白色的邊框。<br />SS_WHITERECT<br />建立一個白色的矩形。<br />rect<br />指定靜態控制項的位置和大小。它可以是一個RECT結構類型的資料或一個CRect類的對象。</p><p>pParentWnd<br />指定CStatic類的對象的父視窗,通常是一個CDialog類的對象。它不能是NULL。<br />nID = 0xffff<br />指定靜態控制項的控制項標識。<br />【注釋】在使用靜態控制項顯示文本而且沒有設定SS_LEFTNOWORDWRAP風格時,’/n’和<br />’/t’都憂患行的作用。兩者的區別是在一行文本的長度大於靜態控制項的寬度時使用’<br />/n’換行將使該行文本的下一行也為空白行,但使用’/t’則無此現象。</p><p>(2)CStatic();<br />【注 釋】構造一個空的CStatic類的對象。</p><p>(3)HBITMAP GetBitmap() const;<br />【傳回值】返回一個當前位元影像的控制代碼,如果沒有設定位元影像,則返回NULL。<br />【注釋】此成員函數用來擷取先前用成員函數SetBitmap設定的與CStatic類的對象關聯<br />的位元影像控制代碼。</p><p>(4)HCURSOR GetCursor();<br />【傳回值】返回一個當前表徵圖控制代碼。如果沒有設定表徵圖則返回NULL。<br />【注釋】此成員函數用來擷取先前用成員函數SetCursor設定的與CStatic類的對象關聯<br />的游標控制代碼。</p><p>(5)HENHMETAFILE GetEnhMetaFile() const;<br />【傳回值】返回一個當前增強圖元檔案控制代碼。如果沒有設定增強圖元檔案則返回NULL<br />【注釋】此成員函數用來擷取先前用成員函數SetEnhMetaFile設定的與CStatic類的對<br />象關聯的增強圖元檔案控制代碼。</p><p>(6)HICON GetIcon();<br />【傳回值】返回一個當前表徵圖控制代碼。如果沒有設定增強表徵圖則返回NULL。<br />【注釋】此成員函數用來擷取先前用成員函數SetIcon設定的與CStatic對象關聯關聯的<br />表徵圖控制代碼。</p><p>(7)HBITMAP SetBitmap(HBITMAP hBitmap) const;<br />【傳回值】返回先前與此靜態控制項關聯的位元影像的控制代碼。如果沒有與此靜態控制項關聯的位<br />圖,則返回NULL。<br />【參 數】<br />hBitmap<br />要繪製在此靜態控制項中的位元影像控制代碼。<br />【注釋】此成員函數用來將一個新的位元影像與此靜態控制項關聯。這個位元影像將被自動繪製在<br />此靜態控制項中。預設的,它將被繪製在左上方,並且此靜態控制項將根據位元影像的大小來調<br />整尺寸。使用此成員函數必須設定風格SS_BITMAP。</p><p>(8)HCURSOR SetCursor(HCURSOR hCursor);<br />【傳回值】返回先前與此靜態控制項關聯的游標的控制代碼。如果沒有與此靜態控制項關聯的光<br />標,則返回NULL。<br />【參 數】<br />hCursor<br />要繪製在此靜態控制項中的游標控制代碼。<br />【注釋】此成員函數用來將一個新的游標與此靜態控制項關聯。這個游標將被自動繪製在<br />此靜態控制項中。預設的,它將被繪製在左上方,並且此靜態控制項將根據游標的大小來調<br />整尺寸。使用此成員函數必須設定風格SS_ICON。</p><p>(9)HENHMETAFILE SetEnhMetaFile(HENHMETAFILE hMetaFile);<br />【傳回值】返回先前與此靜態控制項關聯的增強圖元檔案的控制代碼。如果沒有與此靜態控制項<br />關聯的增強圖元檔案,則返回NULL。<br />【參 數】<br />hMetaFile<br />要繪製在此靜態控制項中的增強圖元檔案控制代碼。<br />【注釋】此成員函數用來將一個新的增強圖元檔案與此靜態控制項關聯。這個增強圖元文<br />件將被自動繪製在此靜態控制項中。預設的,它將被繪製在左上方,並且此靜態控制項將根<br />據增強圖元檔案的大小來調整尺寸。使用此成員函數必須設定風格SS_ENHMETAFILE。</p><p>(10)HICON SetIcon(HICON hIcon);<br />【傳回值】返回先前與此靜態控制項關聯的表徵圖的控制代碼。如果沒有與此靜態控制項關聯的圖<br />標,則返回NULL。<br />【參 數】<br />hIcon<br />要繪製在此靜態控制項中的表徵圖控制代碼。<br />【注釋】此成員函數用來將一個新的表徵圖與此靜態控制項關聯。這個表徵圖將被自動繪製在<br />此靜態控制項中。預設的,它將被繪製在左上方,並且此靜態控制項將根據表徵圖的大小來調<br />整尺寸。使用此成員函數必須設定風格SS_ICON。</p><p>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.