UiCanvas控件示例(13_UiCanvas)

UiCanvas控件

此示例展示以下控件的使用方法:

画布控件UiCanvas的使用流程

示例代码展示:

13_UiCanvas1.png
13_UiCanvas2.png
13_UiCanvas3.png

设置表情背景画布:

  HDC hdc = m_canvas.m_dcCanvas.GetDC();
  HGDIOBJ hOldObj = ::SelectObject(hdc, 
  FontHelper::GetFont(50, FW_EXTRABOLD, false, false));
  SetBkMode(hdc,TRANSPARENT);
  ::SetTextColor(hdc,RGB(0,0,0));
  RECT rcTxt = {20,200,300,300};
  wstring str = L"画布示例";
  DrawText(hdc,str.c_str(),str.length(),&rcTxt,DT_CENTER|DT_BOTTOM);
  ::SelectObject(m_canvas.m_dcCanvas.GetDC(),hOldObj);
  Invalidate();
  UpdateWindow();   

在画布上画图片:

  ImagingHelper* pImg = new ImagingHelper;
  pImg->LoadImageFromRes(MzGetInstanceHandle(), RT_RCDATA, MAKEINTRESOURCE(IDR_JPG_PIC), true, true);
  if(pImg)
  {
      BitBlt(m_canvas.m_dcCanvas.GetDC(),50,10,200,200,pImg->GetDC(), 50,0,SRCCOPY);
      Invalidate();
      UpdateWindow(); 

      delete pImg;
      pImg = NULL;
  }

在画布上画文字:

  HDC hdc = m_canvas.m_dcCanvas.GetDC();
  HGDIOBJ hOldObj = ::SelectObject(hdc, 
  FontHelper::GetFont(50, FW_EXTRABOLD, false, false));
  SetBkMode(hdc,TRANSPARENT);
  ::SetTextColor(hdc,RGB(0,0,0));
  RECT rcTxt = {20,200,300,300};
  wstring str = L"画布示例";
  DrawText(hdc,str.c_str(),str.length(),&rcTxt,DT_CENTER|DT_BOTTOM);
  ::SelectObject(m_canvas.m_dcCanvas.GetDC(),hOldObj);
  Invalidate();
  UpdateWindow();   

完整示例:

/************************************************************************/
/*
* Copyright (C) Meizu Technology Corporation Zhuhai China
* All rights reserved.
* 中国珠海, 魅族科技有限公司, 版权所有.
*
* This file is a part of the Meizu Foundation Classes library.
* Author:    Lynn
* Create on: 2009-4-23
*/
/************************************************************************/

//请按照以步骤运行此实例代码:
//首先, 打开VS2005/2008创建一个Win 32智能设备项目
//在项目向导中选择M8SDK, 并勾选空项目
//然后,在项目中新建一个cpp文件,将此处代码拷贝到cpp文件中
//最后,按照M8SDK的帮助文档,配置项目属性
//现在,可以运行此程序了

//包含头文件
#include <mzfc_inc.h>
#include "resource.h"
#include <string> 
using namespace std;

#define     MZ_IDC_EMOTIONBG    100
#define     MZ_IDC_BTNPIC     101
#define     MZ_IDC_BTNTXT    102

