various rough additions towards a working dialog

svn path=/trunk/; revision=30176
This commit is contained in:
Ged Murphy 2007-11-05 14:39:24 +00:00
parent 64ee2581fe
commit 6833d9e227
5 changed files with 448 additions and 190 deletions

View file

@ -1,4 +1,4 @@
/* -*- c-basic-offset: 8 -*-
/*
rdesktop: A Remote Desktop Protocol client.
Connection settings dialog
Copyright (C) Ged Murphy 2007
@ -20,10 +20,48 @@
#include <windows.h>
#include <commctrl.h>
#include <stdio.h>
#include <tchar.h>
#include "resource.h"
/* As slider control can't contain user data, we have to keep an
* array of RESOLUTION_INFO to have our own associated data.
*/
typedef struct _RESOLUTION_INFO
{
DWORD dmPelsWidth;
DWORD dmPelsHeight;
} RESOLUTION_INFO, *PRESOLUTION_INFO;
typedef struct _SETTINGS_ENTRY
{
struct _SETTINGS_ENTRY *Blink;
struct _SETTINGS_ENTRY *Flink;
DWORD dmBitsPerPel;
DWORD dmPelsWidth;
DWORD dmPelsHeight;
} SETTINGS_ENTRY, *PSETTINGS_ENTRY;
typedef struct _DISPLAY_DEVICE_ENTRY
{
struct _DISPLAY_DEVICE_ENTRY *Flink;
LPTSTR DeviceDescription;
LPTSTR DeviceName;
LPTSTR DeviceKey;
LPTSTR DeviceID;
DWORD DeviceStateFlags;
PSETTINGS_ENTRY Settings; /* sorted by increasing dmPelsHeight, BPP */
DWORD SettingsCount;
PRESOLUTION_INFO Resolutions;
DWORD ResolutionsCount;
PSETTINGS_ENTRY CurrentSettings; /* Points into Settings list */
SETTINGS_ENTRY InitialSettings;
} DISPLAY_DEVICE_ENTRY, *PDISPLAY_DEVICE_ENTRY;
typedef struct _INFO
{
PDISPLAY_DEVICE_ENTRY DisplayDeviceList;
PDISPLAY_DEVICE_ENTRY CurrentDisplayDevice;
HWND hSelf;
HWND hTab;
HWND hGeneralPage;
@ -65,7 +103,7 @@ GeneralOnInit(PINFO pInfo)
SetWindowPos(pInfo->hGeneralPage,
NULL,
15,
122,
110,
0,
0,
SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
@ -138,13 +176,326 @@ GeneralDlgProc(HWND hDlg,
}
static PSETTINGS_ENTRY
GetPossibleSettings(IN LPCTSTR DeviceName, OUT DWORD* pSettingsCount, OUT PSETTINGS_ENTRY* CurrentSettings)
{
DEVMODE devmode;
DWORD NbSettings = 0;
DWORD iMode = 0;
DWORD dwFlags = 0;
PSETTINGS_ENTRY Settings = NULL;
HDC hDC;
PSETTINGS_ENTRY Current;
DWORD bpp, xres, yres, checkbpp;
DWORD curDispFreq;
/* Get current settings */
*CurrentSettings = NULL;
hDC = CreateIC(NULL, DeviceName, NULL, NULL);
bpp = GetDeviceCaps(hDC, PLANES);
bpp *= GetDeviceCaps(hDC, BITSPIXEL);
xres = GetDeviceCaps(hDC, HORZRES);
yres = GetDeviceCaps(hDC, VERTRES);
DeleteDC(hDC);
/* List all settings */
devmode.dmSize = (WORD)sizeof(DEVMODE);
devmode.dmDriverExtra = 0;
if (!EnumDisplaySettingsEx(DeviceName, ENUM_CURRENT_SETTINGS, &devmode, dwFlags))
return NULL;
curDispFreq = devmode.dmDisplayFrequency;
while (EnumDisplaySettingsEx(DeviceName, iMode, &devmode, dwFlags))
{
if ((devmode.dmBitsPerPel==8 ||
devmode.dmBitsPerPel==16 ||
devmode.dmBitsPerPel==24 ||
devmode.dmBitsPerPel==32) &&
devmode.dmDisplayFrequency==curDispFreq)
{
checkbpp=1;
}
else
checkbpp=0;
if (devmode.dmPelsWidth < 640 ||
devmode.dmPelsHeight < 480 || checkbpp == 0)
{
iMode++;
continue;
}
Current = HeapAlloc(GetProcessHeap(), 0, sizeof(SETTINGS_ENTRY));
if (Current != NULL)
{
/* Sort resolutions by increasing height, and BPP */
PSETTINGS_ENTRY Previous = NULL;
PSETTINGS_ENTRY Next = Settings;
Current->dmPelsWidth = devmode.dmPelsWidth;
Current->dmPelsHeight = devmode.dmPelsHeight;
Current->dmBitsPerPel = devmode.dmBitsPerPel;
while (Next != NULL && (
Next->dmPelsWidth < Current->dmPelsWidth ||
(Next->dmPelsWidth == Current->dmPelsWidth && Next->dmPelsHeight < Current->dmPelsHeight) ||
(Next->dmPelsHeight == Current->dmPelsHeight &&
Next->dmPelsWidth == Current->dmPelsWidth &&
Next->dmBitsPerPel < Current->dmBitsPerPel )))
{
Previous = Next;
Next = Next->Flink;
}
Current->Blink = Previous;
Current->Flink = Next;
if (Previous == NULL)
Settings = Current;
else
Previous->Flink = Current;
if (Next != NULL)
Next->Blink = Current;
if (devmode.dmPelsWidth == xres && devmode.dmPelsHeight == yres && devmode.dmBitsPerPel == bpp)
{
*CurrentSettings = Current;
}
NbSettings++;
}
iMode++;
}
*pSettingsCount = NbSettings;
return Settings;
}
AddDisplayDevice(PINFO pInfo, PDISPLAY_DEVICE DisplayDevice)
{
PDISPLAY_DEVICE_ENTRY newEntry = NULL;
LPTSTR description = NULL;
LPTSTR name = NULL;
LPTSTR key = NULL;
LPTSTR devid = NULL;
DWORD descriptionSize, nameSize, keySize, devidSize;
PSETTINGS_ENTRY Current;
DWORD ResolutionsCount = 1;
DWORD i;
newEntry = HeapAlloc(GetProcessHeap(),
0,
sizeof(DISPLAY_DEVICE_ENTRY));
if (!newEntry) goto ByeBye;
ZeroMemory(newEntry, sizeof(DISPLAY_DEVICE_ENTRY));
newEntry->Settings = GetPossibleSettings(DisplayDevice->DeviceName,
&newEntry->SettingsCount,
&newEntry->CurrentSettings);
if (!newEntry->Settings) goto ByeBye;
newEntry->InitialSettings.dmPelsWidth = newEntry->CurrentSettings->dmPelsWidth;
newEntry->InitialSettings.dmPelsHeight = newEntry->CurrentSettings->dmPelsHeight;
newEntry->InitialSettings.dmBitsPerPel = newEntry->CurrentSettings->dmBitsPerPel;
/* Count different resolutions */
for (Current = newEntry->Settings; Current != NULL; Current = Current->Flink)
{
if (Current->Flink != NULL &&
((Current->dmPelsWidth != Current->Flink->dmPelsWidth) &&
(Current->dmPelsHeight != Current->Flink->dmPelsHeight)))
{
ResolutionsCount++;
}
}
newEntry->Resolutions = HeapAlloc(GetProcessHeap(),
0,
ResolutionsCount * sizeof(RESOLUTION_INFO));
if (!newEntry->Resolutions) goto ByeBye;
newEntry->ResolutionsCount = ResolutionsCount;
/* Fill resolutions infos */
for (Current = newEntry->Settings, i = 0; Current != NULL; Current = Current->Flink)
{
if (Current->Flink == NULL ||
(Current->Flink != NULL &&
((Current->dmPelsWidth != Current->Flink->dmPelsWidth) &&
(Current->dmPelsHeight != Current->Flink->dmPelsHeight))))
{
newEntry->Resolutions[i].dmPelsWidth = Current->dmPelsWidth;
newEntry->Resolutions[i].dmPelsHeight = Current->dmPelsHeight;
i++;
}
}
descriptionSize = (_tcslen(DisplayDevice->DeviceString) + 1) * sizeof(TCHAR);
description = HeapAlloc(GetProcessHeap(), 0, descriptionSize);
if (!description) goto ByeBye;
nameSize = (_tcslen(DisplayDevice->DeviceName) + 1) * sizeof(TCHAR);
name = HeapAlloc(GetProcessHeap(), 0, nameSize);
if (!name) goto ByeBye;
keySize = (_tcslen(DisplayDevice->DeviceKey) + 1) * sizeof(TCHAR);
key = HeapAlloc(GetProcessHeap(), 0, keySize);
if (!key) goto ByeBye;
devidSize = (_tcslen(DisplayDevice->DeviceID) + 1) * sizeof(TCHAR);
devid = HeapAlloc(GetProcessHeap(), 0, devidSize);
if (!devid) goto ByeBye;
memcpy(description, DisplayDevice->DeviceString, descriptionSize);
memcpy(name, DisplayDevice->DeviceName, nameSize);
memcpy(key, DisplayDevice->DeviceKey, keySize);
memcpy(devid, DisplayDevice->DeviceID, devidSize);
newEntry->DeviceDescription = description;
newEntry->DeviceName = name;
newEntry->DeviceKey = key;
newEntry->DeviceID = devid;
newEntry->DeviceStateFlags = DisplayDevice->StateFlags;
newEntry->Flink = pInfo->DisplayDeviceList;
pInfo->DisplayDeviceList = newEntry;
return TRUE;
ByeBye:
if (newEntry != NULL)
{
if (newEntry->Settings != NULL)
{
Current = newEntry->Settings;
while (Current != NULL)
{
PSETTINGS_ENTRY Next = Current->Flink;
HeapFree(GetProcessHeap(), 0, Current);
Current = Next;
}
}
if (newEntry->Resolutions != NULL)
HeapFree(GetProcessHeap(), 0, newEntry->Resolutions);
HeapFree(GetProcessHeap(), 0, newEntry);
}
if (description != NULL)
HeapFree(GetProcessHeap(), 0, description);
if (name != NULL)
HeapFree(GetProcessHeap(), 0, name);
if (key != NULL)
HeapFree(GetProcessHeap(), 0, key);
if (devid != NULL)
HeapFree(GetProcessHeap(), 0, devid);
return FALSE;
}
static VOID
UpdateDisplay(IN HWND hwndDlg, PINFO pGlobalData, IN BOOL bUpdateThumb)
{
TCHAR Buffer[64];
TCHAR Pixel[64];
DWORD index;
LoadString(hInst, IDS_PIXEL, Pixel, sizeof(Pixel) / sizeof(TCHAR));
_stprintf(Buffer, Pixel, pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth, pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight, Pixel);
//SendDlgItemMessage(pGlobalData->hDisplayPage, IDC_SETTINGS_RESOLUTION_TEXT, WM_SETTEXT, 0, (LPARAM)Buffer);
SetDlgItemText(pGlobalData->hDisplayPage, pGlobalData->hDisplayPage, Buffer);
if (LoadString(hInst, (2900 + pGlobalData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel), Buffer, sizeof(Buffer) / sizeof(TCHAR)))
SendDlgItemMessage(hwndDlg, IDC_GEOSLIDER, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)Buffer);
}
static VOID
FillResolutionsAndColors(PINFO pInfo)
{
PSETTINGS_ENTRY Current;
DWORD index, i, num;
DWORD MaxBpp = 0;
UINT HighBpp;
pInfo->CurrentDisplayDevice = pInfo->DisplayDeviceList; /* Update global variable */
/* find max bpp */
SendDlgItemMessage(pInfo->hDisplayPage,
IDC_BPPCOMBO,
CB_RESETCONTENT,
0,
0);
for (Current = pInfo->DisplayDeviceList->Settings; Current != NULL; Current = Current->Flink)
{
if (Current->dmBitsPerPel > MaxBpp)
MaxBpp = Current->dmBitsPerPel;
}
switch (MaxBpp)
{
case 32:
case 24: HighBpp = IDS_HIGHCOLOR24; break;
case 16: HighBpp = IDS_HIGHCOLOR16; break;
case 8: HighBpp = IDS_256COLORS; break;
}
/* Fill color depths combo box */
SendDlgItemMessage(pInfo->hDisplayPage,
IDC_BPPCOMBO,
CB_RESETCONTENT,
0,
0);
num = HighBpp - IDS_256COLORS;
for (i = 0, Current = pInfo->DisplayDeviceList->Settings;
i <= num && Current != NULL;
i++, Current = Current->Flink)
{
TCHAR Buffer[64];
if (LoadString(hInst,
(IDS_256COLORS + i),
Buffer,
sizeof(Buffer) / sizeof(TCHAR)))
{
index = (DWORD)SendDlgItemMessage(pInfo->hDisplayPage,
IDC_BPPCOMBO,
CB_FINDSTRINGEXACT,
-1,
(LPARAM)Buffer);
if (index == (DWORD)CB_ERR)
{
index = (DWORD)SendDlgItemMessage(pInfo->hDisplayPage,
IDC_BPPCOMBO,
CB_ADDSTRING,
0,
(LPARAM)Buffer);
SendDlgItemMessage(pInfo->hDisplayPage,
IDC_BPPCOMBO,
CB_SETITEMDATA,
index,
Current->dmBitsPerPel);
}
}
}
/* Fill resolutions slider */
SendDlgItemMessage(pInfo->hDisplayPage,
IDC_GEOSLIDER,
TBM_CLEARTICS,
TRUE,
0);
SendDlgItemMessage(pInfo->hDisplayPage,
IDC_GEOSLIDER,
TBM_SETRANGE,
TRUE,
MAKELONG(0, pInfo->DisplayDeviceList->ResolutionsCount)); //extra 1 for full screen
UpdateDisplay(pInfo->hDisplayPage, pInfo, TRUE);
}
static VOID
DisplayOnInit(PINFO pInfo)
{
DISPLAY_DEVICE displayDevice;
DWORD iDevNum = 0;
BOOL GotDev = FALSE;
SetWindowPos(pInfo->hDisplayPage,
NULL,
15,
122,
110,
0,
0,
SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
@ -191,6 +542,21 @@ DisplayOnInit(PINFO pInfo)
sizeof(BITMAP),
&pInfo->bitmap);
}
/* Get video cards list */
displayDevice.cb = (DWORD)sizeof(DISPLAY_DEVICE);
while (EnumDisplayDevices(NULL, iDevNum, &displayDevice, 0x1))
{
if ((displayDevice.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) != 0)
{
if (AddDisplayDevice(pInfo, &displayDevice))
GotDev = TRUE;
}
iDevNum++;
}
if (GotDev)
FillResolutionsAndColors(pInfo);
}
@ -238,19 +604,45 @@ DisplayDlgProc(HWND hDlg,
break;
}
case WM_CLOSE:
case WM_HSCROLL:
{
switch (LOWORD(wParam))
{
if (pInfo->hRemote)
DestroyIcon(pInfo->hRemote);
case TB_LINEUP:
case TB_LINEDOWN:
case TB_PAGEUP:
case TB_PAGEDOWN:
case TB_TOP:
case TB_BOTTOM:
case TB_ENDTRACK:
{
DWORD newPosition = (DWORD)SendDlgItemMessage(hDlg, IDC_GEOSLIDER, TBM_GETPOS, 0, 0);
//OnResolutionChanged(hwndDlg, pGlobalData, newPosition, TRUE);
UpdateDisplay(hDlg, pInfo, TRUE);
break;
}
if (pInfo->hColor)
DestroyIcon(pInfo->hColor);
if (pInfo->hSpectrum)
DeleteObject(pInfo->hSpectrum);
break;
case TB_THUMBTRACK:
//OnResolutionChanged(hDlg, pInfo, HIWORD(wParam), FALSE);
UpdateDisplay(hDlg, pInfo, TRUE);
break;
}
break;
}
case WM_CLOSE:
{
if (pInfo->hRemote)
DestroyIcon(pInfo->hRemote);
if (pInfo->hColor)
DestroyIcon(pInfo->hColor);
if (pInfo->hSpectrum)
DeleteObject(pInfo->hSpectrum);
break;
}
break;
}

