WindosCE有一个非常大的优点,就是在显示方面. 如果只要大家多花点时间,基本上完全可以实现一个非常漂亮的界面.
所有的界面都是基于Dailog. 因此首先选择的Dailog是非常必要的.
1. 利用MFC建立一个基于对话框的工程.
2. 为了达到理想效果,需要多这个默认对话框进行设置. 修改Dailog的风格.
2.1 风格设置如下: Style 选择Child ; Border 选择 None. 其他不变
3. 修改背景. 在View 里面重载 ON_WM_INITDIALOG 和 ON_WM_PAINT这两个消息.
4. 添加成员变量: CDC m_dcBack; CBitmap m_bmpBack;
5. 在OnInitDialog: 里添加如下代码:
CRect rectClient;
GetClientRect(&rectClient);
CBrush brushBack;
brushBack.CreateSolidBrush(CL_BTMP_BK_MAIN) ;//CL_BTMP_BKMAIN 为背景颜色
CClientDC dc(this);
//创建表格设备环境以及创建相应缓冲区
if (m_dcBack.GetSafeHdc() == NULL)
{
m_dcBack.CreateCompatibleDC(&dc);
m_bmpBack.CreateCompatibleBitmap(&dc,rectClient.Width(),rectClient.Height());
m_dcBack.SelectObject(&m_bmpBack);
}
//设置背景颜色
m_dcBack.SetBkColor(CL_BTMP_BK_MAIN);
m_dcBack.FillRect(rectClient,&brushBack);
6. 在OnPaint添加如下代码:
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CDC memDC ;
CBitmap memBitmap ;
CBitmap* oldBitmap ;
CRect rectClient;
GetClientRect(&rectClient) ;
memDC.CreateCompatibleDC(&dc) ;
memBitmap.CreateCompatibleBitmap(&dc, rectClient.Width(), rectClient.Height()) ;
oldBitmap = (CBitmap *)memDC.SelectObject(&memBitmap) ;
//将m_dcCoor和m_dcLine绘制到控件上
if (memDC.GetSafeHdc() != NULL)
{
memDC.BitBlt(0, 0, rectClient.Width(), rectClient.Height(),
&m_dcBack, 0, 0, SRCCOPY) ;
dc.BitBlt(0, 0, rectClient.Width(), rectClient.Height(),
&memDC, 0, 0, SRCCOPY) ;
}
memDC.SelectObject(oldBitmap) ;
//删除内存位图GDI对象
memBitmap.DeleteObject();
//删除内存绘图环境
memDC.DeleteDC();
// Do not call CDialog::OnPaint() for painting messages
7. 经过以上代码 就可以改变Dailog的背景颜色了.
8. 当然也可以添加图片. 注意这个图片要256色的bmp的格式
9. 添加背景图片代码: 只要在第6步的基础上添加一下代码即可
//初始化背景图片
CBitmap bmp;
BITMAP bm;
CDC memDC;
memDC.CreateCompatibleDC(&m_dcBack);
if(bmp.LoadBitmap(IDB_BMP)) //IDB_BMP为背景图片的ID
{
bmp.GetBitmap(&bm);
memDC.SelectObject(&bmp);
m_dcBack.StretchBlt(0,0,118,72,&memDC,0,0, //适当调整位置和大小,就可以显示相应的图片了
bm.bmWidth,bm.bmHeight,SRCCOPY);
}
bmp.DeleteObject();
memDC.DeleteDC();