100分请教高手关于屏幕的显示位置的问题!急!!

dreadknightll 2006-05-28 12:17:39
我需要编写一个程序,修改屏幕的显示位置。看到了下面的文章:
http://allancandy.cnblogs.com/articles/221958.html
想到了这样的方法:

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

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
struct DEVMODE
{
public const int DM_DISPLAYFREQUENCY = 0x400000;
public const int DM_PELSWIDTH = 0x80000;
public const int DM_PELSHEIGHT = 0x100000;
public const int DM_POSITION = 0x000020;//从VC6头文件查到的,应该没错
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;
}

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int ChangeDisplaySettings([In] ref DEVMODE lpDevMode, int dwFlags);

public void ChangeRes()
{
Form1 t = new Form1();
long RetVal = 0;
DEVMODE dm = new DEVMODE();

dm.dmPositionX = 100;//X坐标
dm.dmPositionY = 200;//Y坐标
dm.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE));
dm.dmPelsWidth = Int32.Parse(width.Text);
dm.dmPelsHeight = Int32.Parse(height.Text);

dm.dmFields = DEVMODE.DM_PELSWIDTH | DEVMODE.DM_PELSHEIGHT | DEVMODE.DM_POSITION;

RetVal = ChangeDisplaySettings(ref dm, 0);
}

可是发现能成功修改分辨率但不能修改屏幕的显示位置。
请问我的思路是否正确?如果总体思路正确请指出哪里出了问题
如果总体思路不正确,请指点明路
...全文
211 10 点赞 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
dreadknightll 2006-05-31
还是没有思路,顶一下
  • 打赏
  • 举报
回复
Ivony 2006-05-29
1、软件上面这大概只有显卡/显示器驱动才能做到
2、不管怎么实现,显示器有显示器的局限,不可能超出显示器的局限,去了解一下CRT显示器的原理,显示器上面调整的是偏转线圈,如过显示器调得太离谱,无论什么软件都无法纠正,只能调显示器
3、你要考虑液晶显示器的情况。
4、强行调整用户的分辨率是不友好的行为。
  • 打赏
  • 举报
回复
dreadknightll 2006-05-29
GDI+ 或者 DirectX SDK 能不能做到?
  • 打赏
  • 举报
回复
liujiwe79 2006-05-29
对,关于操作系统底层的东西建议把操作权交给用户
  • 打赏
  • 举报
回复
zlkingdom 2006-05-29
同意楼上观点
  • 打赏
  • 举报
回复
Knight94 2006-05-28
to 需要什么SDK才能完成?

好像很少有这方面的sdk,而且不同显示器的sdk也不同。

因为在修改了分辨率后,都是通过显示器所提供菜单来手动修改屏幕位置、大小尺寸。
所以你要在程序中去修改,得要看看显示器是否提供这方面的操作接口,否则无法实现。
  • 打赏
  • 举报
回复
dreadknightll 2006-05-28
我需要修改整个屏幕的显示位置
需要什么SDK才能完成?
  • 打赏
  • 举报
回复
Knight94 2006-05-28
to 可是发现能成功修改分辨率但不能修改屏幕的显示位置。

分辨率是屏幕属性,那么可以通过API来修改,以上操作是没有错的。

而修改屏幕的显示位置,
如果是修改整个屏幕的显示位置,那是硬件操作,没有相关的sdk,是无法通过软件完成的;
如果是某个程序的显示位置,获得hwnd,然后调用setwindowlong即可修改。
  • 打赏
  • 举报
回复
aSalt 2006-05-28
up
  • 打赏
  • 举报
回复
相关推荐
发帖
C#
创建于2007-09-28

10.6w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2006-05-28 12:17
社区公告

让您成为最强悍的C#开发者