Landscape mode PocketPC (affichage paysage)

Signaler
Messages postés
10
Date d'inscription
samedi 7 février 2004
Statut
Membre
Dernière intervention
13 mars 2007
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
bonjour a tous  :D


Je me demandais comment faire pour passer l'affichage en Paysage (LandScape)


 


Comme ça normalement ca devrais marcher mais rien ne se passe une idée????





 
        [DllImport("coredll.dll")]
        static extern int ChangeDisplaySettingsEx(string lpszDeviceName, [In] ref DEVMODE lpDevMode,
        IntPtr hwnd, int dwFlags, IntPtr lParam);




 



public enum DMDO
        {
            DEFAULT = 0,
            D90 = 1,
            D180 = 2,
            D270 = 3
        }



        struct DEVMODE
        {
            private const int CCHDEVICENAME = 32;
            private const int CCHFORMNAME = 32;



            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCHDEVICENAME)]
            public string dmDeviceName;
            public short dmSpecVersion;
            public short dmDriverVersion;
            public short dmSize;
            public short dmDriverExtra;
            public int dmFields;



            public int dmPositionX;
            public int dmPositionY;
            public DMDO dmDisplayOrientation;
            public int dmDisplayFixedOutput;



            public short dmColor;
            public short dmDuplex;
            public short dmYResolution;
            public short dmTTOption;
            public short dmCollate;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCHFORMNAME)]
            public string dmFormName;
            public short dmLogPixels;
            public int dmBitsPerPel;
            public int dmPelsWidth;
            public int dmPelsHeight;
            public int dmDisplayFlags;
            public int dmDisplayFrequency;
            public int dmICMMethod;
            public int dmICMIntent;
            public int dmMediaType;
            public int dmDitherType;
            public int dmReserved1;
            public int dmReserved2;
            public int dmPanningWidth;
            public int dmPanningHeight;
        }



        private void button2_Click(object sender, EventArgs e)
        {
            DEVMODE dm = new DEVMODE();
            dm.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE));
            dm.dmDisplayOrientation = DMDO.D90;
            dm.dmFields = 0x00000080;
            ChangeDisplaySettingsEx(null,ref dm,IntPtr.Zero,0,intPtr.Zero);
           
       }




Merci d'avance  :D

2 réponses

Messages postés
10
Date d'inscription
samedi 7 février 2004
Statut
Membre
Dernière intervention
13 mars 2007

J'apporte quelques précision en tombant sur ce lien :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceui40/html/cerefRotatingContentOfScreen.asp

J'ai tester ce bout de code sur un PocketPc:

DEVMODE dm =
new
DEVMODE();
dm.dmFields = 0x00000080;

int val = ChangeDisplaySettingsEx(
null,
ref dm,
IntPtr.Zero, 0x00000002,
IntPtr.Zero);  //0x00000002 = CDS_TEST

MessageBox.Show(val.ToString(),
"zre");

Et la j'ai eu une mauvaise surprise, la valeur returnée est -2 soit DISP_CHANGE_BADMODE donc ce qui signifie que les driver ne support pas la rotation de l'affichage de l'écran!!!!!!  Hors sur ce même pocket la rotation de 90° fonctionne trés bien quand même!!!

Du coup je comprend plus rien là, devrai-je utiliser une autre fonction de l'api pour basculer en affichage paysage?
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
93
Salut,

Tu n'a pas initialiser le champs dmSize de ta structure DEVMODE, ton problème doit venir de là.

/*
coq
MVP Visual C#
CoqBlog
*/