UiCanvas控件
此示例展示以下控件的使用方法:
画布控件UiCanvas的使用流程
UiCanvas m_canvas;
m_canvas.SetID(MZ_IDC_EMOTIONBG); m_canvas.SetPos(60,180,360,440); //创建画布,并设置其高宽 m_canvas.m_dcCanvas.Create(300, 300); //绘制弹出菜单的背景(带格子),宽480,顶部圆角. MzDrawGridPopupMenuBG_480(m_canvas.m_dcCanvas.GetDC(), &rc); //创建一个具有指定颜色的逻辑刷子 HBRUSH hBrush = CreateSolidBrush(RGB(255,242,130)); //将画布的区域用刷子的颜色填充 FillRect(m_canvas.m_dcCanvas.GetDC(), &rc, hBrush); //删除刷子 DeleteObject(hBrush); //添加画布到窗口 AddUiWin(&m_canvas);
//加载图片资源 ImagingHelper* pImg = new ImagingHelper; pImg->LoadImageFromRes(MzGetInstanceHandle(), RT_RCDATA, MAKEINTRESOURCE(IDR_JPG_PIC), true, true);//将图片资源拷贝到画布所在的区域 BitBlt(m_canvas.m_dcCanvas.GetDC(),50,10,200,200,pImg->GetDC(), 50,0,SRCCOPY); //更新画布 Invalidate(); UpdateWindow();
//获得画布设备上下文句柄 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();
示例代码展示:
设置表情背景画布:
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;