View file

@ -27,22 +27,23 @@ BEGIN
ICON "", IDC_REMICON, 15,19,20,20
ICON "", IDC_COLORSICON, 15,98,20,20
LTEXT "Set the screen size of your remote desktop. Drag the slider to the far right to go fullscreen",IDC_STATIC,53,22,175,21
CONTROL "",IDC_GEOSLIDER,"msctls_trackbar32",WS_TABSTOP,56,49,124,15
COMBOBOX IDC_BPPCOMBO,56,102,128,30,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
CONTROL "",IDC_COLORIMAGE,"Static",SS_OWNERDRAW | SS_SUNKEN, 56,121,127,13
CONTROL "", IDC_GEOSLIDER, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 56, 42, 124, 17
COMBOBOX IDC_BPPCOMBO,56,102,128,80, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
CONTROL "",IDC_COLORIMAGE,"Static",SS_OWNERDRAW | SS_SUNKEN, 56,121,127,10
LTEXT "Note: Settings on the remote computer might override this setting.",IDC_STATIC,56,143,165,18
LTEXT "Less",IDC_STATIC,35,52,15,8
LTEXT "More",IDC_STATIC,189,51,17,8
LTEXT "Less",IDC_STATIC,35,42,15,8
LTEXT "More",IDC_STATIC,189,42,17,8
LTEXT "", IDC_SETTINGS_RESOLUTION_TEXT, 56, 62, 124, 10, SS_CENTER
END
IDD_CONNECTDIALOG DIALOGEX 0, 0, 260, 277
IDD_CONNECTDIALOG DIALOGEX 0, 0, 260, 267
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Remote Desktop Connection"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Connect",IDOK,147,256,50,14
PUSHBUTTON "Cancel",IDCANCEL,203,256,50,14
CONTROL "",IDC_TAB,"SysTabControl32",0x0,7,54,246,198
DEFPUSHBUTTON "Connect",IDOK,147,249,50,14
PUSHBUTTON "Cancel",IDCANCEL,203,249,50,14
CONTROL "",IDC_TAB,"SysTabControl32",0x0,7,54,246,190
END
@ -50,4 +51,10 @@ STRINGTABLE
BEGIN
IDS_TAB_GENERAL "General"
IDS_TAB_DISPLAY "Display"
IDS_256COLORS "256 Colors"
IDS_HIGHCOLOR15 "High Color (15 bit)"
IDS_HIGHCOLOR16 "High Color (16 bit)"
IDS_HIGHCOLOR24 "True Color (24 bit)"
IDS_PIXEL "%lux%lu Pixels"
IDS_FULLSCREEN "Full Screen"
END