//此代码演示了:
//创建和初始化应用程序
//创建和初始化窗体
//UiCanvas控件的使用方法
class CSampleWnd_UiCanvas:public CMzWndEx
{
public:
    UiCanvas m_canvas;
    UiButton m_btnPic;
    UiButton m_btnTxt;
protected:
    virtual BOOL OnInitDialog()
    {
        if (!CMzWndEx::OnInitDialog())
        {
            return FALSE;
        }
        //添加按钮
        m_btnPic.SetButtonType(MZC_BUTTON_PELLUCID);
        m_btnPic.SetPos(60,50,150,80);
        m_btnPic.SetID(MZ_IDC_BTNPIC);
        m_btnPic.SetText(L"画图像");
        m_btnPic.SetTextColor(RGB(255,255,255));
        AddUiWin(&m_btnPic);

        m_btnTxt.SetButtonType(MZC_BUTTON_PELLUCID);
        m_btnTxt.SetPos(270,50,150,80);
        m_btnTxt.SetID(MZ_IDC_BTNTXT);
        m_btnTxt.SetText(L"画文字");
        m_btnTxt.SetTextColor(RGB(255,255,255));
        AddUiWin(&m_btnTxt);

        //设置表情背景画布
        m_canvas.SetID(MZ_IDC_EMOTIONBG);
        m_canvas.SetPos(60,180,360,440);
        RECT rc = MzGetClientRect();
        if (m_canvas.m_dcCanvas.GetDC()==0)
        {
            rc.bottom = rc.top + GetHeight();
            m_canvas.m_dcCanvas.Create(300, 300);
            HDC dcScr = GetDC(m_hWnd);
            BitBlt(m_canvas.m_dcCanvas.GetDC(),0,0,300,300,dcScr, rc.left,rc.top,SRCCOPY);
            ReleaseDC(0, dcScr);
        }
        if( !MzDrawGridPopupMenuBG_480(m_canvas.m_dcCanvas.GetDC(), &rc))
            return FALSE;

        HBRUSH hBrush = CreateSolidBrush(RGB(255,242,130));
        FillRect(m_canvas.m_dcCanvas.GetDC(), &rc, hBrush);
        DeleteObject(hBrush);
        AddUiWin(&m_canvas);
        return TRUE;
    }

    virtual void OnMzCommand(WPARAM wParam, LPARAM lParam)
    {
        UINT_PTR id = LOWORD(wParam);
        //添加画布资源 和 表情按钮
        switch(id)
        {
        case MZ_IDC_BTNPIC:
              {
                  //画图片
                  ImagingHelper* pImg = new ImagingHelper;
                  pImg->LoadImageFromRes(MzGetInstanceHandle(), RT_RCDATA, MAKEINTRESOURCE(IDR_JPG_PIC), true, true);
                  if(pImg)
                  {
                      BitBlt(m_canvas.m_dcCanvas.GetDC(),50,10,200,200,pImg->GetDC(), 50,0,SRCCOPY);
                      Invalidate();
                      UpdateWindow(); 

                      delete pImg;
                      pImg = NULL;
                  }
              }
              break;
        case MZ_IDC_BTNTXT:
            {
                //画文字
                HDC hdc = m_canvas.m_dcCanvas.GetDC();
                HGDIOBJ hOldObj = ::SelectObject(hdc, 
                    FontHelper::GetFont(50, FW_EXTRABOLD, false, false));
                SetBkMode(hdc,TRANSPARENT);
                ::SetTextColor(hdc,RGB(0,0,0));
                RECT rcTxt = {20,200,300,300};
                wstring str = L"画布示例";
                DrawText(hdc,str.c_str(),str.length(),&rcTxt,DT_CENTER|DT_BOTTOM);
                ::SelectObject(m_canvas.m_dcCanvas.GetDC(),hOldObj);
                Invalidate();
                UpdateWindow();   

            }
        default:
            break;
        }
    }
private:
};

class CSampleApp: public CMzApp
{

public:
    //主窗体
    CSampleWnd_UiCanvas m_MainWnd;
    //初始化应用程序
    virtual BOOL Init()
    {
        CoInitializeEx(0, COINIT_MULTITHREADED);

        // 创建主窗体
        RECT rcWork = MzGetWorkArea();
        m_MainWnd.Create(rcWork.left,rcWork.top,RECT_WIDTH(rcWork),RECT_HEIGHT(rcWork), 0, 0, 0);
        m_MainWnd.SetBgColor(MzGetThemeColor(TCI_WINDOW_BG));
        m_MainWnd.Show();

        return TRUE;
    }
};

// 全局应用程序变量
CSampleApp theApp;

Generated at Tue Feb 9 15:09:54 2010 for Meizu M8 SDK Documentation by  doxygen 1.6.1