CStatic控件的基本使用


CStatic 繼承於 CWnd,是一種特殊的窗體。他可以顯示文本字符串(這也是最常用的用法)、圖標、指針(cursor)、位圖和增強圖文元件. 通常靜態控件不提供輸入和輸出。但是如果把他的屬性設置為 SS_NOTIFY,他可以通知其父窗口的擊鼠標事件。

一。CStatic 用於顯示文本

      如果文本不變,可以直接設置其 Caption。如果想在運行過程中改變其顯示文本,可以用如下方式:

  • CStatic   *pStatic=(CStatic*)GetDlgItem(IDC_STATIC);
  • pStatic->SetWindowText("Just a Test of Static Control!");

二。CStatic 用於顯示圖標

      如果要顯示圖標,則必須要設置窗口屬性為 SS_ICON 和 SS_CENTERIMAGE,實例代碼如下:

  • CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC);
  • LONG style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);style |= SS_ICON;  
  • style |= SS_CENTERIMAGE;   
  • SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE,style);
  • pStatic->SetIcon(m_hIcon);

三。CStatic 用於顯示指針 cursor

      如果要顯示 cursor,則必須要設置窗口屬性為 SS_ICON 和 SS_CENTERIMAGE,實例代碼如下:

  • CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC);
  • LONG style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);
  • style |= SS_ICON;  
  • style |= SS_CENTERIMAGE;   
  • SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE,style);
  • pStatic->SetCursor(OnQueryDragIcon());

