| 实现逻辑调色板 |
|
| 作者:不详 文章来源:不详 点击数: 更新时间:2005-8-21 |
case WM_QUERYNEWPALETTE: if (!bFullscreen && lpPalette && lpFrontBuffer) { HRESULT ddrval; ddrval = IDirectDrawSurface_SetPalette(lpFrontBuffer,lpPalette); if( ddrval == DDERR_SURFACELOST ) { IDirectDrawSurface_Restore( lpFrontBuffer ); ddrval= IDirectDrawSurface_SetPalette(lpFrontBuffer,lpPalette); if( ddrval == DDERR_SURFACELOST ) { Msg(" Failed to restore palette after second try"); } } if( ddrval == DD_OK ) { SetWindowText( hWnd, OUR_APP_NAME ); } } break; WM_QUERYNEWPALETTE:在窗口收到输入焦点前发出,当窗口收到输入焦点后将返回显示它是否能实现逻辑调色板。 在这个消息获得后,程序先检测是否运行于窗口模式且调色板和前缓冲区已设定,然后设定一次调色板,若失败则恢复前缓冲区然后再试一次,如果仍然失败则输出错误信息。两次设定若成功一次则将标题改为“Win Fox Application”。 改变系统调色板时 case WM_PALETTECHANGED: if ((HWND)wParam != hWnd) { if( !bFullscreen ) { if( !bStress ) { Msg("***** PALETTE CHANGED, PAUSING GAME"); PauseGame(); } else { Msg("Lost palette but continuing"); SetWindowText( hWnd, OUR_APP_NAME " - palette changed COLORS PROBABLY WRONG" ) } } } break; WM_PALETTECHANGED:本消息在拥有输入焦点的当前窗口实现其逻辑调色板时送往所有的窗口。这时,系统调色板被改变,本消息允许不带输入焦点的窗口使用调色板去实现自己的逻辑调色板和更新其用户区域。 在得到这个消息后,程序首先是否是当前窗口改变了系统调色板,如果是则直接跳出窗口过程,若不是则再检测是否是全屏模式,若是则直接跳出窗口过程,若非则先检测bStress是否为FLASE,若为FLASE则暂停游戏,若为TURE则将标题条改为“ - palette changed COLORS PROBABLY WRONG”。 |
| 外挂文章录入:admin 责任编辑:admin |
|
上一篇外挂文章: 窗口的移动、改变大小和窗口活 下一篇外挂文章: 游戏的操作按键 |
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |