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格式就可以了。