CStatic 繼承於 CWnd,是一種特殊的窗體。他能夠顯示文本字符串(這也是最經常使用的用法)、圖標、指針(cursor)、位圖和加強圖文元件. 一般靜態控件不提供輸入和輸出。可是若是把他的屬性設置爲 SS_NOTIFY,他能夠通知其父窗口的擊鼠標事件。函數
一。CStatic 用於顯示文本動畫
若是文本不變,能夠直接設置其 Caption。若是想在運行過程當中改變其顯示文本,能夠用以下方式:spa
二。CStatic 用於顯示圖標指針
若是要顯示圖標,則必需要設置窗口屬性爲 SS_ICON 和 SS_CENTERIMAGE,實例代碼以下:對象
三。CStatic 用於顯示指針 cursor繼承
若是要顯示 cursor,則必需要設置窗口屬性爲 SS_ICON 和 SS_CENTERIMAGE,實例代碼以下:事件
四。CStatic 用於顯示位圖資源
若是要顯示圖標,則必需要設置窗口屬性爲 SS_BITMAP 和 SS_CENTERIMAGE,實例代碼以下:字符串
使用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);it
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* pParentWnd, 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。