View file

@ -1,6 +1,7 @@
#define IDC_STATIC -1
#define IDD_CONNECTDIALOG 101
#define IDD_GENERAL 105
#define IDS_TAB_DISPLAY 106
#define IDD_DISPLAY 107
#define IDC_TAB 1003
#define IDC_SERVERCOMBO 1007
@ -9,6 +10,7 @@
#define IDC_OPEN 1010
#define IDC_GEOSLIDER 1012
#define IDC_BPPCOMBO 1013
#define IDC_SETTINGS_RESOLUTION_TEXT 1014
#define IDC_LOGONICON 1016
#define IDC_CONNICON 1017
@ -19,10 +21,19 @@
#define IDB_SPECT 1017
#define IDC_COLORIMAGE 1018
#define IDS_TAB_GENERAL 1104
#define IDC_STATIC -1
#define IDI_LOGON 2000
#define IDI_CONN 2001
#define IDI_REMOTE 2002
#define IDI_COLORS 2003
#define IDI_MSTSC 2004
#define IDS_TAB_DISPLAY 3000
#define IDS_TAB_GENERAL 3001
#define IDS_PIXEL 3006
#define IDS_FULLSCREEN 3007
#define IDS_256COLORS 4000
#define IDS_HIGHCOLOR15 4001
#define IDS_HIGHCOLOR16 4002
#define IDS_HIGHCOLOR24 4003

