平板开发 平板翻转时 控制Winform窗口只能横屏显示

项目原因,研究了一下C# winform程序在平板电脑运行时,只能横屏显示的方法。
一开始接到任务时,心里直接否定,觉得纯属扯淡。。。。闲的。。。。一个窗体程序,还想在平板上这么矫情的运行。还TMD的不让锁屏幕,用户也是够精致(jian↘) 
之后再金钱的诱惑下(哎,钱也没到我手),好吧,职业操守。。。各种脑补(我承认智商低限制了我的想象力),bingo(散花)。
拢共下面几步哈~
1.首先学习一下DllImport的用法
2.找到
        [DllImport("user32.dll")]
        private static extern bool GetAutoRotationState(out AR_STATE pState);
        [DllImport("user32.dll")]
        private static extern bool GetDisplayAutoRotationPreferences(out ORIENTATION_PREFERENCE pOrientation);
        [DllImport("user32.dll")]
        private static extern bool SetDisplayAutoRotationPreferences(ORIENTATION_PREFERENCE orientation);
这些与屏幕翻转有管的function都在哪个dll里。
3.自定义类AutoRotation
class AutoRotation
    {
        [Flags]
        public enum AR_STATE : int
        {
            AR_ENABLED = 0x0,
            AR_DISABLED = 0x1,
            AR_SUPPRESSED = 0x2,
            AR_REMOTESESSION = 0x4,
            AR_MULTIMON = 0x8,
            AR_NOSENSOR = 0x10,
            AR_NOT_SUPPORTED = 0x20,
            AR_DOCKED = 0x40,
            AR_LAPTOP = 0x80
        };
        public enum ORIENTATION_PREFERENCE : int
        {
            ORIENTATION_PREFERENCE_NONE = 0x0,
            ORIENTATION_PREFERENCE_LANDSCAPE = 0x1,
            ORIENTATION_PREFERENCE_PORTRAIT = 0x2,
            ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED = 0x4,
            ORIENTATION_PREFERENCE_PORTRAIT_FLIPPED = 0x8
        };
        public static bool IsRotateEnabled()
        {
            AR_STATE autoRotationState = 0;
            bool success = GetAutoRotationState(out autoRotationState);
            if (!success)
            {
                return false;   // disable
            }
            return autoRotationState.HasFlag(AR_STATE.AR_ENABLED);
        }
        public static ORIENTATION_PREFERENCE GetRotation()
        {
            ORIENTATION_PREFERENCE orientation;
            bool success = GetDisplayAutoRotationPreferences(out orientation);
            if (!success)
            {
                return ORIENTATION_PREFERENCE.ORIENTATION_PREFERENCE_NONE;
            }
            return orientation;
        }
        public static bool SetRotation(ORIENTATION_PREFERENCE orientation)
        {
            return SetDisplayAutoRotationPreferences(orientation);
        }

        public static void TestBeep(int frequency, int duration)
        {
            Beep(frequency, duration);
        }
        [DllImport("user32.dll")]
        private static extern bool GetAutoRotationState(out AR_STATE pState);
        [DllImport("user32.dll")]
        private static extern bool GetDisplayAutoRotationPreferences(out ORIENTATION_PREFERENCE pOrientation);
        [DllImport("user32.dll")]
        private static extern bool SetDisplayAutoRotationPreferences(ORIENTATION_PREFERENCE orientation);
    }
4.调用SetRotation,即可设置

本文档已存档,并且将不进行维护。

ORIENTATION_PREFERENCE enumeration

Indicates the screen orientation preference for a desktop app process.

Syntax

C++
typedef enum _ORIENTATION_PREFERENCE { 
  ORIENTATION_PREFERENCE_NONE               = 0x0,
  ORIENTATION_PREFERENCE_LANDSCAPE          = 0x1,
  
    ORIENTATION_PREFERENCE_PORTRAIT      = 0x2,
  ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED  = 0x4,
  ORIENTATION_PREFERENCE_PORTRAIT_FLIPPED   = 0x8
} ORIENTATION_PREFERENCE;

Constants

ORIENTATION_PREFERENCE_NONE

The process has no device orientation preferences. The system may choose any available setting.

ORIENTATION_PREFERENCE_LANDSCAPE

The process represents a desktop app that can be used in landscape mode.

ORIENTATION_PREFERENCE_PORTRAIT

The process represents a desktop app that can be used in portrait mode.

ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED

The process represents a desktop app that can be used in flipped landscape mode.

ORIENTATION_PREFERENCE_PORTRAIT_FLIPPED

The process represents a desktop app that can be used in flipped portrait mode.

好了,抛砖完毕,处女作,懒呀(打字累),有的也说不明白,好吧,没有文化就是可怕。
干编程10多年,啥都没有留下,现在开始希望不太晚。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值