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。