四。CStatic 用於顯示位圖

      如果要顯示圖標,則必須要設置窗口屬性為 SS_BITMAP 和 SS_CENTERIMAGE,實例代碼如下:

  • //獲得指向靜態控件的指針  
    CStatic   *pStatic=(CStatic*)GetDlgItem(IDC_STATIC);
  • //獲得位圖句柄  
    HBITMAP   hBitmap=::LoadBitmap(AfxGetApp()->m_hInstance,
            MAKEINTRESOURCE(IDB_BITMAP2));
  • //LONG result = SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE,style);
  • //設置靜態控件的樣式,使其可以使用位圖,並試位標顯示使居中  
    pStatic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);  
  • //設置靜態控件顯示位圖  
    pStatic->SetBitmap(hBitmap);

 

    • 文章出處:CSDN
    •  

      使用Visual C++ 6.0編制軟件時,靜態控件是最常用的控件之一。一般情況下,靜態控件用作那些沒有固定標題文本屬性的控件(如文本編輯控件、列表框等)的標簽,或者用來為控件分組,或者用來顯示一些提示性的文件。實際上,靜態控件除了顯示靜態文本這一基本功能外,還有許多其他的特殊功能,如在靜態控件中可以顯示圖標、位圖,甚至還可以在靜態控件中顯示動畫。本文將通過示例程序來介紹靜態控件的這些特殊用法。
        
        1. 顯示圖標
        ⑴ 使用AppWizard創建一個基於對話框的MFC應用程序,設置其工程名為ShowIco。
        ⑵ 在對話框上增加一個靜態控件。需要注意的是,有資源管理器添加的靜態控件在默認情況下其ID均為IDC_STATIC,因此,如果需要在程序中區分和操縱各個不同的靜態控件,一般情況下,需要更改新添加的靜態控件的ID值。這里將靜態控件的ID值設置為IDC_SHOWICO。
        ⑶ 在資源管理器中添加圖標資源,其ID為IDI_ICON1。
        ⑷ 使用ClassWizard添加WM_INITDIALOG消息處理函數OnInitDialog。
        ⑸ 在OnInitDialog函數中下面的代碼:
        //獲得指向靜態控件的指針
        CStatic *pStatic=(CStatic *)GetDlgItem(IDC_SHOWICO);
        //加載圖標
        HICON hIcon=AfxGetApp()->LoadIcon(IDI_ICON1);
        //設置靜態控件的樣式,使其可以使用圖標,並試圖標顯示使居中
        pStatic->ModifyStyle(0xF,SS_ICON|SS_CENTERIMAGE);
        //設置靜態控件圖標
        pStatic->SetIcon(hIcon);
        運行該程序,顯示如上圖。
        
        2.顯示位圖
        ⑴ 使用AppWizard創建一個基於對話框的MFC應用程序,設置其工程名為ShowBmp。
        ⑵ 在對話框上增加一個靜態控件,將靜態控件的ID值設置為IDC_SHOWBMP。
        ⑶ 在資源管理其中添加位圖資源,其ID為IDB_INFO。
        ⑷ 使用ClassWizard添加WM_INITDIALOG消息處理函數OnInitDialog。
        ⑸ 在OnInitDialog函數中下面的代碼:
        //獲得指向靜態控件的指針
        CStatic *pStatic=(CStatic *)GetDlgItem(IDC_SHOWBMP);
        //獲得位圖句柄
        HBITMAP Bitmap=::LoadBitmap(AfxGetApp()_hInstance,
          MAKINTRESOURCE(IDB_INFO));
        //設置靜態控件的樣式,使其可以使用位圖,並試位標顯示使居中
        pStatic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);
        //設置靜態控件顯示位圖
        pStatic->SetBitmap(hBitmap);
        運行該程序即可。
        
        3. 顯示動畫
        編寫一個字符串在靜態控件中不停的移動的程序。
        ⑴ 使用AppWizard創建一個基於對話框的MFC應用程序,設置其工程名為ShowAnimation。
        ⑵ 在對話框上增加一個靜態控件。將靜態控件的ID值設置為IDC_PREVIEW。
        ⑶ 使用ClassWizard添加WM_INITDIALOG消息處理函數OnInitDialog和WM_TIMER的消息處理函數OnTimer。
        ⑷ 在CshowAnimationDlg類中,增加兩個變量m_x和m_y,用以表示字符串的坐標。
        ⑸ 在OnInitDialog函數中添加下列代碼:
         m_x=0;
         m_y=0;
          KillTimer(1);
         VERIFY(SetTimer(1, 500, NULL) != 0);
        1. 在CshowAnimationDlg類中,增加一個成員函數Draw()如下:
        void CshowAnimationDlg::Draw()
         {
          CWnd *pWnd=GetDlgItem(IDC_PREVIEW);
        CDC *pDC=pWnd->GetDC();
        RECT rect;
         pWnd->GetClientRect(&rect);
        pWnd->Invalidate();
        pWnd->UpdateWindow();
         pDC->SelectStockObject(BLACK_BRUSH);
        pDC->Rectangle(0,0,rect.right,rect.bottom);
         pDC->SetTextColor(RGB(255,0,0));
        pDC->SetBkColor(RGB(0,0,0));
        if((m_x>=rect.right)||(m_y>=rect.bottom-20))
        { m_x=0;
        m_y=0;
          }
        pDC->TextOut(m_x,m_y,\"動畫\");
         }
        2. 在OnTimer函數中,添加如下代碼:
           if (nIDEvent == 1)
          {
          m_x+=5;
          m_y+=5;
          Draw();
           }
         else CWnd::OnTimer(nIDEvent);

       

       

      MFC中 CStatic類(靜態控件類)

      【說明】CStatic類提供了一個Windows靜態控件的功能。一個靜態控件可以用來顯示一
      個文本字符串、方框、矩形、圖標、光標、位圖或增強的圖元文件。它可以被用來作為
      標簽、方框或用來分隔其它的控件。靜態控件通常不接收輸入,也不提供輸出;但是,
      如果它具有SS_NOTIFY風格,則它可以通知其父有關設備點擊的消息。
      創建一個靜態控件分兩步。首先,調用構造函數來構造一個CStatic類的對象,然后調用
      成員函數Create來創建此靜態控件並將它分配給當前的CStatic類的對象。
      如果你是在一個對話框中創建了一個靜態控件(通過一個對話框資源),則當用戶關閉這
      個對話框時, CStatic類的對象被自動銷毀。
      如果你是在一個窗口中創建了一個CStatic類的對象,則可能需要你自己來銷毀它。在一
      個窗口的堆棧中創建的CStatic類的對象將自動被銷毀。如果你是使用new函數在堆中創
      建CStatic類的對象,則當你使用完后,必須調用delete來銷毀這個CStatic類的對象。

      【庫 名】


      【成員函數】

      (1)BOOL Create(LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pP
      arentWnd, UINT nID = 0xffff);
      【返回值】如果本成員函數調用成功則返回非零值;否則返回0。
      【參 數】
      lpszText
      指定要放置在靜態控件中的文本。如果是NULL,則表示沒有文本是可見的。
      dwStyle
      指定靜態控件的窗口風格。以下任何靜態控件風格的組合都可以用於這個控件。
      SS_BITMAP
      指定在靜態控件中顯示一個被定義在資源文件中的位圖。該風格將忽略靜態控件的高度
      和寬度,靜態控件將根據位圖的大小自動調節自身的尺寸。
      SS_BLACKFRAME
      建立一個黑色的邊框。
      SS_BLACKRECT
      建立一個黑色的矩形。
      SS_CENTER
      使文字在靜態控件中水平居中。
      SS_CENTERIMAGE
      當靜態控件用於顯示文本時,該風格將使文本在靜態控件中垂直居中。當靜態控件用於
      顯示位圖或圖標時,該風格將使位圖或圖標在靜態控件中垂直居中,當位圖或圖標小於
      靜態控件時,靜態控件將使用位圖或圖標左上角的點的顏色填充空白處。
      SS_ENHMETAFILE
      指定在靜態控件中顯示一個增強型圖元文件。該風格將不會忽略靜態控件的高度和寬度
      ,而圖元文件將調節自身的大小來適應靜態控件的尺寸。
      SS_ETCHEDFRAME
      建立一個浮雕邊框。
      SS_ETCHEDHORZ
      建立一個邊框,並將頂端邊框設置為浮雕風格。
      SS_ETCHEDVERT
      建立一個邊框,並將左側邊框設置為浮雕風格。
      SS_GRAYFRAME
      建立一個灰色的邊框。
      SS_GRAYRECT
      建立一個灰色的矩形。
      SS_ICON
      指定在靜態控件中顯示一個被定義在資源文件中的圖標。該風格將忽略靜態控件的高度
      和寬度,靜態控件將根據位圖的大小自動調節自身的尺寸。
      SS_LEFT
      使文字在靜態控件中左對齊。
      SS_LEFTNOWORDWRAP
      在缺省情況下,靜態控件把’\n’和’\t’都作為換行標記。只有在設置本風格后,靜
      態控件才把’\t’看作是制表鍵(缺省時制表鍵的寬度為8個字符的寬度)。
      SS_NOPREFIX
      該標志表示終止對前綴字符的處理。通常,本成員函數將前綴助記符’&’解釋為一個指
      令,即在’&’后面的字符下面划一下划線。並且將’&&’解釋成一個單個的’&’指令
      。通過指令指定該標志,這種處理就不再進行了。
      SS_NOTIFY
      在缺省情況下,靜態控件是不響應鼠標事件的。只有在設置該風格后,當用戶單擊靜態
      控件時,靜態控件才向父窗口發送STN_CLICKED通知。
      SS_OWNERDRAW
      在指定該風格后,當靜態控件在視覺外觀發生變化時,該靜態控件的屬主窗口將響應WM
      _DRAWITEM消息。
      SS_RIGHT
      使文字在靜態控件中左對齊。
      SS_SIMPLE
      只顯示一行文本,文本不能被剪切或替換(父窗口不能處理CTLCOLOR消息)。
      SS_SUNKEN
      設置一個下沉的靜態控件,當靜態控件為一個方框時,方框的四邊下沉;當靜態控件為
      一個矩形時,整個矩形下沉。
      SS_USERITEM
      建立一個用戶自定義項目。
      SS_WHITEFRAME
      建立一個白色的邊框。
      SS_WHITERECT
      建立一個白色的矩形。
      rect
      指定靜態控件的位置和大小。它可以是一個RECT結構類型的數據或一個CRect類的對象。

      pParentWnd
      指定CStatic類的對象的父窗口,通常是一個CDialog類的對象。它不能是NULL。
      nID = 0xffff
      指定靜態控件的控件標識。
      【注釋】在使用靜態控件顯示文本而且沒有設置SS_LEFTNOWORDWRAP風格時,’\n’和
      ’\t’都憂患行的作用。兩者的區別是在一行文本的長度大於靜態控件的寬度時使用’
      \n’換行將使該行文本的下一行也為空行,但使用’\t’則無此現象。

      (2)CStatic();
      【注 釋】構造一個空的CStatic類的對象。

      (3)HBITMAP GetBitmap() const;
      【返回值】返回一個當前位圖的句柄,如果沒有設置位圖,則返回NULL。
      【注釋】此成員函數用來獲取先前用成員函數SetBitmap設置的與CStatic類的對象關聯
      的位圖句柄。

      (4)HCURSOR GetCursor();
      【返回值】返回一個當前圖標句柄。如果沒有設置圖標則返回NULL。
      【注釋】此成員函數用來獲取先前用成員函數SetCursor設置的與CStatic類的對象關聯
      的光標句柄。

      (5)HENHMETAFILE GetEnhMetaFile() const;
      【返回值】返回一個當前增強圖元文件句柄。如果沒有設置增強的圖元文件則返回NULL
      【注釋】此成員函數用來獲取先前用成員函數SetEnhMetaFile設置的與CStatic類的對
      象關聯的增強的圖元文件句柄。

      (6)HICON GetIcon();
      【返回值】返回一個當前圖標句柄。如果沒有設置增強的圖標則返回NULL。
      【注釋】此成員函數用來獲取先前用成員函數SetIcon設置的與CStatic對象關聯關聯的
      圖標句柄。

      (7)HBITMAP SetBitmap(HBITMAP hBitmap) const;
      【返回值】返回先前與此靜態控件關聯的位圖的句柄。如果沒有與此靜態控件關聯的位
      圖,則返回NULL。
      【參 數】
      hBitmap
      要繪制在此靜態控件中的位圖句柄。
      【注釋】此成員函數用來將一個新的位圖與此靜態控件關聯。這個位圖將被自動繪制在
      此靜態控件中。缺省的,它將被繪制在左上角,並且此靜態控件將根據位圖的大小來調
      整尺寸。使用此成員函數必須設置風格SS_BITMAP。

      (8)HCURSOR SetCursor(HCURSOR hCursor);
      【返回值】返回先前與此靜態控件關聯的光標的句柄。如果沒有與此靜態控件關聯的光
      標,則返回NULL。
      【參 數】
      hCursor
      要繪制在此靜態控件中的光標句柄。
      【注釋】此成員函數用來將一個新的光標與此靜態控件關聯。這個光標將被自動繪制在
      此靜態控件中。缺省的,它將被繪制在左上角,並且此靜態控件將根據光標的大小來調
      整尺寸。使用此成員函數必須設置風格SS_ICON。

      (9)HENHMETAFILE SetEnhMetaFile(HENHMETAFILE hMetaFile);
      【返回值】返回先前與此靜態控件關聯的增強圖元文件的句柄。如果沒有與此靜態控件
      關聯的增強圖元文件,則返回NULL。
      【參 數】
      hMetaFile
      要繪制在此靜態控件中的增強圖元文件句柄。
      【注釋】此成員函數用來將一個新的增強圖元文件與此靜態控件關聯。這個增強圖元文
      件將被自動繪制在此靜態控件中。缺省的,它將被繪制在左上角,並且此靜態控件將根
      據增強圖元文件的大小來調整尺寸。使用此成員函數必須設置風格SS_ENHMETAFILE。

      (10)HICON SetIcon(HICON hIcon);
      【返回值】返回先前與此靜態控件關聯的圖標的句柄。如果沒有與此靜態控件關聯的圖
      標,則返回NULL。
      【參 數】
      hIcon
      要繪制在此靜態控件中的圖標句柄。
      【注釋】此成員函數用來將一個新的圖標與此靜態控件關聯。這個圖標將被自動繪制在
      此靜態控件中。缺省的,它將被繪制在左上角,並且此靜態控件將根據圖標的大小來調
      整尺寸。使用此成員函數必須設置風格SS_ICON。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM