WindowsCE下的GUI编程(一)

来源:互联网 发布:淘宝店虚拟产品货源 编辑:程序博客网 时间:2024/05/29 17:47

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();

 

 

 

原创粉丝点击