Mobile开发环境,这里就不详细介绍了,无非就是根据自己的系统安装ActiveAsync和手机模拟器。我目前使用的是Mobile6.0的模拟器,目前有6.1的和6.5的,因为是兼容的,而且内核基本没动,所以我也就懒得升级咯。

进入正题,开发过的人都知道,Mobile原始窗体除了上下边框栏,都是白色背景,这样的界面,客户肯定是不会满意的,所以我们需要为客户针对软件进行美观。我这里采用也是Alpha Blend API,黎波老师也介绍过,我这里算是借用了吧,我项目中所使用的下载包,只需要替换掉命名空间就行。PlatformAPI.zip

将包解压加入项目中,现在咋们可以编写自己的代码了。首先,创建好窗体后,设置几个全局变量。

Code
//窗体变量
Size formSize = Size.Empty;
//纵横屏幕标志 动态更换图片用 默认纵向por 横向lan
string formSign = "por";
Graphics gxBuffer;
Bitmap offBitmap;
Font font = new Font("Tahoma", 10, FontStyle.Regular);
//手机程序路径
string path = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);

接下来,结合Alpha Blend API开始绘制页面,页面绘制事件采用双Bitmap防闪烁,效率会有所影响,但问题不大,接下来开始绘制页面。

Code
 protected override void OnPaint(PaintEventArgs e)
        {
            if (offBitmap != null)
            {
                AdjustFormLayout();
                gxBuffer = Graphics.FromImage(offBitmap);
                gxBuffer.Clear(this.BackColor);
                this.BackColor = SystemColors.MenuText;

                //确认当前屏幕大小,获取对应的图片文件夹
                GetConfig getconfig=new GetConfig();
                ConfigClass config = getconfig.CheckScreenSize(formSize.Width.ToString(), formSize.Height.ToString());
                Program.ScreenFileName = config.FileName;

                AlphaImage bmp = AlphaImage.CreateFromFile(path + @"\" + Program.ScreenFileName + @"\bg.png");
                Rectangle imgRect = new Rectangle(0, 0, formSize.Width, formSize.Height);
                bmp.Draw(gxBuffer, imgRect);

                e.Graphics.DrawImage(offBitmap, 0, 0);
            }
            else
            {
                e.Graphics.Clear(this.BackColor);
            }
        }

        protected override void OnResize(EventArgs e)
        {
            base.OnResize(e);
            if (offBitmap != null)
                offBitmap.Dispose();

            offBitmap = new Bitmap(this.Width, this.Height, PixelFormat.Format32bppRgb);
        }

        /**//// <summary>
        /// 获取屏幕大小,展现模式
        /// </summary>
        public void AdjustFormLayout()
        {
            Rectangle screenBounds = Screen.PrimaryScreen.Bounds;
            float widthRatio = 0.0F;
            float heightRatio = 0.0F;

            DisplayManager.GetDisplayRatiosByDpi(this, ref widthRatio, ref heightRatio);

            控件按比例缩放#region 控件按比例缩放

            if (DisplayManager.GetDisplayMode() == DisplayMode.Portrait)
            {
                // 纵向
                formSize = new Size(screenBounds.Width, screenBounds.Height);
                formSign = "por";
                //viewCount = 9;
            }
            else if (DisplayManager.GetDisplayMode() == DisplayMode.Landscape)
            {
                // 横向
                formSize = new Size(screenBounds.Width, screenBounds.Height);
                formSign = "lan";
                //viewCount = 8;
            }
            else
            {
                // 正方
                formSize = new Size(screenBounds.Width, screenBounds.Height);
                formSign = "por";
                //viewCount = 9;
            }
            #endregion

        }

根据需要,引用对应的命名空间,编译后,页面显示如下

这样,最基本的背景图片就绘制上了,由于代码中我设置了根据手机分辨率大小获取不同大小的背景图,大家如果用不上可以自己删除掉,图片路径直接改为手机上安装程序的路径就可以了。背景的图片需要你们TEAM中的美工了,如果美工把图片设置为透明的,那样最好,显示出来的背景会和上下边框栏根据主题的变化而变化了,方法是一样的,自己试咯。

如何使界面更好看,让我们下面来继续修改,我想要个主题栏,栏目上有图片还有字,让我们继续来绘制,现在修改只需要修改OnPaint事件中一些东西,增加一个标题栏的绘制,一个标题栏的图标,再绘制点字上去,代码如下

Code
//标题栏绘制
bmp = AlphaImage.CreateFromFile(path + @"\" + Program.ScreenFileName + @"\indexP_alphaBar.png");
imgRect = new Rectangle(0, 0, 320, 39);
bmp.Draw(gxBuffer, imgRect);
//标题图片绘制
bmp = AlphaImage.CreateFromFile(path + @"\" + Program.ScreenFileName + @"\indexPeople_04.png");
imgRect = new Rectangle(10, 10, 19, 22);
bmp.Draw(gxBuffer, imgRect);
//文字绘制
gxBuffer.DrawString("Hello Bright!", font, brush, 60, 10);

需要注意的是,绘制文字需要使用画笔,所以请先实例一个画笔,由于我背景是黑色,所以我画笔颜色为白色,在构造函数中将画笔颜色设置为白色,

Brush brush;
public FrmIndex()
        {
            brush = new SolidBrush(Color.White);
            InitializeComponent();
        }

画面效果如下:

背景,图片,文字的绘制基本完成,我代码里为了方便,坐标都写死了,最好能根据屏幕大小按比例绘制,因为最新的手机屏幕大小已经远远超了320*320了,按比例绘制,你只需要替换到图片就能使用,写死坐标你会发现调坐标会郁闷死的。最后给大家展示一张比较完整的主页面图,

绘制也就到这了,如果有时间我会再写一些修改过的高人写的有用的控件,或者今日插件打包,输入法挡住屏幕自动切换等。其中也有很多都是借用别人的东西,哎,自己水平有限,写不出来,请大家留口德,不要丢鸡蛋。。。

转载于:https://www.cnblogs.com/Bright-Liang/archive/2009/06/11/1501309.html

Mobile开发(绘制背景图片)相关推荐

  1. 解决《Mobile绘制背景图片》中的问题

    与PC平台的开发相比,Mobile的开发麻烦了许多,至少这是我的感觉 . 谢谢--" Fly Pig(^@^)" 的文章<Mobile开发(绘制背景图片) > http ...

  2. Qt QGraphicsScene绘制背景图片,并解决item移动破坏背景问题。

    今天尝试了一个Qt的QGraphics框架,框架的概念如下: 具体的框架介绍不是本文的重点,就不多介绍,本文要解决的问题是在scene上绘制背景图片,并解决item移动破坏背景的问题. 毕竟scene ...

  3. qt 保存绘制图片时背景变黑_QGraphicsScene绘制背景图片引起的问题

    项目是基于Qt的图形视图框架编写的,现有个需求是要在图形中加入自定义的背景图片.心想不就是个背景图片吗?只要重写drawBackground函数我想怎么画就怎么画啊.于是立马从QGraphicsSce ...

  4. 微信小程序开发:背景图片设置

    开发微信小程序时,不能直接在wxss文件里引用本地图片,运行时会报错:"本地资源图片无法通过WXSS获取,可以使用网络图片,或者 base64,或者使用<image/>标签.&q ...

  5. Windows Mobile 开发系列文章收藏 - Windows Mobile 6.x

    收集整理一些Windows Mobile 6.x开发相关文章, 文章及相关代码大部分搜集自网络,版权属于原作者! 智能手机      手机词汇      研发手机基本流程 WAP协议分析(1)     ...

  6. Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解...

    2019独角兽企业重金招聘Python工程师标准>>> 今天继续给大家分享下View的相关知识,重点有一下两点:   1.View的几种不同状态属性            2.如何根 ...

  7. C#发现之旅 --- WinForm.NET中开发具有固定背景图片的可滚动控件

    摘要 在本文章中笔者使用WinForm.NET2.0开发出一个具有固定背景图片的带滚动条的容器控件.点击下载本文章配套的演示程序 /Files/xdesigner/FixedBackground.zi ...

  8. Android中View绘制各种状态的背景图片原理深入分析以及StateListDrawable使用

    /* Call this to force a view to update its drawable state. This will cause drawableStateChanged to b ...

  9. java图形界面编程如何给窗口设置背景图片

    文章目录 前言 一.知识点介绍 二.代码实现 总结 前言 相信大家在GUI编程过程中,也就是开发窗口程序过程中,比如游戏界面等,难免会需要给窗口添加背景图片,接下来我将给大家详细讲解如何给窗口设置背景 ...

最新文章

  1. 厉害了!单点登录系统用 8 张漫画就解释了。。。
  2. JS浮点数运算Bug的解决办法
  3. 用pip安装tensorflow报错SyntaxError: invalid syntax
  4. 安装 Window 10 for Linux 子系统教程(WSL)
  5. Linux下安装MySQL5.6
  6. echart vue 图表大小_cesium+vue,性能优化
  7. php面向对象封装mysql_PHP mysqli 扩展库(面向对象/数据库操作封装/事务控制/预编译)...
  8. pyspark分类算法之多层感知机神经网络分类器模型实践【MLPClassifier】
  9. Android常用控件基础知识
  10. 三菱Q系列总线型项目程序全套,三菱PLC程序+proface触摸屏双屏+电气图纸+程序注释规划表
  11. Vin码查询车辆详细信息
  12. 计算机科学与技术专业 ppt,计算机科学与技术专业.ppt
  13. 【考研数学】高等数学知识点整理——第一章 函数、极限、连续
  14. 隧道工地考勤人员定位体系,提高施工人员作业安全-新导智能
  15. 关于联想笔记本不能连接无线网(wifi),注销后重新登录才可以连接
  16. php 关键词生成,DEDECMS实现文章tag关键词自动生成列表页的方法
  17. Java(学习笔记三,kk自用)
  18. windows 7下工行U盾证书密码框弹不出来--解决方案
  19. web前端学习584-610(JavaScript流程控制-循环---for循环 while循环 do...while循环 continue break)
  20. java计算机毕业设计医院临床管理系统录屏源码+数据库+系统+lw文档+mybatis+运行部署

热门文章

  1. matplotlib绘制直方图,饼图,散点图,气泡图,箱型图,雷达图
  2. POJ 2248 搜索
  3. python绘制小提琴图_seaborn画小提琴图(violin plot)
  4. 利用 node.js 云函数解密获取微信小程序的手机号码等加密信息 encryptedData 的内容。
  5. 愿天下有情人都是失散多年的兄妹 (25分)
  6. Android 开发学习笔记:七大知识点板块汇总
  7. php rsa 模数 指数,密码:使用模数和指数生成RSA私钥
  8. 域名过户操作流程及常见问题
  9. HFSS和CST电磁仿真的硬件选型指南(纯个人经验)
  10. python爬取微博热搜数据并保存!