vb6。屏幕分辨率。.dmFields = DM_PELSHEIGHT Or ···请见下。谢谢
像ChangeDisplaySettings+EnumDisplaySettings+DEVMODE函数我都查了,大体知道什么意思。但是加上具体数值,放到程序里还是不是很清楚。请赐教。谢谢
1、第1处,两个0指?而NewDevmode就是建立个新Devmode吧?
2、第2处,=那么多or啥意思?&H100000,&H80000等16位数值代表什么?(我知dmFields 指定了 DEVMODE 结构的其余成员中哪些已被初始化)
3、第3处,啥意思,尤其那个&H4?(我知成功返回1,失败返回0)。
以上都是在vb的模块中,而在窗体中的调用,如下:
scrw = Screen.Width / Screen.TwipsPerPixelX '水平像素
scrh = Screen.Height / Screen.TwipsPerPixelY '竖直像素
If scrw <> 1280 Or scrh <> 1024 Then kk = SetDisplaymode(1280, 1024, 32, 60)
(32位真彩+60Mhz啥意思?)
谢谢 展开
谢邀。
1、
我们先来看函数原型:
BOOL EnumDisplaySettings(
LPCTSTR lpszDeviceName, // Display Device显示设备名称字符串指针
DWORD iModeNum, // Graphics Mode显示设备物理模式
LPDEVMODE lpDevMode // Graphics Mode Settings物理模式设置
);
其中第一个参数即可以指定一个显示设备,也可以传入空指针NULL(也就是0&)来表示当前线程所使用的显示设备。
第二个参数是图形模式索引,或者是枚举值ENUM_CURRENT_SETTINGS(&0)或ENUM_REGISTRY_SETTINGS(&1)之一,&0 即当前线程所使用的显示设备的设置。
2、
这里的 Or 不是逻辑运算符“或”(对应 C/C++ 里的 || 运算符),而是位运算符“按位或”(对应 C/C++ 里的 | 运算符)。具体资料可以自行百度。
3、
还是看函数原型:
LONG ChangeDisplaySettings(
LPDEVMODE lpDevMode, // 指向一个描述转变图表的DEVMODE的指针。
DWORD dwflags // 表明了图形模式如何改变
);
第二个参数可以是如下几种:
● 0:表明当前屏幕的图形模式要动态地改变。
● CDS_UPDATEREGISTRY:表明当前屏幕的图形模式会动态地变化,并且该图形模式会更新注册表。该模式信息存贮在用户档案中。
● CDS_TEST:系统检测是否要设置被请求的图形模式。指定CDS_TEST允许一个应用确定哪个图形模式真正的有效。但并不会使系统变为那个有效的图形模式。
● CDS_FULLSCREEN:从本质上讲该模式是暂时的。
● CDS_GLOBAL:该设置保存在全局设置区域内, 因此它们会影响所有的用户。该标志仅在与标志一起使用时才有效。CDS_SET_PRIMARY:该设备成为首要设备。
● CDS_RESET:设置要改变,即使请求的设置与当前设置一样。CDS_NORESET:设置保存在注册表中,但是它不起作用,该标志只有与CDS_UPDATEREGISTRY标志一起使用时才有效。
4、
所谓“32位真彩”指的是图象的位分辨率(简称“位深”),是用来衡量每个像素储存信息的位数。这种分辨率决定可以标记为多少种色彩等级的可能性。32位真彩模式即每个像素用32位表示。
计算机是用二进制来表示颜色的,16位色即有2^16=65536种发色,24位色发色数2^24=1677万多种发色,这是人眼所能分辨的极限了,所以被称为“真彩色”。32位色并不是说发色数是2^32了,还是2^24,不过它增加了256阶颜色的灰度(也就是用ARGB来表示颜色里的A了)。
60Mhz是显示器刷新频率。
参考资料: