CStatic類對應Toolbox中的Static Text和Picture Control控制項。本篇主要研究怎樣動態建立CStatic控制項,相應的靜態CStatic控制項就會觸類旁通。
先看一下CStaic::Create函數的原型:BOOL Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );lpszText --- 顯示的文本dwStyle --- 視窗風格 【通用】 WS_CHILD 子視窗,必須有 WS_VISIBLE 視窗可見 【CStatic專用】 SS_ICON 顯示Icon SS_BITMAP 顯示Bitmap SS_NOTIFY 向父視窗發送事件訊息 SS_SUNKEN 控制項周邊有半沉的3D邊框 rect --- 位置及大小pParentWnd --- 父視窗nID --- ID
一、顯示文本視窗風格: SS_LEFT --- 文字靠左對齊 SS_CENTER --- 文字置中對齊 SS_RIGHT --- 文字靠右對齊
CStatic *pStaticText = new CStatic();pStaticText->Create( TEXT("Hello Kitty"), WS_CHILD | WS_VISIBLE | SS_LEFT, CRect(10, 10, 100, 100), this);// 設定和對話方塊一樣的字型 pStaticText->SetFont(this->GetFont());
二、顯示ICON視窗風格:SS_CENTERIMAGE --- 使ICON置中顯示,若Icon的實際大小大於控制項的大小,則只顯示置中的部分Icon若不指定該風格,則Create函數中rect指定的大小不起作用,控制項會根據Icon的實際大小調整控制項大小到剛好合適。
CStatic *pStaticIcon = new CStatic();pStaticIcon->Create( TEXT(""), WS_CHILD | WS_VISIBLE | SS_ICON | SS_CENTERIMAGE, CRect(10, 10, 100, 100), this);HICON hIcon = ::LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON1));if (NULL != hIcon){ pStaticIcon->SetIcon(hIcon);}
三、顯示Bitmap視窗風格:SS_CENTERIMAGE --- 使Bitmap置中顯示,若Bitmap的實際大小大於控制項的大小,則只顯示置中的部分Bitmap若不指定該風格,則Create函數中rect指定的大小不起作用,控制項會根據Bitmap的實際大小調整控制項大小到剛好合適。
CStatic *pStaticBitmap = new CStatic();pStaticBitmap->Create(TEXT(""),WS_CHILD | WS_VISIBLE | SS_BITMAP | SS_CENTERIMAGE,CRect(10, 10, 100, 100),this);HBITMAP hBitmap = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1));if (NULL != hBitmap){pStaticBitmap->SetBitmap(hBitmap);}
Note:若想從本地磁碟載入圖片,請使用以下代碼: HBITMAP hBitmap = (HBITMAP)::LoadImage( AfxGetInstanceHandle(), TEXT("D:\\test.bmp"), IMAGE_BITMAP, 50, 50, LR_DEFAULTCOLOR | LR_LOADFROMFILE | LR_CREATEDIBSECTION);LR_DEFAULTCOLOR --- 指定按照原圖的顏色載入圖片,不可少LR_LOADFROMFILE --- 載入外部的Bitmap,一定要指定LR_CREATEDIBSECTION --- 一般會指定50,50 --- 指定圖片大小 如要若按照圖片本身的大小載入,則設定cx,cy為0,0, 並且在最後的標誌位加上|LR_DEFAULTSIZE
注意:從網上下載的Bitmap圖片可能用上面的方法載入失敗,返回的HBITMAP為NULL,GetLastError()返回0,這個一般是圖片格式的問題,可以用Windows的畫圖程式開啟Bitmap再另存新檔24位位元影像的bmp格式就可以了。