Фоновая проблема приложения Windows Mobile
-
22-07-2019 - |
Вопрос
Я новичок в разработке мобильных устройств и работаю над приложением proof of concept для ОС Windows Mobile 6.0 и CF 2.0
Я попытался создать новый фоновый рисунок для своего приложения с помощью Adobe Photoshop, я нашел руководство по codeproject.com о решении проблемы с полноэкранным режимом Windows Mobile и фоновым изображением приложения с помощью Pinvoke api в соответствии с доктором Луиджи Пользовательский интерфейс iPhone в статье Windows Mobile
Когда я попытался добавить к форме фона какое-нибудь градиентное изображение.альтернативный текст http://img268.imageshack.us/img268/8482/ppc2.jpg
Качество изображения кажется плохим.Но я попытался добавить другое фоновое изображение к фону моей формы, оно кажется хорошим.
альтернативный текст http://img199.imageshack.us/img199/9812/ppc3.jpg
Я не понимаю, в чем проблема, я попытался изменить свое фоновое изображение на bmp, png, jpg и т.д.это все еще бедно.В чем я делаю ошибку с photoshop?
(Примечание :с другой стороны, я еще не пробовал этот дизайн на реальном 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
Решение
Прежде всего, ваш код нуждается в некоторой очистке:
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, но вы сказали, что использовали некоторые из них.Где они?