View file

@ -3,8 +3,9 @@
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
//1 24 DISCARDABLE "manifest.xml"
1 24 DISCARDABLE "manifest.xml"
IDI_MSTSC ICON "res/mstsc.ico"
IDI_LOGON ICON "res/logon.ico"
IDI_CONN ICON "res/connection.ico"
IDI_REMOTE ICON "res/remote.ico"

View file

@ -18,18 +18,12 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifdef _WIN32_WCE
#define MYWINCE
#endif
#include <winsock2.h> /* winsock2.h first */
#include <windows.h>
#ifdef MYWINCE
#include <aygshell.h> /* aygshell.lib */
#endif /* MYWINCE */
#include <winuser.h>
#include <stdio.h>
#include "uimain.h"
#include "resource.h"
extern char g_username[];
extern char g_hostname[];
@ -69,9 +63,6 @@ static int g_clip_right = 800;
static int g_clip_bottom = 600;
static RECT g_wnd_clip; /* this client area of whats actually visable */
/* set from WM_SIZE */
#ifdef MYWINCE
static int g_sip_up = 0;
#endif
/*****************************************************************************/
static void
@ -665,79 +656,6 @@ handle_WM_VSCROLL(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
return 0;
}
#ifdef MYWINCE
/*****************************************************************************/
static LRESULT
handle_WM_SETTINGCHANGE(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
SIPINFO si;
SHMENUBARINFO mb;
int x;
int y;
int w;
int h;
int style;
ZeroMemory(&si, sizeof(SIPINFO));
si.cbSize = sizeof(SIPINFO);
SHSipInfo(SPI_GETSIPINFO, lParam, &si, 0);
x = si.rcVisibleDesktop.left;
y = si.rcVisibleDesktop.top;
w = si.rcVisibleDesktop.right - x;
h = si.rcVisibleDesktop.bottom - y;
/* get rid of menu */
DestroyWindow(SHFindMenuBar(g_Wnd));
if (si.fdwFlags & SIPF_ON)
{
g_sip_up = 1; /* used for WM_SETFOCUS */
ZeroMemory(&mb, sizeof(SHMENUBARINFO));
mb.cbSize = sizeof(SHMENUBARINFO);
mb.hwndParent = g_Wnd;
mb.dwFlags = SHCMBF_EMPTYBAR;
SHCreateMenuBar(&mb);
MoveWindow(g_Wnd, x, y, w, h, FALSE);
SHFullScreen(g_Wnd, SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON |
SHFS_SHOWSTARTICON);
}
else
{
g_sip_up = 0;
if (g_fullscreen)
{
MoveWindow(g_Wnd, 0, 0, g_screen_width, g_screen_height, FALSE);
}
else
{
MoveWindow(g_Wnd, x, y, w, h, FALSE);
}
if ((g_fullscreen && g_width <= g_screen_width &&
g_height <= g_screen_height) ||
(!g_fullscreen && g_width <= w && g_height <= h))
{
style = GetWindowLong(g_Wnd, GWL_STYLE);
if (style & WS_HSCROLL)
{
style &= ~WS_HSCROLL;
style &= ~WS_VSCROLL;
SetWindowLong(g_Wnd, GWL_STYLE, style);
g_xscroll = 0;
g_yscroll = 0;
}
}
if (g_fullscreen)
{
SHFullScreen(g_Wnd, SHFS_HIDETASKBAR | SHFS_SHOWSIPBUTTON |
SHFS_SHOWSTARTICON);
}
else
{
SHFullScreen(g_Wnd, SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON |
SHFS_SHOWSTARTICON);
}
}
return 0;
}
#endif /* MYWINCE */
/*****************************************************************************/
LRESULT CALLBACK
@ -793,18 +711,8 @@ WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
return handle_WM_HSCROLL(hWnd, message, wParam, lParam);
case WM_VSCROLL:
return handle_WM_VSCROLL(hWnd, message, wParam, lParam);
#ifdef MYWINCE
case WM_SETTINGCHANGE:
return handle_WM_SETTINGCHANGE(hWnd, message, wParam, lParam);
#endif /* MYWINCE */
case WM_SETFOCUS:
mi_check_modifier();
#ifdef MYWINCE
if (g_sip_up)
{
SHSipPreference(hWnd, SIP_UP);
}
#endif
return DefWindowProc(hWnd, message, wParam, lParam);
default:
return DefWindowProc(hWnd, message, wParam, lParam);
@ -854,6 +762,8 @@ mi_create_window(void)
str_to_uni(classname, "rdesktop");
wc.lpszClassName = classname;
str_to_uni(caption, "ReactOS Remote Desktop");
wc.hIcon = LoadIcon(g_Instance,
MAKEINTRESOURCE(IDI_MSTSC));
/* Register the window class. */
if (!RegisterClass(&wc))
{
@ -863,21 +773,7 @@ mi_create_window(void)
rc.right = rc.left + UI_MIN(g_width, g_screen_width);
rc.top = 0;
rc.bottom = rc.top + UI_MIN(g_height, g_screen_height);
#ifdef MYWINCE
SHInitExtraControls();
x = CW_USEDEFAULT;
y = CW_USEDEFAULT;
w = CW_USEDEFAULT;
h = CW_USEDEFAULT;
style = WS_VISIBLE;
if (g_fullscreen)
{
x = 0;
y = 0;
w = g_screen_width;
h = g_screen_height;
}
#else /* MYWINCE */
if (g_fullscreen)
{
style = WS_POPUP;
@ -896,7 +792,7 @@ mi_create_window(void)
y = CW_USEDEFAULT;
w = rc.right - rc.left;
h = rc.bottom - rc.top;
#endif /* MYWINCE */
g_Wnd = CreateWindow(wc.lpszClassName, caption,
style, x, y, w, h,
(HWND) NULL, (HMENU) NULL, g_Instance,
@ -915,26 +811,9 @@ mi_create_window(void)
}
UpdateWindow(g_Wnd);
#ifdef MYWINCE
if (g_fullscreen)
{
SHFullScreen(g_Wnd, SHFS_HIDETASKBAR | SHFS_SHOWSIPBUTTON |
SHFS_SHOWSTARTICON);
}
else
{
SHFullScreen(g_Wnd, SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON |
SHFS_SHOWSTARTICON);
}
#endif /* MYWINCE */
/* WinCE doesn't have WSAAsyncSelect */
#ifdef MYWINCE
SetTimer(g_Wnd, 1, 1000 / 60, 0); /* 60 per second */
#else /* MYWINCE */
WSAAsyncSelect(g_tcp_sck, g_Wnd, WM_APP + 1, FD_READ);
SetTimer(g_Wnd, 1, 333, 0);
#endif /* MYWINCE */
return 1;
}
@ -1151,7 +1030,7 @@ mi_process_a_param(char * param1, int state)
{
state = 0;
g_server_depth = atol(param1);
if (g_server_depth != 8 && g_server_depth != 15 && g_server_depth != 16)
if (g_server_depth != 8 && g_server_depth != 15 && g_server_depth != 16 && g_server_depth != 24)
{
mi_error("invalid server bpp\r\n");
}
@ -1207,31 +1086,19 @@ mi_post_param(void)
}
else if (g_workarea)
{
#ifdef MYWINCE
g_xoff = 0;
g_yoff = 0;
g_width = g_screen_width;
g_height = g_screen_height - 26; /* start menu size is 26 */
#else /* MYWINCE */
g_xoff = GetSystemMetrics(SM_CXEDGE) * 2;
g_yoff = GetSystemMetrics(SM_CYCAPTION) +
GetSystemMetrics(SM_CYEDGE) * 2;
g_width = g_screen_width;
g_height = g_screen_height;
g_height = (g_height - g_yoff) - g_xoff - 20; /* todo */
#endif /* MYWINCE */
g_width_height_set = 1;
}
else
{
#ifdef MYWINCE
g_xoff = 0;
g_yoff = 0;
#else /* MYWINCE */
g_xoff = GetSystemMetrics(SM_CXEDGE) * 2;
g_yoff = GetSystemMetrics(SM_CYCAPTION) +
GetSystemMetrics(SM_CYEDGE) * 2;
#endif /* MYWINCE */
}
g_width = g_width & (~3);
return 1;
@ -1260,11 +1127,8 @@ mi_check_config_file(void)
valueindex = 0;
vname[vnameindex] = 0;
value[valueindex] = 0;
#ifdef MYWINCE
str_to_uni(filename, "\\My Documents\\winrdesktop.ini");
#else /* MYWINCE */
str_to_uni(filename, ".\\winrdesktop.ini");
#endif /* MYWINCE */
fd = CreateFile(filename, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
@ -1334,9 +1198,7 @@ mi_process_cl(LPTSTR lpCmdLine)
{
char param[256];
char param1[256];
#ifndef MYWINCE
TCHAR l_username[256];
#endif
DWORD size;
int len;
int i;
@ -1347,8 +1209,7 @@ mi_process_cl(LPTSTR lpCmdLine)
strcpy(g_username, "pda");
/* get username and convert it from unicode */
size = 255;
#ifndef MYWINCE
/* WinCE doesn't have GetUserName */
if (GetUserName(l_username, &size))
{
for (i = size; i >= 0; i--)
@ -1361,7 +1222,7 @@ mi_process_cl(LPTSTR lpCmdLine)
{
mi_show_error("GetUserName");
}
#endif /* MYWINCE */
/* get computer name */
if (gethostname(g_hostname, 255) != 0)
{
@ -1605,12 +1466,8 @@ mi_screen_copy(int x, int y, int cx, int cy, int srcx, int srcy)
HRGN rgn;
int ok_to_ScrollWindowEx;
/* WinCE can't scroll in 2 directions at once */
#ifdef MYWINCE
ok_to_ScrollWindowEx = cx == 0 || cy == 0;
#else /* MYWINCE */
ok_to_ScrollWindowEx = 1;
#endif /* MYWINCE */
if (!ok_to_ScrollWindowEx)
{
rgn = CreateRectRgn(x - g_xscroll, y - g_yscroll,
@ -1667,9 +1524,6 @@ mi_create_cursor(unsigned int x, unsigned int y,
int width, int height,
unsigned char * andmask, unsigned char * xormask)
{
#ifdef MYWINCE
return (void *) 1;
#else /* MYWINCE */
HCURSOR hCur;
hCur = CreateCursor(g_Instance, x, y, width, height, andmask, xormask);
@ -1678,32 +1532,25 @@ mi_create_cursor(unsigned int x, unsigned int y,
hCur = LoadCursor(NULL, IDC_ARROW);
}
return hCur;
#endif /* MYWINCE */
}
/*****************************************************************************/
void
mi_destroy_cursor(void * cursor)
{
#ifdef MYWINCE
#else /* MYWINCE */
if (g_cursor == cursor)
{
g_cursor = 0;
}
DestroyCursor(cursor);
#endif /* MYWINCE */
}
/*****************************************************************************/
void
mi_set_cursor(void * cursor)
{
#ifdef MYWINCE
#else /* MYWINCE */
g_cursor = cursor;
SetCursor(g_cursor);
#endif /* MYWINCE */
}
/*****************************************************************************/