- PR -

VBでDisplayを90°回転させたい

1
投稿者投稿内容
えんぴつ
常連さん
会議室デビュー日: 2006/12/27
投稿数: 23
投稿日時: 2007-09-10 20:37
VS2005のVBでWindousCE用アプリ開発を行っています。
PCはWindowsXP SP2です。
実行ファイル起動後にDisplayを90°回転させたいです。
C++では
---------------------------------------------------------------------------
DEVMODE devMode;
memset(&devMode, 0, sizeof (devMode));
devMode.dmSize = sizeof (devMode); devMode.dmFields = DM_DISPLAYORIENTATION; devMode.dmDisplayOrientation = dwNewAngle; ChangeDisplaySettingsEx(NULL,&devMode,NULL,CDS_RESET,NULL);
---------------------------------------------------------------------------
上記のdwNewAngleにDMDO_0、DMDO_90、DMDO_180、DMDO_270を代入することで可能らしいです。
VBではWin32APIのChangeDisplaySettingsExを利用してDEVMODE構造体のdmDisplayOrientationを書き換えればできるのかなと思いましたが、調べたところDEVMODE構造体の中にdmDisplayOrientationがないのですが、これはVBではできないということでしょうか。

http://www.activebasic.com/help_center/Pages/API/GDI/Printer/type_DEVMODE.htm

http://www.winapi-database.com/Struct/DEVMODE.html
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-09-11 01:36
こんばんは。

引用:

えんぴつさんの書き込み (2007-09-10 20:37) より:
VS2005のVBでWindousCE用アプリ開発を行っています。
PCはWindowsXP SP2です。
実行ファイル起動後にDisplayを90°回転させたいです。
<snip>
VBではWin32APIのChangeDisplaySettingsExを利用してDEVMODE構造体のdmDisplayOrientationを書き換えればできるのかなと思いましたが、調べたところDEVMODE構造体の中にdmDisplayOrientationがないのですが、これはVBではできないということでしょうか。



できるみたいですよ。
ChangeDisplaySettingsEx (Platform Builder for Microsoft Windows CE 5.0 )

とりあえずサンプルコードを作ってみましたので、参考までにどうぞ。
#動作確認はVisual Studio Orcas VB.net / Pocket PC 2003 SE エミュレータで行なってます。

コード:
Imports System.Runtime.InteropServices

Module Program

    Sub Main()

        SetScreenOrientation(DMD.DMDO_90)

    End Sub

    Sub SetScreenOrientation(ByVal orientation As DMD)

        Dim devmode1 As New DEVMODE
        devmode1.dmSize = Marshal.SizeOf(devmode1)
        devmode1.dmFields = DM_Fields.DM_DISPLAYORIENTATION
        devmode1.dmDisplayOrientation = orientation

        Dim result As CDSRet = ChangeDisplaySettingsEx(Nothing, devmode1, IntPtr.Zero, 0, IntPtr.Zero)

    End Sub

    <DllImport("coredll.dll", CharSet:=CharSet.Unicode)> _
    Private Function ChangeDisplaySettingsEx(ByVal lpszDeviceName As String, ByRef lpDevMode As DEVMODE, ByVal hwnd As IntPtr, ByVal dwflags As CDSFlags, ByVal lParam As IntPtr) As CDSRet
    End Function

End Module

<StructLayout(LayoutKind.Sequential)> _
Public Structure DEVMODE
    Public Const CCHDEVICENAME As Integer = 32
    Public Const CCHFORMNAME As Integer = 32

    <VBFixedString(CCHDEVICENAME), MarshalAs(UnmanagedType.ByValTStr, SizeConst:=CCHDEVICENAME)> _
    Public dmDeviceName As String
    Dim dmSpecVersion As Short
    Dim dmDriverVersion As Short
    Dim dmSize As Short
    Dim dmDriverExtra As Short
    Dim dmFields As Integer
    Dim dmOrientation As Short
    Dim dmPaperSize As Short
    Dim dmPaperLength As Short
    Dim dmPaperWidth As Short
    Dim dmScale As Short
    Dim dmCopies As Short
    Dim dmDefaultSource As Short
    Dim dmPrintQuality As Short
    Dim dmColor As Short
    Dim dmDuplex As Short
    Dim dmYResolution As Short
    Dim dmTTOption As Short
    Dim dmCollate As Short
    <VBFixedString(CCHFORMNAME), MarshalAs(UnmanagedType.ByValTStr, SizeConst:=CCHFORMNAME)> _
    Public dmFormName As String
    Dim dmLogPixels As Short
    Dim dmBitsPerPel As Integer
    Dim dmPelsWidth As Integer
    Dim dmPelsHeight As Integer
    Dim dmDisplayFlags As Integer
    Dim dmDisplayFrequency As Integer
    Dim dmDisplayOrientation As Integer
End Structure

Public Enum DM_Fields
    DM_DISPLAYORIENTATION = 8388608
    DM_DISPLAYQUERYORIENTATION = 16777216
End Enum

Public Enum DMD
    DMDO_0 = 0
    DMDO_90 = 1
    DMDO_180 = 2
    DMDO_270 = 4
End Enum

Enum CDSFlags
    CDS_VIDEOPARAMETERS = &H20
    CDS_RESET = &H40000000
End Enum

Enum CDSRet
    DISP_CHANGE_SUCCESSFUL = 0
    DISP_CHANGE_RESTART = 1
    DISP_CHANGE_FAILED = -1
    DISP_CHANGE_BADMODE = -2
    DISP_CHANGE_NOTUPDATED = -3
    DISP_CHANGE_BADFLAGS = -4
    DISP_CHANGE_BADPARAM = -5
End Enum

えんぴつ
常連さん
会議室デビュー日: 2006/12/27
投稿数: 23
投稿日時: 2007-09-11 09:57
返信ありがとうございます。
リンク先のように英語表記のサイトは除外して調べていました。
Tdnr_Symさんの方法でできました。
ありがとうございました。

1

スキルアップ/キャリアアップ(JOB@IT)