ReactOS  0.4.12-dev-36-g472787f
connectdialog.c
Go to the documentation of this file.
1 /*
2  rdesktop: A Remote Desktop Protocol client.
3  Connection settings dialog
4  Copyright (C) Ged Murphy 2007
5 
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License along
17  with this program; if not, write to the Free Software Foundation, Inc.,
18  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 */
20 
21 #include "precomp.h"
22 
23 #include <winreg.h>
24 #include <commdlg.h>
25 
26 #define MAX_KEY_NAME 255
27 
29 
30 static VOID ReLoadGeneralPage(PINFO pInfo);
31 static VOID ReLoadDisplayPage(PINFO pInfo);
32 
33 static VOID
35 {
37  WCHAR szFileName[MAX_PATH] = L"Default.rdp";
38  static WCHAR szFilter[] = L"Remote Desktop Files (*.RDP)\0*.rdp\0";
39 
40  ZeroMemory(&ofn, sizeof(ofn));
41  ofn.lStructSize = sizeof(OPENFILENAMEW);
42  ofn.hwndOwner = pInfo->hGeneralPage;
43  ofn.nMaxFile = MAX_PATH;
44  ofn.nMaxFileTitle = MAX_PATH;
45  ofn.lpstrDefExt = L"RDP";
46  ofn.lpstrFilter = szFilter;
47  ofn.lpstrFile = szFileName;
49 
50  if (GetOpenFileNameW(&ofn))
51  {
52  LoadRdpSettingsFromFile(pInfo->pRdpSettings, szFileName);
53  ReLoadGeneralPage(pInfo);
54  ReLoadDisplayPage(pInfo);
55  }
56 }
57 
58 
59 static VOID
61 {
63  WCHAR szFileName[MAX_PATH] = L"Default.rdp";
64  static WCHAR szFilter[] = L"Remote Desktop Files (*.RDP)\0*.rdp\0";
65 
66  ZeroMemory(&ofn, sizeof(ofn));
67  ofn.lStructSize = sizeof(OPENFILENAMEW);
68  ofn.hwndOwner = pInfo->hGeneralPage;
69  ofn.nMaxFile = MAX_PATH;
70  ofn.nMaxFileTitle = MAX_PATH;
71  ofn.lpstrDefExt = L"RDP";
72  ofn.lpstrFilter = szFilter;
73  ofn.lpstrFile = szFileName;
75 
76  if (GetSaveFileNameW(&ofn))
77  {
78  SaveAllSettings(pInfo);
79  SaveRdpSettingsToFile(szFileName, pInfo->pRdpSettings);
80  }
81 }
82 
83 
84 static VOID
86 {
87  switch (TabCtrl_GetCurSel(pInfo->hTab))
88  {
89  case 0: //General
93  break;
94  case 1: //Display
98  break;
99  }
100 }
101 
102 
103 static VOID
105 {
106  WCHAR szValue[MAXVALUE+1000];
108  WCHAR szKeyName[] = L"Software\\Microsoft\\Terminal Server Client\\Servers";
109  PWCHAR lpAddress;
110  HKEY hKey;
111  HKEY hSubKey;
112  LONG lRet = ERROR_SUCCESS;
113  INT iIndex = 0;
115 
117 
118  /* remove possible port number */
119  lpAddress = wcstok(szValue, L":");
120 
121  if (lpAddress == NULL)
122  return;
123 
125  szKeyName,
126  0,
127  KEY_READ,
128  &hKey) == ERROR_SUCCESS)
129  {
130  while (lRet == ERROR_SUCCESS)
131  {
132  dwSize = MAX_KEY_NAME;
133 
134  lRet = RegEnumKeyExW(hKey, iIndex, szName, &dwSize, NULL, NULL, NULL, NULL);
135 
136  if(lRet == ERROR_SUCCESS && wcscmp(szName, lpAddress) == 0)
137  {
138  if(RegOpenKeyExW(hKey, szName, 0, KEY_READ, &hSubKey) != ERROR_SUCCESS)
139  break;
140 
141  dwSize = MAXVALUE * sizeof(WCHAR);
142 
143  if(RegQueryValueExW(hKey, L"UsernameHint", 0, NULL, (LPBYTE)szValue, &dwSize) == ERROR_SUCCESS)
144  {
145  SetDlgItemTextW(hDlg, IDC_NAMEEDIT, szValue);
146  }
147 
148  RegCloseKey(hSubKey);
149  break;
150  }
151  iIndex++;
152  }
153  RegCloseKey(hKey);
154  }
155 }
156 
157 
158 static VOID
160 {
161  HKEY hKey;
162  WCHAR KeyName[] = L"Software\\Microsoft\\Terminal Server Client\\Default";
165  DWORD size;
166  INT i = 0;
167  BOOL found = FALSE;
168 
170  KeyName,
171  0,
172  KEY_READ,
173  &hKey) == ERROR_SUCCESS)
174  {
175  while (ret == ERROR_SUCCESS)
176  {
177  size = MAX_KEY_NAME;
178  ret = RegEnumValueW(hKey,
179  i,
180  Name,
181  &size,
182  NULL,
183  NULL,
184  NULL,
185  NULL);
186  if (ret == ERROR_SUCCESS)
187  {
188  size = sizeof(Name);
189  if (RegQueryValueExW(hKey,
190  Name,
191  0,
192  NULL,
193  NULL,
194  &size) == ERROR_SUCCESS)
195  {
196  LPWSTR lpAddress = HeapAlloc(GetProcessHeap(),
197  0,
198  size);
199  if (lpAddress)
200  {
201  if (RegQueryValueExW(hKey,
202  Name,
203  0,
204  NULL,
205  (LPBYTE)lpAddress,
206  &size) == ERROR_SUCCESS)
207  {
210  CB_ADDSTRING,
211  0,
212  (LPARAM)lpAddress);
213  found = TRUE;
214  }
215 
217  0,
218  lpAddress);
219  }
220  }
221  }
222 
223  i++;
224  }
225  RegCloseKey(hKey);
226  }
227 
228  if (LoadStringW(hInst,
230  Name,
231  sizeof(Name) / sizeof(WCHAR)))
232  {
235  CB_ADDSTRING,
236  0,
237  (LPARAM)Name);
238  }
239 
240  if(found)
241  {
244  CB_SETCURSEL,
245  0,
246  0);
247  LoadUsernameHint(pInfo->hGeneralPage, 0);
248  }
249 
250 }
251 
252 
253 static VOID
255 {
256  LPWSTR lpText;
257 
258  /* add file address */
259  lpText = GetStringFromSettings(pInfo->pRdpSettings,
260  L"full address");
261  if (lpText)
262  {
265  lpText);
266  }
267 
268  /* set user name */
269  lpText = GetStringFromSettings(pInfo->pRdpSettings,
270  L"username");
271  if (lpText)
272  {
274  IDC_NAMEEDIT,
275  lpText);
276  }
277 }
278 
279 
280 static VOID
282  PINFO pInfo)
283 {
284  SetWindowLongPtrW(hwnd,
286  (LONG_PTR)pInfo);
287 
288  pInfo->hGeneralPage = hwnd;
289 
290  SetWindowPos(pInfo->hGeneralPage,
291  NULL,
292  2,
293  22,
294  0,
295  0,
297 
298  pInfo->hLogon = LoadImageW(hInst,
300  IMAGE_ICON,
301  32,
302  32,
304  if (pInfo->hLogon)
305  {
306  SendDlgItemMessageW(pInfo->hGeneralPage,
308  STM_SETICON,
309  (WPARAM)pInfo->hLogon,
310  0);
311  }
312 
313  pInfo->hConn = LoadImageW(hInst,
315  IMAGE_ICON,
316  32,
317  32,
319  if (pInfo->hConn)
320  {
321  SendDlgItemMessageW(pInfo->hGeneralPage,
322  IDC_CONNICON,
323  STM_SETICON,
324  (WPARAM)pInfo->hConn,
325  0);
326  }
327 
328  FillServerAddressCombo(pInfo);
329  ReLoadGeneralPage(pInfo);
330 }
331 
332 
335  UINT message,
336  WPARAM wParam,
337  LPARAM lParam)
338 {
339  PINFO pInfo = (PINFO)GetWindowLongPtrW(hDlg,
340  GWLP_USERDATA);
341 
342  switch (message)
343  {
344  case WM_INITDIALOG:
345  GeneralOnInit(hDlg, (PINFO)lParam);
346  return TRUE;
347 
348  case WM_COMMAND:
349  {
350  switch(LOWORD(wParam))
351  {
352  case IDC_SERVERCOMBO:
353  if (HIWORD(wParam) == CBN_SELCHANGE)
354  {
355  INT last, cur;
356 
357  cur = SendDlgItemMessageW(hDlg,
359  CB_GETCURSEL,
360  0,
361  0);
362 
363  last = SendDlgItemMessageW(hDlg,
365  CB_GETCOUNT,
366  0,
367  0);
368  if ((cur + 1) == last)
369  MessageBoxW(hDlg, L"SMB is not yet supported", L"RDP error", MB_ICONERROR);
370  else
371  {
372  LoadUsernameHint(hDlg, cur);
373  }
374  }
375  break;
376 
377  case IDC_SAVE:
378  SaveAllSettings(pInfo);
380  break;
381 
382  case IDC_SAVEAS:
383  DoSaveAs(pInfo);
384  break;
385 
386  case IDC_OPEN:
387  DoOpenFile(pInfo);
388  break;
389  }
390 
391  break;
392  }
393 
394  case WM_CLOSE:
395  {
396  if (pInfo->hLogon)
397  DestroyIcon(pInfo->hLogon);
398 
399  if (pInfo->hConn)
400  DestroyIcon(pInfo->hConn);
401 
402  break;
403  }
404  }
405 
406  return 0;
407 }
408 
409 
410 static PSETTINGS_ENTRY
412  OUT DWORD* pSettingsCount,
413  OUT PSETTINGS_ENTRY* CurrentSettings)
414 {
416  DWORD NbSettings = 0;
417  DWORD iMode = 0;
418  DWORD dwFlags = 0;
420  HDC hDC;
421  PSETTINGS_ENTRY Current;
422  DWORD bpp, xres, yres, checkbpp;
423 
424  /* Get current settings */
425  *CurrentSettings = NULL;
426  hDC = CreateICW(NULL, lpDeviceName, NULL, NULL);
427  bpp = GetDeviceCaps(hDC, PLANES);
428  bpp *= GetDeviceCaps(hDC, BITSPIXEL);
429  xres = GetDeviceCaps(hDC, HORZRES);
430  yres = GetDeviceCaps(hDC, VERTRES);
431  DeleteDC(hDC);
432 
433  /* List all settings */
434  devmode.dmSize = (WORD)sizeof(DEVMODE);
435  devmode.dmDriverExtra = 0;
436 
437  if (!EnumDisplaySettingsExW(lpDeviceName, ENUM_CURRENT_SETTINGS, &devmode, dwFlags))
438  return NULL;
439 
440  while (EnumDisplaySettingsExW(lpDeviceName, iMode, &devmode, dwFlags))
441  {
442  if (devmode.dmBitsPerPel==8 ||
443  devmode.dmBitsPerPel==16 ||
444  devmode.dmBitsPerPel==24 ||
445  devmode.dmBitsPerPel==32)
446  {
447  checkbpp=1;
448  }
449  else
450  checkbpp=0;
451 
452  if (devmode.dmPelsWidth < 640 ||
453  devmode.dmPelsHeight < 480 || checkbpp == 0)
454  {
455  iMode++;
456  continue;
457  }
458 
459  Current = HeapAlloc(GetProcessHeap(), 0, sizeof(SETTINGS_ENTRY));
460  if (Current != NULL)
461  {
462  /* Sort resolutions by increasing height, and BPP */
463  PSETTINGS_ENTRY Previous = NULL;
464  PSETTINGS_ENTRY Next = Settings;
465  Current->dmPelsWidth = devmode.dmPelsWidth;
466  Current->dmPelsHeight = devmode.dmPelsHeight;
467  Current->dmBitsPerPel = devmode.dmBitsPerPel;
468  while (Next != NULL &&
469  (Next->dmPelsWidth < Current->dmPelsWidth ||
470  (Next->dmPelsWidth == Current->dmPelsWidth && Next->dmPelsHeight < Current->dmPelsHeight) ||
471  (Next->dmPelsHeight == Current->dmPelsHeight &&
472  Next->dmPelsWidth == Current->dmPelsWidth &&
473  Next->dmBitsPerPel < Current->dmBitsPerPel )))
474  {
475  Previous = Next;
476  Next = Next->Flink;
477  }
478  Current->Blink = Previous;
479  Current->Flink = Next;
480  if (Previous == NULL)
481  Settings = Current;
482  else
483  Previous->Flink = Current;
484  if (Next != NULL)
485  Next->Blink = Current;
486  if (devmode.dmPelsWidth == xres && devmode.dmPelsHeight == yres && devmode.dmBitsPerPel == bpp)
487  {
488  *CurrentSettings = Current;
489  }
490  NbSettings++;
491  }
492  iMode++;
493  }
494 
495  *pSettingsCount = NbSettings;
496  return Settings;
497 }
498 
499 
500 static BOOL
502 {
503  PDISPLAY_DEVICE_ENTRY newEntry = NULL;
505  LPWSTR name = NULL;
506  LPWSTR key = NULL;
507  LPWSTR devid = NULL;
508  DWORD descriptionSize, nameSize, keySize, devidSize;
509  PSETTINGS_ENTRY Current;
510  DWORD ResolutionsCount = 1;
511  DWORD i;
512 
513  newEntry = HeapAlloc(GetProcessHeap(),
514  0,
515  sizeof(DISPLAY_DEVICE_ENTRY));
516  if (!newEntry) goto ByeBye;
517  ZeroMemory(newEntry, sizeof(DISPLAY_DEVICE_ENTRY));
518 
519  newEntry->Settings = GetPossibleSettings(DisplayDevice->DeviceName,
520  &newEntry->SettingsCount,
521  &newEntry->CurrentSettings);
522  if (!newEntry->Settings) goto ByeBye;
523 
527 
528  /* Count different resolutions */
529  for (Current = newEntry->Settings; Current != NULL; Current = Current->Flink)
530  {
531  if (Current->Flink != NULL &&
532  ((Current->dmPelsWidth != Current->Flink->dmPelsWidth) &&
533  (Current->dmPelsHeight != Current->Flink->dmPelsHeight)))
534  {
535  ResolutionsCount++;
536  }
537  }
538 
539  newEntry->Resolutions = HeapAlloc(GetProcessHeap(),
540  0,
541  ResolutionsCount * (sizeof(RESOLUTION_INFO) + 1));
542  if (!newEntry->Resolutions) goto ByeBye;
543 
544  newEntry->ResolutionsCount = ResolutionsCount;
545 
546  /* Fill resolutions infos */
547  for (Current = newEntry->Settings, i = 0; Current != NULL; Current = Current->Flink)
548  {
549  if (Current->Flink == NULL ||
550  (Current->Flink != NULL &&
551  ((Current->dmPelsWidth != Current->Flink->dmPelsWidth) &&
552  (Current->dmPelsHeight != Current->Flink->dmPelsHeight))))
553  {
554  newEntry->Resolutions[i].dmPelsWidth = Current->dmPelsWidth;
555  newEntry->Resolutions[i].dmPelsHeight = Current->dmPelsHeight;
556  i++;
557  }
558  }
559 
560  /* fullscreen */
563 
564  descriptionSize = (wcslen(DisplayDevice->DeviceString) + 1) * sizeof(WCHAR);
565  description = HeapAlloc(GetProcessHeap(), 0, descriptionSize);
566  if (!description) goto ByeBye;
567 
568  nameSize = (wcslen(DisplayDevice->DeviceName) + 1) * sizeof(WCHAR);
569  name = HeapAlloc(GetProcessHeap(), 0, nameSize);
570  if (!name) goto ByeBye;
571 
572  keySize = (wcslen(DisplayDevice->DeviceKey) + 1) * sizeof(WCHAR);
573  key = HeapAlloc(GetProcessHeap(), 0, keySize);
574  if (!key) goto ByeBye;
575 
576  devidSize = (wcslen(DisplayDevice->DeviceID) + 1) * sizeof(WCHAR);
577  devid = HeapAlloc(GetProcessHeap(), 0, devidSize);
578  if (!devid) goto ByeBye;
579 
580  memcpy(description, DisplayDevice->DeviceString, descriptionSize);
581  memcpy(name, DisplayDevice->DeviceName, nameSize);
582  memcpy(key, DisplayDevice->DeviceKey, keySize);
583  memcpy(devid, DisplayDevice->DeviceID, devidSize);
584  newEntry->DeviceDescription = description;
585  newEntry->DeviceName = name;
586  newEntry->DeviceKey = key;
587  newEntry->DeviceID = devid;
588  newEntry->DeviceStateFlags = DisplayDevice->StateFlags;
589  newEntry->Flink = pInfo->DisplayDeviceList;
590  pInfo->DisplayDeviceList = newEntry;
591  return TRUE;
592 
593 ByeBye:
594  if (newEntry != NULL)
595  {
596  if (newEntry->Settings != NULL)
597  {
598  Current = newEntry->Settings;
599  while (Current != NULL)
600  {
601  PSETTINGS_ENTRY Next = Current->Flink;
602  HeapFree(GetProcessHeap(), 0, Current);
603  Current = Next;
604  }
605  }
606  if (newEntry->Resolutions != NULL)
607  HeapFree(GetProcessHeap(), 0, newEntry->Resolutions);
608  HeapFree(GetProcessHeap(), 0, newEntry);
609  }
610  if (description != NULL)
611  HeapFree(GetProcessHeap(), 0, description);
612  if (name != NULL)
613  HeapFree(GetProcessHeap(), 0, name);
614  if (key != NULL)
615  HeapFree(GetProcessHeap(), 0, key);
616  if (devid != NULL)
617  HeapFree(GetProcessHeap(), 0, devid);
618  return FALSE;
619 }
620 
621 
622 static VOID
623 OnResolutionChanged(PINFO pInfo, INT position)
624 {
625  WCHAR Buffer[64];
626  INT MaxSlider;
627 
628  MaxSlider = SendDlgItemMessageW(pInfo->hDisplayPage,
631  0,
632  0);
633 
634  if (position == MaxSlider)
635  {
636  LoadStringW(hInst,
638  Buffer,
639  sizeof(Buffer) / sizeof(WCHAR));
640  }
641  else
642  {
643  WCHAR Pixel[64];
644 
645  if (LoadStringW(hInst,
646  IDS_PIXEL,
647  Pixel,
648  sizeof(Pixel) / sizeof(WCHAR)))
649  {
650  swprintf(Buffer,
651  Pixel,
652  pInfo->DisplayDeviceList->Resolutions[position].dmPelsWidth,
653  pInfo->DisplayDeviceList->Resolutions[position].dmPelsHeight,
654  Pixel);
655  }
656  }
657 
660  WM_SETTEXT,
661  0,
662  (LPARAM)Buffer);
663 }
664 
665 
666 static VOID
668 {
669  PSETTINGS_ENTRY Current;
670  DWORD index, i, num;
671  DWORD MaxBpp = 0;
672  UINT types[5];
673 
674  pInfo->CurrentDisplayDevice = pInfo->DisplayDeviceList; /* Update global variable */
675 
676  /* find max bpp */
678  IDC_BPPCOMBO,
680  0,
681  0);
682  for (Current = pInfo->DisplayDeviceList->Settings; Current != NULL; Current = Current->Flink)
683  {
684  if (Current->dmBitsPerPel > MaxBpp)
685  MaxBpp = Current->dmBitsPerPel;
686  }
687  switch (MaxBpp)
688  {
689  case 32: num = 4; break;
690  case 24: num = 3; break;
691  case 16: num = 2; break;
692  case 15: num = 1; break;
693  case 8: num = 0; break;
694  default: num = 0; break;
695  }
696 
697  types[0] = IDS_256COLORS;
698  types[1] = IDS_HIGHCOLOR15;
699  types[2] = IDS_HIGHCOLOR16;
700  types[3] = IDS_HIGHCOLOR24;
701  types[4] = IDS_HIGHCOLOR32;
702 
703  /* Fill color depths combo box */
705  IDC_BPPCOMBO,
707  0,
708  0);
709 
710  for (i = 0, Current = pInfo->DisplayDeviceList->Settings;
711  i <= num && Current != NULL;
712  i++, Current = Current->Flink)
713  {
714  WCHAR Buffer[64];
715  if (LoadStringW(hInst,
716  types[i],
717  Buffer,
718  sizeof(Buffer) / sizeof(WCHAR)))
719  {
720  index = (DWORD)SendDlgItemMessageW(pInfo->hDisplayPage,
721  IDC_BPPCOMBO,
723  (WPARAM)-1,
724  (LPARAM)Buffer);
725  if (index == (DWORD)CB_ERR)
726  {
727  index = (DWORD)SendDlgItemMessageW(pInfo->hDisplayPage,
728  IDC_BPPCOMBO,
729  CB_ADDSTRING,
730  0,
731  (LPARAM)Buffer);
733  IDC_BPPCOMBO,
735  index,
736  types[i]);
737  }
738  }
739  }
740 
741  /* Fill resolutions slider */
745  TRUE,
746  0);
749  TBM_SETRANGE,
750  TRUE,
751  MAKELONG(0, pInfo->DisplayDeviceList->ResolutionsCount)); //extra 1 for full screen
752 
753 
754 }
755 
756 
757 static VOID
759 {
760  DWORD index;
761  INT width, height, pos = 0;
762  INT bpp, num, i, screenmode;
763  BOOL bSet = FALSE;
764 
765  /* get fullscreen info */
766  screenmode = GetIntegerFromSettings(pInfo->pRdpSettings, L"screen mode id");
767 
768  /* set trackbar position */
769  width = GetIntegerFromSettings(pInfo->pRdpSettings, L"desktopwidth");
770  height = GetIntegerFromSettings(pInfo->pRdpSettings, L"desktopheight");
771 
772  if (width != -1 && height != -1)
773  {
774  if(screenmode == 2)
775  {
776  pos = SendDlgItemMessageW(pInfo->hDisplayPage,
779  0,
780  0);
781  }
782  else
783  {
784  for (index = 0; index < pInfo->CurrentDisplayDevice->ResolutionsCount; index++)
785  {
786  if (pInfo->CurrentDisplayDevice->Resolutions[index].dmPelsWidth == width &&
787  pInfo->CurrentDisplayDevice->Resolutions[index].dmPelsHeight == height)
788  {
789  pos = index;
790  break;
791  }
792  }
793  }
794  }
795 
796  /* set slider position */
799  TBM_SETPOS,
800  TRUE,
801  pos);
802 
803  OnResolutionChanged(pInfo, pos);
804 
805 
806  /* set color combo */
807  bpp = GetIntegerFromSettings(pInfo->pRdpSettings, L"session bpp");
808 
809  num = SendDlgItemMessageW(pInfo->hDisplayPage,
810  IDC_BPPCOMBO,
811  CB_GETCOUNT,
812  0,
813  0);
814  for (i = 0; i < num; i++)
815  {
817  IDC_BPPCOMBO,
819  i,
820  0);
821  if (data == bpp)
822  {
824  IDC_BPPCOMBO,
825  CB_SETCURSEL,
826  i,
827  0);
828  bSet = TRUE;
829  break;
830  }
831  }
832 
833  if (!bSet)
834  {
836  IDC_BPPCOMBO,
837  CB_SETCURSEL,
838  num - 1,
839  0);
840  }
841 }
842 
843 
844 static VOID
846  PINFO pInfo)
847 {
848  DISPLAY_DEVICEW displayDevice;
849  DWORD iDevNum = 0;
850  BOOL GotDev = FALSE;
851 
852  SetWindowLongPtrW(hwnd,
854  (LONG_PTR)pInfo);
855 
856  pInfo->hDisplayPage = hwnd;
857 
858  SetWindowPos(pInfo->hDisplayPage,
859  NULL,
860  2,
861  22,
862  0,
863  0,
865 
866  pInfo->hRemote = LoadImageW(hInst,
868  IMAGE_ICON,
869  32,
870  32,
872  if (pInfo->hRemote)
873  {
874  SendDlgItemMessageW(pInfo->hDisplayPage,
875  IDC_REMICON,
876  STM_SETICON,
877  (WPARAM)pInfo->hRemote,
878  0);
879  }
880 
881  pInfo->hColor = LoadImageW(hInst,
883  IMAGE_ICON,
884  32,
885  32,
887  if (pInfo->hColor)
888  {
889  SendDlgItemMessageW(pInfo->hDisplayPage,
891  STM_SETICON,
892  (WPARAM)pInfo->hColor,
893  0);
894  }
895 
896  pInfo->hSpectrum = LoadImageW(hInst,
898  IMAGE_BITMAP,
899  0,
900  0,
902  if (pInfo->hSpectrum)
903  {
904  GetObjectW(pInfo->hSpectrum,
905  sizeof(BITMAP),
906  &pInfo->bitmap);
907  }
908 
909  /* Get video cards list */
910  displayDevice.cb = (DWORD)sizeof(DISPLAY_DEVICE);
911  while (EnumDisplayDevicesW(NULL, iDevNum, &displayDevice, 0x1))
912  {
913  if ((displayDevice.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) != 0)
914  {
915  if (AddDisplayDevice(pInfo, &displayDevice))
916  GotDev = TRUE;
917  }
918  iDevNum++;
919  }
920 
921  if (GotDev)
922  {
924  ReLoadDisplayPage(pInfo);
925  }
926 }
927 
928 
931  UINT message,
932  WPARAM wParam,
933  LPARAM lParam)
934 {
935  PINFO pInfo = (PINFO)GetWindowLongPtrW(hDlg,
936  GWLP_USERDATA);
937 
938  switch (message)
939  {
940  case WM_INITDIALOG:
941  DisplayOnInit(hDlg, (PINFO)lParam);
942  return TRUE;
943 
944  case WM_DRAWITEM:
945  {
946  LPDRAWITEMSTRUCT lpDrawItem;
947  lpDrawItem = (LPDRAWITEMSTRUCT) lParam;
948  if(lpDrawItem->CtlID == IDC_COLORIMAGE)
949  {
950  HDC hdcMem;
951  HBITMAP hSpecOld;
952  hdcMem = CreateCompatibleDC(lpDrawItem->hDC);
953  if (hdcMem != NULL)
954  {
955  hSpecOld = SelectObject(hdcMem, pInfo->hSpectrum);
956  StretchBlt(lpDrawItem->hDC,
957  lpDrawItem->rcItem.left,
958  lpDrawItem->rcItem.top,
959  lpDrawItem->rcItem.right - lpDrawItem->rcItem.left,
960  lpDrawItem->rcItem.bottom - lpDrawItem->rcItem.top,
961  hdcMem,
962  0,
963  0,
964  pInfo->bitmap.bmWidth,
965  pInfo->bitmap.bmHeight,
966  SRCCOPY);
967  SelectObject(hdcMem, hSpecOld);
968  DeleteDC(hdcMem);
969  }
970  }
971  break;
972  }
973 
974  case WM_HSCROLL:
975  {
976  switch (LOWORD(wParam))
977  {
978  case TB_LINEUP:
979  case TB_LINEDOWN:
980  case TB_PAGEUP:
981  case TB_PAGEDOWN:
982  case TB_TOP:
983  case TB_BOTTOM:
984  case TB_ENDTRACK:
985  {
986  INT newPosition = (DWORD)SendDlgItemMessageW(hDlg, IDC_GEOSLIDER, TBM_GETPOS, 0, 0);
987  OnResolutionChanged(pInfo, newPosition);
988  break;
989  }
990 
991  case TB_THUMBTRACK:
992  OnResolutionChanged(pInfo, HIWORD(wParam));
993  break;
994  }
995  break;
996  }
997 
998  case WM_CLOSE:
999  {
1000  if (pInfo->hRemote)
1001  DestroyIcon(pInfo->hRemote);
1002 
1003  if (pInfo->hColor)
1004  DestroyIcon(pInfo->hColor);
1005 
1006  if (pInfo->hSpectrum)
1007  DeleteObject(pInfo->hSpectrum);
1008 
1009  break;
1010  }
1011 
1012  break;
1013  }
1014  return 0;
1015 }
1016 
1017 
1018 static BOOL
1020  PRDPSETTINGS pRdpSettings)
1021 {
1022  PINFO pInfo;
1023  TCITEMW item;
1024  BOOL bRet = FALSE;
1025 
1026  pInfo = HeapAlloc(GetProcessHeap(),
1028  sizeof(INFO));
1029  if (pInfo)
1030  {
1031  SetWindowLongPtrW(hwnd,
1032  GWLP_USERDATA,
1033  (LONG_PTR)pInfo);
1034 
1035  pInfo->hSelf = hwnd;
1036 
1037  /* add main settings pointer */
1038  pInfo->pRdpSettings = pRdpSettings;
1039 
1040  /* set the dialog icons */
1041  pInfo->hMstscSm = LoadImageW(hInst,
1043  IMAGE_ICON,
1044  16,
1045  16,
1046  LR_DEFAULTCOLOR);
1047  if (pInfo->hMstscSm)
1048  {
1049  SendMessageW(hwnd,
1050  WM_SETICON,
1051  ICON_SMALL,
1052  (WPARAM)pInfo->hMstscSm);
1053  }
1054  pInfo->hMstscLg = LoadImageW(hInst,
1056  IMAGE_ICON,
1057  32,
1058  32,
1059  LR_DEFAULTCOLOR);
1060  if (pInfo->hMstscLg)
1061  {
1062  SendMessageW(hwnd,
1063  WM_SETICON,
1064  ICON_BIG,
1065  (WPARAM)pInfo->hMstscLg);
1066  }
1067 
1068  pInfo->hHeader = (HBITMAP)LoadImageW(hInst,
1070  IMAGE_BITMAP,
1071  0,
1072  0,
1073  LR_DEFAULTCOLOR);
1074  if (pInfo->hHeader)
1075  {
1076  GetObjectW(pInfo->hHeader,
1077  sizeof(BITMAP),
1078  &pInfo->headerbitmap);
1079  }
1080 
1081  /* setup the tabs */
1082  pInfo->hTab = GetDlgItem(hwnd, IDC_TAB);
1083  if (pInfo->hTab)
1084  {
1085  if (CreateDialogParamW(hInst,
1087  pInfo->hTab,
1089  (LPARAM)pInfo))
1090  {
1091  WCHAR str[256];
1092  ZeroMemory(&item, sizeof(TCITEM));
1093  item.mask = TCIF_TEXT;
1094  if (LoadStringW(hInst, IDS_TAB_GENERAL, str, 256))
1095  item.pszText = str;
1096  item.cchTextMax = 256;
1097  (void)TabCtrl_InsertItem(pInfo->hTab, 0, &item);
1098  }
1099 
1100  if (CreateDialogParamW(hInst,
1102  pInfo->hTab,
1104  (LPARAM)pInfo))
1105  {
1106  WCHAR str[256];
1107  ZeroMemory(&item, sizeof(TCITEM));
1108  item.mask = TCIF_TEXT;
1109  if (LoadStringW(hInst, IDS_TAB_DISPLAY, str, 256))
1110  item.pszText = str;
1111  item.cchTextMax = 256;
1112  (void)TabCtrl_InsertItem(pInfo->hTab, 1, &item);
1113  }
1114 
1115  OnTabWndSelChange(pInfo);
1116  }
1117  }
1118 
1119  return bRet;
1120 }
1121 
1122 static void Cleanup(PINFO pInfo)
1123 {
1124  if (pInfo)
1125  {
1126  if (pInfo->hMstscSm)
1127  DestroyIcon(pInfo->hMstscSm);
1128  if (pInfo->hMstscLg)
1129  DestroyIcon(pInfo->hMstscLg);
1130  if (pInfo->hHeader)
1131  DeleteObject(pInfo->hHeader);
1132  if (pInfo->hSpectrum)
1133  DeleteObject(pInfo->hSpectrum);
1134  if (pInfo->hRemote)
1135  DestroyIcon(pInfo->hRemote);
1136  if (pInfo->hLogon)
1137  DestroyIcon(pInfo->hLogon);
1138  if (pInfo->hConn)
1139  DestroyIcon(pInfo->hConn);
1140  if (pInfo->hColor)
1141  DestroyIcon(pInfo->hColor);
1143  0,
1144  pInfo);
1145  }
1146 }
1147 
1148 static INT_PTR CALLBACK
1150  UINT Message,
1151  WPARAM wParam,
1152  LPARAM lParam)
1153 {
1154  PINFO pInfo;
1155 
1156  /* Get the window context */
1157  pInfo = (PINFO)GetWindowLongPtrW(hDlg,
1158  GWLP_USERDATA);
1159  if (pInfo == NULL && Message != WM_INITDIALOG)
1160  {
1161  goto HandleDefaultMessage;
1162  }
1163 
1164  switch(Message)
1165  {
1166  case WM_INITDIALOG:
1167  OnMainCreate(hDlg, (PRDPSETTINGS)lParam);
1168  break;
1169 
1170  case WM_COMMAND:
1171  {
1172  if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
1173  {
1174  if (LOWORD(wParam) == IDOK )
1175  {
1176  SaveAllSettings(pInfo);
1178  }
1179  Cleanup(pInfo);
1180  EndDialog(hDlg, LOWORD(wParam));
1181  }
1182 
1183  break;
1184  }
1185 
1186  case WM_NOTIFY:
1187  {
1188  //INT idctrl;
1189  LPNMHDR pnmh;
1190  //idctrl = (int)wParam;
1191  pnmh = (LPNMHDR)lParam;
1192  if (//(pnmh->hwndFrom == pInfo->hSelf) &&
1193  (pnmh->idFrom == IDC_TAB) &&
1194  (pnmh->code == TCN_SELCHANGE))
1195  {
1196  OnTabWndSelChange(pInfo);
1197  }
1198 
1199  break;
1200  }
1201 
1202  case WM_PAINT:
1203  {
1204  PAINTSTRUCT ps;
1205  HDC hdc;
1206 
1207  hdc = BeginPaint(hDlg, &ps);
1208  if (hdc != NULL)
1209  {
1210  HDC hdcMem = CreateCompatibleDC(hdc);
1211  if (hdcMem)
1212  {
1213  WCHAR szBuffer[32];
1214  RECT bmpRc, txtRc;
1215  LOGFONTW lf;
1216  HFONT hFont, hFontOld;
1217  HBITMAP hBmpOld;
1218 
1219  GetClientRect(pInfo->hSelf, &bmpRc);
1220 
1221  hBmpOld = SelectObject(hdcMem, pInfo->hHeader);
1222  StretchBlt(hdc,
1223  0,
1224  0,
1225  bmpRc.right,
1226  pInfo->headerbitmap.bmHeight,
1227  hdcMem,
1228  0,
1229  0,
1230  pInfo->headerbitmap.bmWidth,
1231  pInfo->headerbitmap.bmHeight,
1232  SRCCOPY);
1233 
1234  SelectObject(hdcMem, hBmpOld);
1235  txtRc.left = bmpRc.right / 4;
1236  txtRc.top = 10;
1237  txtRc.right = bmpRc.right * 3 / 4;
1238  txtRc.bottom = pInfo->headerbitmap.bmHeight / 2;
1239 
1240  ZeroMemory(&lf, sizeof(LOGFONTW));
1241 
1242  if (LoadStringW(hInst,
1244  szBuffer,
1245  sizeof(szBuffer) / sizeof(WCHAR)))
1246  {
1247  lf.lfHeight = 20;
1248  lf.lfCharSet = OEM_CHARSET;
1250  lf.lfWeight = FW_MEDIUM;
1251  wcscpy(lf.lfFaceName, L"Tahoma");
1252 
1253  hFont = CreateFontIndirectW(&lf);
1254  if (hFont)
1255  {
1256  hFontOld = SelectObject(hdc, hFont);
1257 
1258  DPtoLP(hdc, (PPOINT)&txtRc, 2);
1259  SetTextColor(hdc, RGB(255,255,255));
1260  SetBkMode(hdc, TRANSPARENT);
1261  DrawTextW(hdc,
1262  szBuffer,
1263  -1,
1264  &txtRc,
1265  DT_BOTTOM | DT_SINGLELINE | DT_NOCLIP | DT_CENTER); //DT_CENTER makes the text visible in RTL layouts...
1266  SelectObject(hdc, hFontOld);
1267  DeleteObject(hFont);
1268  }
1269  }
1270 
1271  txtRc.left = bmpRc.right / 4;
1272  txtRc.top = txtRc.bottom - 5;
1273 #ifdef __REACTOS__
1274  txtRc.right = bmpRc.right * 4 / 5;
1275 #else
1276  txtRc.right = bmpRc.right * 3 / 4;
1277 #endif
1278  txtRc.bottom = pInfo->headerbitmap.bmHeight * 9 / 10;
1279 
1280  if (LoadStringW(hInst,
1282  szBuffer,
1283  sizeof(szBuffer) / sizeof(WCHAR)))
1284  {
1285  lf.lfHeight = 24;
1286  lf.lfCharSet = OEM_CHARSET;
1288  lf.lfWeight = FW_EXTRABOLD;
1289  wcscpy(lf.lfFaceName, L"Tahoma");
1290 
1291  hFont = CreateFontIndirectW(&lf);
1292  if (hFont)
1293  {
1294  hFontOld = SelectObject(hdc, hFont);
1295 
1296  DPtoLP(hdc, (PPOINT)&txtRc, 2);
1297  SetTextColor(hdc, RGB(255,255,255));
1298  SetBkMode(hdc, TRANSPARENT);
1299  DrawTextW(hdc,
1300  szBuffer,
1301  -1,
1302  &txtRc,
1303  DT_TOP | DT_SINGLELINE);
1304  SelectObject(hdc, hFontOld);
1305  DeleteObject(hFont);
1306  }
1307  }
1308 
1309  DeleteDC(hdcMem);
1310  }
1311 
1312  EndPaint(hDlg, &ps);
1313  }
1314 
1315  break;
1316  }
1317 
1318  case WM_CLOSE:
1319  {
1320  Cleanup(pInfo);
1321  EndDialog(hDlg, 0);
1322  }
1323  break;
1324 
1325 HandleDefaultMessage:
1326  default:
1327  return FALSE;
1328  }
1329 
1330  return FALSE;
1331 }
1332 
1333 
1334 BOOL
1336  PRDPSETTINGS pRdpSettings)
1337 {
1338  INITCOMMONCONTROLSEX iccx;
1339 
1340  hInst = hInstance;
1341 
1342  iccx.dwSize = sizeof(INITCOMMONCONTROLSEX);
1343  iccx.dwICC = ICC_TAB_CLASSES;
1344  InitCommonControlsEx(&iccx);
1345 
1346  return (DialogBoxParamW(hInst,
1348  NULL,
1349  DlgProc,
1350  (LPARAM)pRdpSettings) == IDOK);
1351 }
#define OFN_EXPLORER
Definition: commdlg.h:104
#define TB_THUMBTRACK
Definition: commctrl.h:2048
#define HDC
Definition: msvc.h:22
#define CB_SETITEMDATA
Definition: winuser.h:1927
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING KeyName
Definition: ndis.h:4693
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define IDI_COLORS
Definition: resource.h:37
#define STM_SETICON
Definition: winuser.h:2053
PSETTINGS_ENTRY CurrentSettings
Definition: precomp.h:79
#define BITSPIXEL
Definition: wingdi.h:718
#define IN
Definition: typedefs.h:38
GLint GLint GLsizei width
Definition: gl.h:1546
DWORD Flags
Definition: commdlg.h:373
#define HORZRES
Definition: wingdi.h:714
#define IDC_SETTINGS_RESOLUTION_TEXT
Definition: resource.h:21
Definition: tftpd.h:59
#define TRUE
Definition: types.h:120
#define TB_PAGEDOWN
Definition: commctrl.h:2046
struct _SETTINGS_ENTRY * Blink
Definition: precomp.h:60
#define IDOK
Definition: winuser.h:824
#define IDC_CONNICON
Definition: resource.h:25
LPCWSTR lpstrFilter
Definition: commdlg.h:363
#define IMAGE_ICON
Definition: winuser.h:212
LPWSTR DeviceKey
Definition: precomp.h:72
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:47
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
#define HBITMAP
Definition: msvc.h:28
struct _INFO * PINFO
#define ERROR_SUCCESS
Definition: deptool.c:10
#define DEFAULT_QUALITY
Definition: wingdi.h:434
SETTINGS_ENTRY InitialSettings
Definition: precomp.h:80
_In_ ULONG iMode
Definition: winddi.h:3520
PDISPLAY_DEVICE_ENTRY CurrentDisplayDevice
Definition: precomp.h:87
#define IDC_TAB
Definition: resource.h:12
struct tagDRAWITEMSTRUCT * LPDRAWITEMSTRUCT
HICON hMstscSm
Definition: precomp.h:94
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2022
POINT last
Definition: font.c:46
#define IDS_HIGHCOLOR15
Definition: resource.h:6
#define KEY_READ
Definition: nt_native.h:1023
__wchar_t WCHAR
Definition: xmlstorage.h:180
HWND hTab
Definition: precomp.h:89
#define CB_GETLBTEXT
Definition: winuser.h:1913
#define SW_HIDE
Definition: winuser.h:762
struct _DISPLAY_DEVICE_ENTRY * Flink
Definition: precomp.h:69
#define DWORD
Definition: msvc.h:34
static VOID DoSaveAs(PINFO pInfo)
Definition: connectdialog.c:60
#define CB_GETITEMDATA
Definition: winuser.h:1911
LPWSTR GetStringFromSettings(PRDPSETTINGS pSettings, LPWSTR lpValue)
Definition: settings.c:171
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define IDB_SPECT
Definition: resource.h:31
#define IDS_HIGHCOLOR16
Definition: resource.h:7
DWORD nMaxFileTitle
Definition: commdlg.h:370
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG x1
Definition: winddi.h:3706
WCHAR DeviceString[128]
Definition: wingdi.h:2796
LONG lfHeight
Definition: dimm.idl:59
DWORD dmPelsWidth
Definition: precomp.h:63
LPWSTR lpstrFile
Definition: commdlg.h:367
static VOID FillServerAddressCombo(PINFO pInfo)
BYTE lfCharSet
Definition: dimm.idl:67
#define CALLBACK
Definition: compat.h:27
#define TBM_SETRANGE
Definition: commctrl.h:2007
_Check_return_ _CRTIMP wchar_t *__cdecl wcstok(_Inout_opt_z_ wchar_t *_Str, _In_z_ const wchar_t *_Delim)
#define IDD_GENERAL
Definition: resource.h:12
LONG top
Definition: windef.h:297
#define TBM_GETRANGEMAX
Definition: commctrl.h:2003
#define IDI_MSTSC
Definition: resource.h:33
OPENFILENAME ofn
Definition: main.cpp:37
WORD dmDriverExtra
Definition: wingdi.h:1598
static VOID OnTabWndSelChange(PINFO pInfo)
Definition: connectdialog.c:85
HICON hLogon
Definition: precomp.h:96
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
Definition: precomp.h:67
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1497
LPWSTR pszText
Definition: commctrl.h:3990
#define ZeroMemory
Definition: winbase.h:1635
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
LPWSTR DeviceName
Definition: precomp.h:71
#define TBM_SETPOS
Definition: commctrl.h:2006
#define IDC_NAMEEDIT
Definition: resource.h:22
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
INT_PTR CALLBACK GeneralDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
#define TabCtrl_GetCurSel(hwnd)
Definition: commctrl.h:4030
#define TCIF_TEXT
Definition: commctrl.h:3938
DWORD dmBitsPerPel
Definition: precomp.h:62
#define GetWindowLongPtrW
Definition: winuser.h:4698
uint16_t * PWCHAR
Definition: typedefs.h:54
const char * description
Definition: directx.c:2502
LONG left
Definition: windef.h:296
#define SWP_NOZORDER
Definition: winuser.h:1232
INT GetIntegerFromSettings(PRDPSETTINGS pSettings, LPWSTR lpValue)
Definition: settings.c:144
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
DWORD dmBitsPerPel
Definition: wingdi.h:1624
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
int32_t INT_PTR
Definition: typedefs.h:62
PDISPLAY_DEVICE_ENTRY DisplayDeviceList
Definition: precomp.h:86
#define WCHAR
Definition: msvc.h:43
LONG right
Definition: windef.h:298
#define IDC_SAVE
Definition: resource.h:16
#define IDB_HEADER
Definition: resource.h:30
BOOL WINAPI DPtoLP(_In_ HDC hdc, _Inout_updates_(c) LPPOINT lppt, _In_ int c)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
struct tagINITCOMMONCONTROLSEX INITCOMMONCONTROLSEX
int32_t INT
Definition: typedefs.h:56
HWND hGeneralPage
Definition: precomp.h:90
#define CB_GETCURSEL
Definition: winuser.h:1904
BOOL WINAPI StretchBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_opt_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
WPARAM wParam
Definition: combotst.c:138
WCHAR DeviceName[32]
Definition: wingdi.h:2795
HFONT hFont
Definition: main.c:53
BOOL WINAPI GetSaveFileNameW(LPOPENFILENAMEW ofn)
Definition: filedlg.c:4286
struct tagNMHDR * LPNMHDR
#define ENUM_CURRENT_SETTINGS
Definition: winuser.h:179
DWORD lStructSize
Definition: commdlg.h:360
#define TB_PAGEUP
Definition: commctrl.h:2045
UINT_PTR WPARAM
Definition: windef.h:207
#define ICON_SMALL
Definition: tnclass.cpp:48
#define TB_LINEDOWN
Definition: commctrl.h:2044
static VOID GeneralOnInit(HWND hwnd, PINFO pInfo)
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
UINT code
Definition: winuser.h:3112
#define TB_BOTTOM
Definition: commctrl.h:2050
int WINAPI SetBkMode(_In_ HDC, _In_ int)
Definition: dc.c:1032
#define SM_CXSCREEN
Definition: winuser.h:949
HICON hColor
Definition: precomp.h:99
GLenum GLclampf GLint i
Definition: glfuncs.h:14
#define IDS_TAB_GENERAL
Definition: resource.h:77
HINSTANCE hInstance
Definition: charmap.c:20
LPCWSTR lpstrDefExt
Definition: commdlg.h:376
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
unsigned char * LPBYTE
Definition: typedefs.h:52
BITMAP bitmap
Definition: precomp.h:101
HICON hRemote
Definition: precomp.h:98
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
Definition: cursoricon.c:2172
long LONG
Definition: pedump.c:60
static VOID DoOpenFile(PINFO pInfo)
Definition: connectdialog.c:34
LONG_PTR LPARAM
Definition: windef.h:208
#define TBM_GETPOS
Definition: commctrl.h:2001
WCHAR DeviceID[128]
Definition: wingdi.h:2798
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
BOOL SaveRdpSettingsToFile(LPWSTR lpFile, PRDPSETTINGS pRdpSettings)
Definition: settings.c:370
UINT_PTR idFrom
Definition: winuser.h:3111
BOOL WINAPI GetOpenFileNameW(OPENFILENAMEW *ofn)
Definition: filedlg.c:4221
int cchTextMax
Definition: commctrl.h:3991
struct NameRec_ * Name
Definition: cdprocs.h:464
#define IDC_GEOSLIDER
Definition: resource.h:19
#define IDS_HEADERTEXT1
Definition: resource.h:44
#define TRANSPARENT
Definition: wingdi.h:948
#define GWLP_USERDATA
Definition: treelist.c:63
UINT mask
Definition: commctrl.h:3987
#define CB_ADDSTRING
Definition: winuser.h:1897
BOOL WINAPI BringWindowToTop(_In_ HWND)
HDC hdc
Definition: msvc.h:53
const WCHAR * str
#define IDI_CONN
Definition: resource.h:35
#define MAKELONG(a, b)
Definition: typedefs.h:248
PSETTINGS_ENTRY Settings
Definition: precomp.h:75
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
Definition: reg.c:2867
smooth NULL
Definition: ftsmooth.c:416
HFONT WINAPI CreateFontIndirectW(_In_ const LOGFONTW *)
#define IDS_PIXEL
Definition: resource.h:41
LPTSTR szFilter
Definition: mplay32.c:24
BOOL WINAPI EnumDisplayDevicesW(LPCWSTR lpDevice, DWORD iDevNum, PDISPLAY_DEVICEW lpDisplayDevice, DWORD dwFlags)
Definition: display.c:78
HICON hMstscLg
Definition: precomp.h:95
Definition: bufpool.h:45
BOOL OpenRDPConnectDialog(HINSTANCE hInstance, PRDPSETTINGS pRdpSettings)
#define SW_SHOW
Definition: winuser.h:769
#define WM_SETTEXT
Definition: winuser.h:1599
#define CB_RESETCONTENT
Definition: winuser.h:1920
HICON hConn
Definition: precomp.h:97
#define MAX_KEY_NAME
Definition: connectdialog.c:26
#define CB_ERR
Definition: winuser.h:2389
PRDPSETTINGS pRdpSettings
Definition: precomp.h:85
#define IDC_SAVEAS
Definition: resource.h:17
#define OFN_PATHMUSTEXIST
Definition: commdlg.h:117
#define TCN_SELCHANGE
Definition: commctrl.h:4099
static VOID ReLoadGeneralPage(PINFO pInfo)
#define DISPLAY_DEVICE_PRIMARY_DEVICE
Definition: wingdi.h:1379
#define SM_CYSCREEN
Definition: winuser.h:950
#define FW_MEDIUM
Definition: wingdi.h:373
unsigned int BOOL
Definition: ntddk_ex.h:94
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
HBITMAP hSpectrum
Definition: precomp.h:100
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4134
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
Definition: cmds.c:130
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
DEVMODEW devmode
#define SWP_NOACTIVATE
Definition: winuser.h:1227
#define IDS_HEADERTEXT2
Definition: resource.h:45
#define WM_CLOSE
Definition: winuser.h:1603
WORD dmSize
Definition: wingdi.h:1597
#define RGB(r, g, b)
Definition: wingdi.h:2917
#define MAX_PATH
Definition: compat.h:26
#define swprintf(buf, format,...)
Definition: sprintf.c:56
unsigned int UINT
Definition: ndis.h:50
unsigned short WORD
Definition: ntddk_ex.h:93
int WINAPI GetSystemMetrics(_In_ int)
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint num
Definition: glext.h:9618
DWORD nMaxFile
Definition: commdlg.h:368
HINSTANCE hInst
Definition: connectdialog.c:28
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define IDD_DISPLAY
Definition: resource.h:13
SETTINGS Settings
Definition: charmap.c:26
DWORD dmPelsWidth
Definition: wingdi.h:1625
#define WM_PAINT
Definition: winuser.h:1602
#define FW_EXTRABOLD
Definition: wingdi.h:377
#define IDC_SERVERCOMBO
Definition: resource.h:15
VOID SaveAllSettings(PINFO pInfo)
Definition: settings.c:16
CHAR Message[80]
Definition: alive.c:5
#define TB_LINEUP
Definition: commctrl.h:2043
#define TB_ENDTRACK
Definition: commctrl.h:2051
int ret
HWND hwndOwner
Definition: commdlg.h:361
#define TB_TOP
Definition: commctrl.h:2049
#define OEM_CHARSET
Definition: wingdi.h:398
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
BYTE lfQuality
Definition: dimm.idl:70
#define index(s, c)
Definition: various.h:29
static const WCHAR L[]
Definition: oid.c:1087
struct tagOFNW OPENFILENAMEW
BOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *lpInitCtrls)
Definition: commctrl.c:893
static VOID OnResolutionChanged(PINFO pInfo, INT position)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
BOOL WINAPI EnumDisplaySettingsExW(LPCWSTR lpszDeviceName, DWORD iModeNum, LPDEVMODEW lpDevMode, DWORD dwFlags)
Definition: display.c:330
DWORD StateFlags
Definition: wingdi.h:2797
HKEY key
Definition: reg.c:42
#define MB_ICONERROR
Definition: winuser.h:781
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
#define IDS_256COLORS
Definition: resource.h:5
#define IDC_COLORIMAGE
Definition: resource.h:28
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
DWORD DeviceStateFlags
Definition: precomp.h:74
INT_PTR CALLBACK DisplayDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
#define IDS_FULLSCREEN
Definition: resource.h:42
#define IDC_BPPCOMBO
Definition: resource.h:20
#define CB_SETCURSEL
Definition: winuser.h:1922
#define WM_COMMAND
Definition: winuser.h:1716
WCHAR DeviceKey[128]
Definition: wingdi.h:2799
static VOID ReLoadDisplayPage(PINFO pInfo)
DWORD dmPelsWidth
Definition: precomp.h:54
LPWSTR DeviceID
Definition: precomp.h:73
PRESOLUTION_INFO Resolutions
Definition: precomp.h:77
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
DWORD dmPelsHeight
Definition: precomp.h:55
static BOOL AddDisplayDevice(PINFO pInfo, PDISPLAY_DEVICEW DisplayDevice)
#define SWP_NOSIZE
Definition: winuser.h:1230
HWND hSelf
Definition: precomp.h:88
#define DT_NOCLIP
Definition: winuser.h:536
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
Definition: text.c:784
static HDC hDC
Definition: 3dtext.c:33
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define DT_SINGLELINE
Definition: winuser.h:540
#define IDC_OPEN
Definition: resource.h:18
#define IDD_CONNECTDIALOG
Definition: resource.h:11
Definition: precomp.h:83
static ATOM item
Definition: dde.c:856
BOOL WINAPI DeleteDC(_In_ HDC)
BOOL LoadRdpSettingsFromFile(PRDPSETTINGS pRdpSettings, LPWSTR lpFile)
Definition: settings.c:418
DWORD SettingsCount
Definition: precomp.h:76
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
Definition: bl.h:1331
#define OFN_OVERWRITEPROMPT
Definition: commdlg.h:116
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define DT_TOP
Definition: winuser.h:542
HBITMAP hHeader
Definition: precomp.h:92
#define WM_HSCROLL
Definition: winuser.h:1719
#define VERTRES
Definition: wingdi.h:715
#define IMAGE_BITMAP
Definition: winuser.h:211
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
#define IDC_LOGONICON
Definition: resource.h:24
#define CBN_SELCHANGE
Definition: winuser.h:1940
HDC WINAPI CreateICW(_In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_opt_ const DEVMODEW *)
DWORD ResolutionsCount
Definition: precomp.h:78
DWORD dmPelsHeight
Definition: wingdi.h:1626
#define WM_DRAWITEM
Definition: winuser.h:1627
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
DWORD dmPelsHeight
Definition: precomp.h:64
Definition: name.c:36
static const WCHAR szName[]
Definition: msipriv.h:1194
#define TabCtrl_InsertItem(hwnd, iItem, pitem)
Definition: commctrl.h:4018
#define IDI_LOGON
Definition: resource.h:34
#define OUT
Definition: typedefs.h:39
HWND hDisplayPage
Definition: precomp.h:91
static void Cleanup(PINFO pInfo)
HWND WINAPI CreateDialogParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
#define HIWORD(l)
Definition: typedefs.h:246
static PSETTINGS_ENTRY GetPossibleSettings(IN LPCWSTR lpDeviceName, OUT DWORD *pSettingsCount, OUT PSETTINGS_ENTRY *CurrentSettings)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3381
#define MAXVALUE
Definition: precomp.h:29
LONG bottom
Definition: windef.h:299
#define DT_CENTER
Definition: winuser.h:527
DWORD bpp
Definition: surface.c:181
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define CB_GETCOUNT
Definition: winuser.h:1903
#define SetWindowLongPtrW
Definition: winuser.h:5215
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
Definition: reg.c:2541
static VOID LoadUsernameHint(HWND hDlg, INT iCur)
#define TCITEM
Definition: commctrl.h:3996
LONG lfWeight
Definition: dimm.idl:63
#define IDC_REMICON
Definition: resource.h:26
static INT_PTR CALLBACK DlgProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam)
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define IDCANCEL
Definition: winuser.h:825
#define IDC_COLORSICON
Definition: resource.h:27
static VOID FillResolutionsAndColors(PINFO pInfo)
IN BOOLEAN OUT PSTR Buffer
Definition: progress.h:34
LPWSTR DeviceDescription
Definition: precomp.h:70
#define LR_DEFAULTCOLOR
Definition: winuser.h:1077
#define IDI_REMOTE
Definition: resource.h:36
#define DT_BOTTOM
Definition: winuser.h:525
static VOID DisplayOnInit(HWND hwnd, PINFO pInfo)
Definition: precomp.h:58
#define WM_INITDIALOG
Definition: winuser.h:1715
LPARAM lParam
Definition: combotst.c:139
#define LOWORD(l)
Definition: pedump.c:82
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HeapFree(x, y, z)
Definition: compat.h:394
#define TBM_CLEARTICS
Definition: commctrl.h:2010
#define SRCCOPY
Definition: wingdi.h:331
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:54
#define IDS_HIGHCOLOR24
Definition: resource.h:8
HDC hdcMem
Definition: welcome.c:104
#define WM_NOTIFY
Definition: richedit.h:61
static BOOL OnMainCreate(HWND hwnd, PRDPSETTINGS pRdpSettings)
#define IDS_TAB_DISPLAY
Definition: resource.h:39
BITMAP headerbitmap
Definition: precomp.h:93
#define ICON_BIG
Definition: tnclass.cpp:51
struct _SETTINGS_ENTRY * Flink
Definition: precomp.h:61
#define LPARAM
Definition: msvc.h:38
#define IDS_BROWSESERVER
Definition: resource.h:43
INT WINAPI DrawTextW(HDC hdc, LPCWSTR str, INT count, LPRECT rect, UINT flags)
Definition: defwnd.c:17
Definition: path.c:42
#define PLANES
Definition: wingdi.h:719
#define SWP_NOOWNERZORDER
Definition: winuser.h:1234
#define ICC_TAB_CLASSES
Definition: commctrl.h:61
GLuint const GLchar * name
Definition: glext.h:6031
#define IDS_HIGHCOLOR32
Definition: resource.h:9
#define CB_FINDSTRINGEXACT
Definition: winuser.h:1901