Domanda

Sono un nuovo sviluppo mobile e sto lavorando a un'applicazione di prova di concetto su Windows Mobile 6.0 Os e CF 2.0

Ho provato a progettare un nuovo backgorund per la mia applicazione con Adobe Photoshop, ho trovato un tutorial su codeproject.com sulla risoluzione del problema a schermo intero di Windows Mobile e del problema dello sfondo dell'immagine dell'app con Pinvoke api secondo il Dr.Luiji Interfaccia utente di iPhone nell'articolo di Windows Mobile

Quando ho provato ad aggiungere allo sfondo del modulo un'immagine sfumata. alt text http://img268.imageshack.us/img268/8482/ppc2.jpg

La qualità dell'immagine sembra scarsa. Ma ho provato ad aggiungere un'altra immagine di sfondo al mio sfondo del modulo, sembra buono.

alt text http://img199.imageshack.us/img199/9812/ppc3 .jpg

Non capisco dove sia il problema, ho provato a cambiare la mia immagine di backgorund in bmp, png, jpg ecc. è ancora scarsa. Cosa sto facendo di sbagliato con Photoshop?
(Nota: d'altra parte, non ho ancora provato questo design su Pocketpc reale. Non è vero?)

Tuttavia, Il mio altro vero problema è il metodo OnPaintBackground sui moduli mobili. come ho scritto sopra ho usato Pinvoke api per disegnare moduli a schermo intero. Ecco il codice di esempio:

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

        }

    }
}

Sto cercando di aggiungere alcuni controlli nel modulo, quindi i controlli vengono visualizzati in modo trasparente quando l'applicazione viene eseguita la prima volta. Se si tenta di spostare il cursore su questi controlli, questi vengono attivati ??normalmente.

Cosa posso fare per risolvere questo problema?

Grazie.

alt text http://img508.imageshack.us/img508/6717/ppc1 .jpg

È stato utile?

Soluzione

Prima di tutto, il tuo codice ha bisogno di essere ripulito:

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

Il classico blog di Chris Tacke parla di Bitmap nel CF. Devi stare attento:

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

Dopo tutto ciò, non sono davvero sicuro di quale sia la tua domanda. Potresti essere più specifico? Come ad esempio, non vedo alcun P / Invoke, ma hai detto di averne usato alcuni. Dove sono?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top