Фоновая проблема приложения Windows Mobile - PullRequest
1 голос
/ 05 августа 2009

Я - новая разработка для мобильных устройств, и я работаю над проверкой концепции приложения для Windows Mobile 6.0 Os и CF 2.0

Я попытался создать новый backgorund для своего приложения с помощью Adobe Photoshop. На codeproject.com я нашел учебное пособие по решению проблемы полноэкранного режима Windows Mobile и проблемы с фоновым изображением приложения в Pinvoke api в соответствии с iPhone от Dr.Luiji. Пользовательский интерфейс в Windows Mobile статья

Когда я пытался добавить фон формы, изображение градиента. альтернативный текст http://img268.imageshack.us/img268/8482/ppc2.jpg

Качество изображения плохое. Но я попытался добавить другое фоновое изображение к фону формы, это кажется хорошим.

альтернативный текст http://img199.imageshack.us/img199/9812/ppc3.jpg

Я не понимаю, в чем проблема, я пытался изменить свое изображение backgorund на bmp, png, jpg и т. Д., Оно по-прежнему оставляет желать лучшего. Что я делаю по ошибке с фотошопом?
(Примечание: с другой стороны, я еще не пробовал этот дизайн на реальных pocketpc. Не так ли?)

Тем не менее, Еще одна реальная проблема - это метод OnPaintBackground на мобильных формах. Как я уже писал выше, я использовал Pinvoke api для рисования полноэкранных форм. Вот пример кода:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using Microsoft.WindowsMobile.Status;

namespace My_Mobile
{
    public partial class MainForm : Form
    {

        Globals _globals = new Globals();
        Graphics _gxBuffer;
        Bitmap _offsetBitmap;  

        Bitmap backgroundVertical = null;
        public MainForm()
        {
            InitializeComponent();
            backgroundVertical = new Bitmap(_globals.ApplicationPath + @"\Resources\wallpaper.bmp");
            _offsetBitmap = new Bitmap(this.Width, this.Height);

        }

        private void MainForm_Load(object sender, EventArgs e)
        {

        }


        protected override void OnPaintBackground(PaintEventArgs e)
        {
            //base.OnPaintBackground(e);
        }


        protected override void OnPaint(PaintEventArgs e)
        {
                _gxBuffer = Graphics.FromImage(_offsetBitmap);

                _gxBuffer.Clear(this.BackColor);

                _gxBuffer.DrawImage(backgroundVertical, 0, 0);
                this.Invalidate();

                e.Graphics.DrawImage(_offsetBitmap, 0, 0);

        }

    }
}

Я пытаюсь добавить некоторые элементы управления в форму, тогда элементы управления отображаются прозрачными при первом запуске приложения. Если вы попытаетесь навести курсор на эти элементы управления, они повернутся в обычном режиме.

Что я могу сделать для решения этой проблемы?

Спасибо.

альтернативный текст http://img508.imageshack.us/img508/6717/ppc1.jpg

1 Ответ

0 голосов
/ 28 августа 2009

Прежде всего, ваш код нуждается в некоторой очистке:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using Microsoft.WindowsMobile.Status;

namespace My_Mobile
{
    public partial class MainForm : Form
    {

        Globals _globals = new Globals();

        Bitmap backgroundVertical = null;
        public MainForm()
        {
            InitializeComponent();
            backgroundVertical = new Bitmap(_globals.ApplicationPath + @"\Resources\wallpaper.bmp");
        }

        private void MainForm_Load(object sender, EventArgs e)
        {
        }


        protected override void OnPaintBackground(PaintEventArgs e)
        {
            //base.OnPaintBackground(e);
        }


        protected override void OnPaint(PaintEventArgs e)
        {
             using (Bitmap buffer = new Bitmap(this.Width, this.Height))
             using (Graphics gfx = Graphics.FromImage(buffer))
             {
                gfx.Clear(this.BackColor);
                gfx.DrawImage(backgroundVertical, 0, 0);
                //this.Invalidate();  Don't call Invalidate here, it shouldn't be needed
                e.Graphics.DrawImage(buffer, 0, 0);
             }
        }
    }
}

Классический блог Криса Таке рассказывает о растровых изображениях в CF. Вы должны быть осторожны:

http://blog.opennetcf.com/ctacke/PermaLink,guid,987041fc-2e13-4bab-930a-f79021225b74.aspx

После всего этого, я не совсем уверен, каков твой вопрос. Не могли бы Вы уточнить? Как, например, я не вижу никаких P / Invokes, но вы сказали, что использовали некоторые. Где они?

...