2,722
社区成员
发帖
与我相关
我的任务
分享
? SetDisplayMode( '1024x768x32@70' )
*!* ---------------------------------------------------------------------------------
*!* 功能: 设置当前显示模式
*!* 入口: tcModeDesc - 显示模式描述, 格式为: 宽x高x颜色位数@刷新率
*!* tiType - 0/1/2 ( 临时/永久/测试 )
*!* 出口: 操作结果( -1/0/1 - 失败/成功/需要重启生效 )
*!* by:dkfdtf
*!* 需要 vfp9
*!* ---------------------------------------------------------------------------------
Procedure SetDisplayMode( tcModeDesc, tiType )
#Define CDS_UPDATEREGISTRY 0x00000001
#Define CDS_TEST 0x00000002
#Define CDS_FULLSCREEN 0x00000004
#Define CDS_GLOBAL 0x00000008
#Define CDS_SET_PRIMARY 0x00000010
#Define CDS_VIDEOPARAMETERS 0x00000020
#Define CDS_NORESET 0x10000000
#Define CDS_RESET 0x40000000
#Define DM_BITSPERPEL 0x00040000
#Define DM_PELSWIDTH 0x00080000
#Define DM_PELSHEIGHT 0x00100000
#Define DM_DISPLAYFLAGS 0x00200000
#Define DM_DISPLAYFREQUENCY 0x00400000
If ( Pcount() < 1 )
Return .F.
Endif
If ( Pcount() < 2 )
m.tiType = 0
Endif
Local iWidth, iHeight, iBpp, iFreq, cDevMode, iItems, iResult
m.iWidth = Cast( Getwordnum( m.tcModeDesc, 1, 'x' ) As I )
m.iHeight = Cast( Getwordnum( m.tcModeDesc, 2, 'x' ) As I )
m.iBpp = Cast( Getwordnum( m.tcModeDesc, 3, 'x' ) As I )
m.iFreq = Cast( Getwordnum( m.tcModeDesc, 2, '@' ) As I )
m.cDevMode = Replicate( Chr(0), 4+16+5*2+32+2+( 4*3+4+4 )+8*4 )
m.cDevMode = Replicate( Chr(0), 32 + 4 ) ;
+ BinToC( Len( m.cDevMode ), 'rs' ) + m.cDevMode
*!* 获取当前显示设置
Declare Long EnumDisplaySettings In WIN32API As _dp_enumdispset ;
String lpszDeviceName, ; && specifies the display device
Long iModeNum, ; && specifies the graphics mode
String @ lpDevMode && points to structure to receive settings
_dp_enumdispset( Null, -1, @ m.cDevMode ) && -1 == ENUM_CURRENT_SETTINGS
Clear Dlls _dp_enumdispset
m.iItems = Bitor( DM_BITSPERPEL, DM_PELSWIDTH, DM_PELSHEIGHT, DM_DISPLAYFREQUENCY )
m.cDevMode = Left( m.cDevMode, 32+8 ) ;
+ BinToC( m.iItems, 'rs' ) ;
+ Substr( m.cDevMode, 1+32+8+4, 16+5*2+32+2 ) ;
+ BinToC( m.iBpp, 'rs' ) ;
+ BinToC( m.iWidth, 'rs' ) + BinToC( m.iHeight, 'rs' ) ;
+ Substr( m.cDevMode, 1+32+8+4+4*3, 4 ) ;
+ BinToC( m.iFreq, 'rs' ) ;
+ Substr( m.cDevMode, 1+32+8+4+4*3+4 )
Declare Long ChangeDisplaySettings In WIN32API As _dp_setdispmode ;
String lpDevMode, ; && graphics mode
Long dwflags && graphics mode options
m.iResult = _dp_setdispmode( m.cDevMode, Icase( ;
0 == m.tiType, 0, 1 == m.tiType, CDS_UPDATEREGISTRY, CDS_TEST ))
Clear Dlls _dp_setdispmode
Return Iif( m.iResult < 0, -1, m.iResult )
Endproc