帮忙做一个小程序!

xwylpsy 2010-04-17 11:26:37
VC++以前在学校学过一点,现在很久没有用过,大部分都忘了,但现在在网上找到一个关于多显示分辨设置软件,里面有程序和一些代码,但不知道怎样把它用VC++做出来,谁能帮帮忙做出来发给我!谢谢了
那个程序的代码的网址是:http://www.qiuworld.com/blog/archives/513
xiewenyuecool@yahoo.cn
...全文
112 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xwylpsy 2010-04-19
  • 打赏
  • 举报
回复
哪位大侠帮帮忙呀~~~~~
xwylpsy 2010-04-19
  • 打赏
  • 举报
回复
急等~~~
linkinwhite 2010-04-17
  • 打赏
  • 举报
回复
API:ChangeDisplaySettings


-
函数功能:该函数把缺省显示设备的设置改变为由lpDevMode设定的图形模式,要改变一个特定显示设备的设置,请使用ChangeDisplaySettingEx函数。

函数原型:LONG ChangeDisplaySettings (LPDEVMODE lpDevMode, DWORD dwflags);

参数:

lpDevMode:指向一个描述转变图表的DEVMODE的指针。DEVMODE的dmSize参数必须依DEVMODE结构的大小、字节进行初始化,dmDriveExtra参数必须初始化来显示DEVMODE随后的驱动数据的字节数,另外还可以选用以下参数:

dmBitsPerPel每个像素的位数,dmPelsWidth像素宽度,dmPelsHeight像度高度,dmDisplayFlage模式标志。

dmDisplayFrequency模式频率。

dmposition在多显示配置中设备的位置(适用于Windows 98、Windows NT 5.0及以后版本)。

除了设置好DEVMOD结构中诸多元素的值之外,还必须要正确地设置dmFields元素中的标志。这些标志表明了DEVMODE结构中哪个元素在改变显示设置时使用了。如果在dmFields中没有设置正确的位,那么显示设置将不会发生变化。请设置好以下的标志:

DM_BITSPERPEL使用dmBitsPerPel的值,DM_PELSWIDTH使用dmPelsWidth的值,

DM_PELSHEIGHT使用dmPelsHeight的值,DM_DISPLAYFLAGS使用dmDisplayFlags的值,

DM_DISPLAYFREQUENCY使用dmDisplayFrequency的值。

DM_POSITION使用fdmPosition的值(适用于Windows98、WindowsNT5.0)。

如果lpDevMode为空。那么显示设置就使用注册表中的所有当前值。在显示模式动态地调整之后要想再回到缺省的模式,最简单的办法就是把lpDevMode参数置为空,使dwFlags参数置为0。

dwflags:表明了图形模式如何改变,它可能是如下的几种形式中的一种:

0:表明当前屏幕的图形模式要动态地改变。

CDS_UPDATEREGISTRY:表明当前屏幕的图形模式会动态地变化,并且该图形模式会更新注册表。该模式信息存贮在用户档案中。

CDS_TEST:系统检测是否要设置被请求的图形模式。

CDS_FULLSCREEN:从本质上讲该模式是暂时的。

CDS_GLOBAL:该设置保存在全局设置区域内, 因此它们会影响所有的用户。该标志仅在与标志一起使用时才有效。CDS_SET_PRIMARY:该设备成为首要设备。

CDS_RESET:设置要改变,即使请求的设置与当前设置一样。CDS_NORESET:设置保存在注册表中,但是它不起作用,该标志只有与CDS_UPDATEREGISTRY标志一起使用时才有效。

指定CDS_TEST允许一个应用确定哪个图形模式真正的有效。但并不会使系统变为那个有效的图形模式。

如果CDS_UPDATEREGISTRY被指定并且它可能会动态地改变图形模式。则注册表中保存该信息并且返回DISP_CHANGE_SUCCESSFUL如果不可能使用图形模式动态地改变,则注册表中保存该信息并且返回DISP_CHANGE_RESTART。

Windows NT:如果指定了CDS_UPDATEREGISTRY并且在注册表中不能保存该信息,则图形模式不会改变,并且返回DISP_CHANGE_NOTUPDATERD。

返回值:ChangeDisplaySettings函数的返回值如下:

DISP_CHANGE_SUCCESSFUL:设备改变成功。

DISP_CHANGE_RESTART:为使图形模式生效计算机必须重新启动。

DISP_CHANGE_BADFLAGS:标志的无效设置被传送。

DISP_CHANGE_NOTUPDATED:在WindowsNT中不能把设置写入注册表。

DISP_CHANGE_BADPARA:一个无效的参数被传递。它可以包括一个无效的标志或标志的组合。

DISP_CHANGE_FAILED:指定图形模式的显示驱动失效。

DISP_CHANGE_ADMODE:不支持图形模式。

注释:为了保证传递给ChangeDisplaySetting的DEVMODE结构是有效的,并且仅包含显示驱动支持的值,可以使用由EnumDisplaySettings函数返回的DEVMODE。

当显示模式被动态地改变时,WM_DISPLAYCHANGE消息带着如下的消息参数传递给所有正在运行的应用:

wParam每像素点的新位数,LOWORD(lParam)新像素宽度,HIWORD(lParam)新像素高度。

速查:Windows NT:3.51及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Unicode和ANSI两种版本。


?
#include "stdafx.h"
#include < windows.h >
#include "conio.h"
?
void ListDisplayDevices()
{
int index=0;
DISPLAY_DEVICE dd;
dd.cb = sizeof(DISPLAY_DEVICE);
?
while (EnumDisplayDevices(NULL, index++, &dd, 0))
{
if (dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) printf("* ");
printf("%s, %s\n", dd.DeviceName, dd.DeviceString);
}
}
?
DISPLAY_DEVICE GetPrimaryDevice()
{
int index=0;
DISPLAY_DEVICE dd;
dd.cb = sizeof(DISPLAY_DEVICE);
?
while (EnumDisplayDevices(NULL, index++, &dd, 0))
{
if (dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) return dd;
}
return dd;
}
?
void ListDisplaySettings(int index)
{
DISPLAY_DEVICE dd;
dd.cb = sizeof(DISPLAY_DEVICE);
if (!EnumDisplayDevices(NULL, index, &dd, 0))
{
printf("EnumDisplayDevices failed:%d\n", GetLastError());
return;
}
?
DISPLAY_DEVICE monitor;
monitor.cb = sizeof(DISPLAY_DEVICE);
if (!EnumDisplayDevices(dd.DeviceName, index, &monitor, 0))
{
printf("EnumDisplayDevices failed:%d\n", GetLastError());
return;
}
?
DEVMODE dm;
dm.dmSize = sizeof(DEVMODE);
?
if (!EnumDisplaySettings(dd.DeviceName, ENUM_CURRENT_SETTINGS, &dm))
{
printf("EnumDisplaySettings failed:%d\n", GetLastError());
return;
}
?
printf("Device name: %s\n", dd.DeviceName);
printf("Monitor name: %s\n", monitor.DeviceID);
printf("Refresh rate, in hertz: %d\n", dm.dmDisplayFrequency);
printf("Color depth: %d\n", dm.dmBitsPerPel);
printf("Screen resolution, in pixels: %d x %d\n",
dm.dmPelsWidth, dm.dmPelsHeight);
}
?
void SetDisplayDefaults()
{
//changes the settings of the default display device
//to the default mode
ChangeDisplaySettings(NULL, 0);
}
?
BOOL SetDisplayResolution(long PelsWidth, long PelsHeight)
{
DISPLAY_DEVICE dd = GetPrimaryDevice();
DEVMODE dm;
dm.dmSize = sizeof(DEVMODE);
if (!EnumDisplaySettings(dd.DeviceName, ENUM_CURRENT_SETTINGS, &dm))
{
printf("EnumDisplaySettings failed:%d\n", GetLastError());
return FALSE;
}
?
dm.dmPelsWidth = PelsWidth;
dm.dmPelsHeight = PelsHeight;
dm.dmFields = (DM_PELSWIDTH | DM_PELSHEIGHT);
if (ChangeDisplaySettings(&dm, CDS_TEST) !=DISP_CHANGE_SUCCESSFUL)
{
printf("\nIllegal graphics mode: %d\n", GetLastError());
return FALSE;
}
?
return (ChangeDisplaySettings(&dm, 0)==DISP_CHANGE_SUCCESSFUL);
}
?
void _tmain()
{
ListDisplayDevices();
ListDisplaySettings(0);
?
if (SetDisplayResolution(800, 600))
{
printf("\nPress Enter to return to default mode.\n");
getch();
SetDisplayDefaults();
}
else
{
printf("\nPress Enter to close this window.\n");
getch();
}
return;
}

参考http://www.news2news.com/vfp/?example=374&ver=vcpp

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