本文共 3856 字,大约阅读时间需要 12 分钟。
版权声明:本文为博主原创文章,未经博主允许不得转载。
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:若想从本地磁盘加载图片,请使用以下代码: [cpp] HBITMAP hBitmap = (HBITMAP)::LoadImage( AfxGetInstanceHandle(), TEXT("D:\\test.bmp"), IMAGE_BITMAP, 50, 50, LR_DEFAULTCOLOR | LR_LOADFROMFILE | LR_CREATEDIBSECTION); 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格式就可以了。