📄 devpage.cpp
字号:
//-----------------------------------------------------------------------------------//
// Windows Graphics Programming: Win32 GDI and DirectDraw //
// ISBN 0-13-086985-6 //
// //
// Written by Yuan, Feng www.fengyuan.com //
// Copyright (c) 2000 by Hewlett-Packard Company www.hp.com //
// Published by Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com //
// //
// FileName : devpage.cpp //
// Description: KDevicePage class //
// Version : 1.00.000, May 31, 2000 //
//-----------------------------------------------------------------------------------//
#define STRICT
#define NOCRYPT
#define WINVER 0x0500
#include <windows.h>
#include <tchar.h>
#include "resource.h"
#include "..\\..\\include\\property.h"
#include "..\\..\\include\\listview.h"
#include "DevPage.h"
#include "DevCaps.h"
#include "DCAttr.h"
void AddDisplayDevices(HWND hList)
{
DISPLAY_DEVICE Dev;
Dev.cb = sizeof(Dev);
SendMessage(hList, CB_RESETCONTENT, 0, 0);
for (unsigned i=0;
EnumDisplayDevices(NULL, i, & Dev, 0);
i++ )
SendMessage(hList, CB_ADDSTRING, 0, (LPARAM) Dev.DeviceName);
SendMessage(hList, CB_SETCURSEL, 0, 0);
}
int FrameBufferSize(int width, int height, int bpp)
{
int bytepp = ( bpp + 7 ) / 8; // bytes per pixel
int byteps = ( width * bytepp + 3 ) / 4 * 4; // bytes per scanline
return height * byteps; // bytes per frame buffer
}
void AddDisplaySettings(HWND hList, LPCTSTR pszDeviceName)
{
DEVMODE dm;
dm.dmSize = sizeof(DEVMODE);
dm.dmDriverExtra = 0;
SendMessage(hList, LB_RESETCONTENT, 0, 0);
for (unsigned i=0;
EnumDisplaySettings(pszDeviceName, i, & dm);
i++ )
{
TCHAR szTemp[MAX_PATH];
wsprintf(szTemp, _T("%d by %d, %d bits, %d Hz, %d Kb"),
dm.dmPelsWidth,
dm.dmPelsHeight,
dm.dmBitsPerPel,
dm.dmDisplayFrequency,
FrameBufferSize(dm.dmPelsWidth, dm.dmPelsHeight, dm.dmBitsPerPel) / 1024
);
SendMessage(hList, LB_ADDSTRING, 0, (LPARAM) szTemp);
}
}
BOOL KDevicePage::OnInitDialog(HWND hWnd)
{
AddDisplayDevices(GetDlgItem(hWnd, IDC_DEVICE));
OnDeviceChange(hWnd);
return TRUE;
}
BOOL KDevicePage::OnDeviceChange(HWND hWnd)
{
TCHAR szDeviceName[MAX_PATH];
GetDlgItemText(hWnd, IDC_DEVICE, szDeviceName, MAX_PATH);
{
unsigned iDevNum = 0;
DISPLAY_DEVICE Device;
Device.cb = sizeof(Device);
while ( EnumDisplayDevices(NULL, iDevNum, & Device, 0) )
if ( _tcscmp(szDeviceName, Device.DeviceName)==0 )
break;
else
iDevNum ++;
SetDlgItemText(hWnd, IDC_DEVICESTRING, Device.DeviceString);
SetDlgItemText(hWnd, IDC_DEVICEID, Device.DeviceID);
SetDlgItemText(hWnd, IDC_DEVICEKEY, Device.DeviceKey);
SendDlgItemMessage(hWnd, IDC_STATEFLAGS, CB_RESETCONTENT, 0, 0);
if ( Device.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP )
SendDlgItemMessage(hWnd, IDC_STATEFLAGS, CB_ADDSTRING, 0, (LPARAM) "ATTACHED_TO_DESKTOP");
if ( Device.StateFlags & DISPLAY_DEVICE_MULTI_DRIVER )
SendDlgItemMessage(hWnd, IDC_STATEFLAGS, CB_ADDSTRING, 0, (LPARAM) "MULTI_DRIVER");
if ( Device.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE )
SendDlgItemMessage(hWnd, IDC_STATEFLAGS, CB_ADDSTRING, 0, (LPARAM) "PRIMARY_DEVICE");
if ( Device.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER )
SendDlgItemMessage(hWnd, IDC_STATEFLAGS, CB_ADDSTRING, 0, (LPARAM) "MIRRORING_DRIVER");
if ( Device.StateFlags & DISPLAY_DEVICE_VGA_COMPATIBLE )
SendDlgItemMessage(hWnd, IDC_STATEFLAGS, CB_ADDSTRING, 0, (LPARAM) "VGA_COMPATIBLE");
if ( Device.StateFlags & DISPLAY_DEVICE_MODESPRUNED )
SendDlgItemMessage(hWnd, IDC_STATEFLAGS, CB_ADDSTRING, 0, (LPARAM) "MODESPRUNED");
SendDlgItemMessage(hWnd, IDC_STATEFLAGS, CB_SETCURSEL, 0, 0);
}
AddDisplaySettings(GetDlgItem(hWnd, IDC_MODES), szDeviceName);
return TRUE;
}
BOOL KDevicePage::OnDeviceCaps(HWND hWnd)
{
TCHAR szDeviceName[MAX_PATH];
GetDlgItemText(hWnd, IDC_DEVICE, szDeviceName, MAX_PATH);
HDC hDC = CreateDC(_T("DISPLAY"), szDeviceName, NULL, NULL);
KDeviceCaps caps(hDC);
caps.Dialogbox(m_hInstance, MAKEINTRESOURCE(IDD_DEVICECAPS));
DeleteDC(hDC);
return TRUE;
}
BOOL KDevicePage::OnDCAttributes(HWND hWnd)
{
TCHAR szDeviceName[MAX_PATH];
GetDlgItemText(hWnd, IDC_DEVICE, szDeviceName, MAX_PATH);
HDC hDC = CreateDC(_T("DISPLAY"), szDeviceName, NULL, NULL);
KDCAttributes attr(hDC);
attr.Dialogbox(m_hInstance, MAKEINTRESOURCE(IDD_DCATTRIBUTES), hWnd);
DeleteDC(hDC);
return TRUE;
}
BOOL KDevicePage::DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_INITDIALOG:
return OnInitDialog(hWnd);
case WM_COMMAND:
switch ( LOWORD(wParam) )
{
case IDC_DEVICE:
if ( HIWORD(wParam)==CBN_SELCHANGE )
return OnDeviceChange(hWnd);
break;
case IDC_DEVICECAPS:
return OnDeviceCaps(hWnd);
case IDC_DCATTR:
return OnDCAttributes(hWnd);
}
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -