ReactOS 0.4.15-dev-8102-g108db8f
settings.c
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Display Control Panel
4 * FILE: dll/cpl/desk/settings.c
5 * PURPOSE: Settings property page
6 *
7 * PROGRAMMERS: Trevor McCort (lycan359@gmail.com)
8 * Hervé Poussineau (hpoussin@reactos.org)
9 */
10
11#include "desk.h"
12
13typedef struct _SETTINGS_DATA
14{
21
22typedef struct _TIMEOUTDATA
23{
28
29static VOID
31{
32 TCHAR Buffer[64];
33 TCHAR Pixel[64];
35 HWND hwndMonSel;
37
38 LoadString(hApplet, IDS_PIXEL, Pixel, sizeof(Pixel) / sizeof(TCHAR));
39 _stprintf(Buffer, Pixel, pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth, pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight, Pixel);
41
42 for (index = 0; index < pData->CurrentDisplayDevice->ResolutionsCount; index++)
43 {
44 if (pData->CurrentDisplayDevice->Resolutions[index].dmPelsWidth == pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth &&
45 pData->CurrentDisplayDevice->Resolutions[index].dmPelsHeight == pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight)
46 {
47 if (bUpdateThumb)
49 break;
50 }
51 }
52 if (LoadString(hApplet, (2900 + pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel), Buffer, sizeof(Buffer) / sizeof(TCHAR)))
54
55 hwndMonSel = GetDlgItem(hwndDlg, IDC_SETTINGS_MONSEL);
56 index = (INT)SendMessage(hwndMonSel, MSLM_GETCURSEL, 0, 0);
57 if (index != (DWORD)-1 && SendMessage(hwndMonSel, MSLM_GETMONITORINFO, index, (LPARAM)&info))
58 {
59 info.Size.cx = pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth;
60 info.Size.cy = pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight;
62 }
63}
64
65static int
66CompareSettings(PSETTINGS_ENTRY Entry, DWORD dmPelsWidth, DWORD dmPelsHeight,
67 DWORD dmBitsPerPel, DWORD dmDisplayFrequency)
68{
69 if (Entry->dmPelsWidth == dmPelsWidth &&
70 Entry->dmPelsHeight == dmPelsHeight &&
71 Entry->dmBitsPerPel == dmBitsPerPel &&
72 Entry->dmDisplayFrequency == dmDisplayFrequency)
73 {
74 return 0;
75 }
76 else
77 if ((Entry->dmPelsWidth < dmPelsWidth) ||
78 (Entry->dmPelsWidth == dmPelsWidth && Entry->dmPelsHeight < dmPelsHeight) ||
79 (Entry->dmPelsWidth == dmPelsWidth && Entry->dmPelsHeight == dmPelsHeight &&
80 Entry->dmBitsPerPel < dmBitsPerPel))
81 {
82 return 1;
83 }
84 return -1;
85}
86
87static PSETTINGS_ENTRY
89{
91 DWORD NbSettings = 0;
92 DWORD iMode = 0;
93 DWORD dwFlags = 0;
95 HDC hDC;
96 PSETTINGS_ENTRY Current;
97 DWORD bpp, xres, yres;
98 DWORD curDispFreq;
99
100 /* Get current settings */
101 *CurrentSettings = NULL;
105 xres = GetDeviceCaps(hDC, HORZRES);
106 yres = GetDeviceCaps(hDC, VERTRES);
107 DeleteDC(hDC);
108
109 /* List all settings */
110 devmode.dmSize = (WORD)sizeof(devmode);
112
113 if (!EnumDisplaySettingsEx(DeviceName, ENUM_CURRENT_SETTINGS, &devmode, dwFlags))
114 return NULL;
115
116 curDispFreq = devmode.dmDisplayFrequency;
117
118 while (EnumDisplaySettingsEx(DeviceName, iMode, &devmode, dwFlags))
119 {
120 iMode++;
121
122 if (devmode.dmPelsWidth < 640 ||
123 devmode.dmPelsHeight < 480 ||
124 devmode.dmDisplayFrequency != curDispFreq ||
125 (devmode.dmBitsPerPel != 4 &&
126 devmode.dmBitsPerPel != 8 &&
127 devmode.dmBitsPerPel != 16 &&
128 devmode.dmBitsPerPel != 24 &&
129 devmode.dmBitsPerPel != 32))
130 {
131 continue;
132 }
133
134 Current = HeapAlloc(GetProcessHeap(), 0, sizeof(SETTINGS_ENTRY));
135 if (Current != NULL)
136 {
137 /* Sort resolutions by increasing height, and BPP */
138 PSETTINGS_ENTRY Previous = NULL;
144 while (Next != NULL &&
148 {
149 Previous = Next;
150 Next = Next->Flink;
151 }
152 Current->Blink = Previous;
153 Current->Flink = Next;
154 if (Previous == NULL)
155 Settings = Current;
156 else
157 Previous->Flink = Current;
158 if (Next != NULL)
159 Next->Blink = Current;
160 if (devmode.dmPelsWidth == xres && devmode.dmPelsHeight == yres && devmode.dmBitsPerPel == bpp)
161 {
162 *CurrentSettings = Current;
163 }
164 NbSettings++;
165 }
166 }
167
168 *pSettingsCount = NbSettings;
169 return Settings;
170}
171
172static BOOL
174{
175 PDISPLAY_DEVICE_ENTRY newEntry = NULL;
177 LPTSTR name = NULL;
178 LPTSTR key = NULL;
179 LPTSTR devid = NULL;
180 SIZE_T descriptionSize, nameSize, keySize, devidSize;
181 PSETTINGS_ENTRY Current;
182 DWORD ResolutionsCount = 1;
183 DWORD i;
184
186 if (!newEntry) goto ByeBye;
187
188 newEntry->Settings = GetPossibleSettings(DisplayDevice->DeviceName, &newEntry->SettingsCount, &newEntry->CurrentSettings);
189 if (!newEntry->Settings) goto ByeBye;
190
195
196 /* Count different resolutions */
197 for (Current = newEntry->Settings; Current != NULL; Current = Current->Flink)
198 {
199 if (Current->Flink != NULL &&
200 ((Current->dmPelsWidth != Current->Flink->dmPelsWidth) ||
201 (Current->dmPelsHeight != Current->Flink->dmPelsHeight)))
202 {
203 ResolutionsCount++;
204 }
205 }
206
207 newEntry->Resolutions = HeapAlloc(GetProcessHeap(), 0, ResolutionsCount * sizeof(RESOLUTION_INFO));
208 if (!newEntry->Resolutions) goto ByeBye;
209
210 newEntry->ResolutionsCount = ResolutionsCount;
211
212 /* Fill resolutions infos */
213 for (Current = newEntry->Settings, i = 0; Current != NULL; Current = Current->Flink)
214 {
215 if (Current->Flink == NULL ||
216 (Current->Flink != NULL &&
217 ((Current->dmPelsWidth != Current->Flink->dmPelsWidth) ||
218 (Current->dmPelsHeight != Current->Flink->dmPelsHeight))))
219 {
220 newEntry->Resolutions[i].dmPelsWidth = Current->dmPelsWidth;
221 newEntry->Resolutions[i].dmPelsHeight = Current->dmPelsHeight;
222 i++;
223 }
224 }
225 descriptionSize = (_tcslen(DisplayDevice->DeviceString) + 1) * sizeof(TCHAR);
226 description = HeapAlloc(GetProcessHeap(), 0, descriptionSize);
227 if (!description) goto ByeBye;
228
229 nameSize = (_tcslen(DisplayDevice->DeviceName) + 1) * sizeof(TCHAR);
230 name = HeapAlloc(GetProcessHeap(), 0, nameSize);
231 if (!name) goto ByeBye;
232
233 keySize = (_tcslen(DisplayDevice->DeviceKey) + 1) * sizeof(TCHAR);
234 key = HeapAlloc(GetProcessHeap(), 0, keySize);
235 if (!key) goto ByeBye;
236
237 devidSize = (_tcslen(DisplayDevice->DeviceID) + 1) * sizeof(TCHAR);
238 devid = HeapAlloc(GetProcessHeap(), 0, devidSize);
239 if (!devid) goto ByeBye;
240
241 memcpy(description, DisplayDevice->DeviceString, descriptionSize);
242 memcpy(name, DisplayDevice->DeviceName, nameSize);
243 memcpy(key, DisplayDevice->DeviceKey, keySize);
244 memcpy(devid, DisplayDevice->DeviceID, devidSize);
245 newEntry->DeviceDescription = description;
246 newEntry->DeviceName = name;
247 newEntry->DeviceKey = key;
248 newEntry->DeviceID = devid;
249 newEntry->DeviceStateFlags = DisplayDevice->StateFlags;
250 newEntry->Flink = pData->DisplayDeviceList;
251 pData->DisplayDeviceList = newEntry;
252 return TRUE;
253
254ByeBye:
255 if (newEntry != NULL)
256 {
257 if (newEntry->Settings != NULL)
258 {
259 Current = newEntry->Settings;
260 while (Current != NULL)
261 {
262 PSETTINGS_ENTRY Next = Current->Flink;
263 HeapFree(GetProcessHeap(), 0, Current);
264 Current = Next;
265 }
266 }
267 if (newEntry->Resolutions != NULL)
268 HeapFree(GetProcessHeap(), 0, newEntry->Resolutions);
269 HeapFree(GetProcessHeap(), 0, newEntry);
270 }
271 if (description != NULL)
273 if (name != NULL)
275 if (key != NULL)
277 return FALSE;
278}
279
280static VOID
282{
283 PSETTINGS_ENTRY Current;
284 DWORD index;
285
286 pData->CurrentDisplayDevice = pDeviceEntry; /* Update variable */
287
288 /* Fill color depths combo box */
290 for (Current = pDeviceEntry->Settings; Current != NULL; Current = Current->Flink)
291 {
292 TCHAR Buffer[64];
293 if (LoadString(hApplet, (2900 + Current->dmBitsPerPel), Buffer, sizeof(Buffer) / sizeof(TCHAR)))
294 {
296 if (index == (DWORD)CB_ERR)
297 {
300 }
301 }
302 }
303
304 /* Fill device description */
305 SendDlgItemMessage(hwndDlg, IDC_SETTINGS_DEVICE, WM_SETTEXT, 0, (LPARAM)pDeviceEntry->DeviceDescription);
306
307 /* Fill resolutions slider */
309 SendDlgItemMessage(hwndDlg, IDC_SETTINGS_RESOLUTION, TBM_SETRANGE, TRUE, MAKELONG(0, pDeviceEntry->ResolutionsCount - 1));
310
311 UpdateDisplay(hwndDlg, pData, TRUE);
312}
313
314static VOID
316{
318 DWORD Result = 0;
319 DWORD iDevNum = 0;
320 DWORD i;
321 DISPLAY_DEVICE displayDevice;
323
325 if (pData == NULL)
326 return;
327
329
330 /* Get video cards list */
331 pData->DisplayDeviceList = NULL;
332 displayDevice.cb = sizeof(displayDevice);
333 while (EnumDisplayDevices(NULL, iDevNum, &displayDevice, EDD_GET_DEVICE_INTERFACE_NAME))
334 {
335 if ((displayDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) != 0)
336 {
337 if (AddDisplayDevice(pData, &displayDevice))
338 Result++;
339 }
340 iDevNum++;
341 }
342
343 if (Result == 0)
344 {
345 /* No adapter found */
351
352 /* Do not initialize the color spectrum bitmaps */
353 memset(pData->hSpectrumBitmaps, 0, sizeof(pData->hSpectrumBitmaps));
354 return;
355 }
356 else if (Result == 1)
357 {
359
360 /* Single video adapter */
361 OnDisplayDeviceChanged(hwndDlg, pData, pData->DisplayDeviceList);
362
365
366 monitors.Position.x = monitors.Position.y = 0;
367 monitors.Size.cx = pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth;
368 monitors.Size.cy = pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight;
369 monitors.Flags = 0;
370 SendDlgItemMessage(hwndDlg,
373 1,
374 (LPARAM)&monitors);
375 }
376 else /* FIXME: Incomplete! */
377 {
378 PMONSL_MONINFO pMonitors;
379 DWORD i;
380
381 OnDisplayDeviceChanged(hwndDlg, pData, pData->DisplayDeviceList);
382
384
385 pMonitors = (PMONSL_MONINFO)HeapAlloc(GetProcessHeap(), 0, sizeof(MONSL_MONINFO) * Result);
386 if (pMonitors)
387 {
388 DWORD hack = 1280;
389 for (i = 0; i < Result; i++)
390 {
391 pMonitors[i].Position.x = hack * i;
392 pMonitors[i].Position.y = 0;
393 pMonitors[i].Size.cx = pData->DisplayDeviceList->CurrentSettings->dmPelsWidth;
394 pMonitors[i].Size.cy = pData->DisplayDeviceList->CurrentSettings->dmPelsHeight;
395 pMonitors[i].Flags = 0;
396 }
397
398 SendDlgItemMessage(hwndDlg,
401 Result,
402 (LPARAM)pMonitors);
403
404 HeapFree(GetProcessHeap(), 0, pMonitors);
405 }
406 }
407
408 /* Initialize the color spectrum bitmaps */
409 for (i = 0; i < NUM_SPECTRUM_BITMAPS; i++)
410 {
412
413 if (pData->hSpectrumBitmaps[i] != NULL)
414 {
415 if (GetObjectW(pData->hSpectrumBitmaps[i], sizeof(BITMAP), &bitmap) != 0)
416 {
417 pData->cxSource[i] = bitmap.bmWidth;
418 pData->cySource[i] = bitmap.bmHeight;
419 }
420 else
421 {
422 pData->cxSource[i] = 0;
423 pData->cySource[i] = 0;
424 }
425 }
426 }
427}
428
429static VOID
431{
432 HBRUSH hBrush;
433 HDC hDC;
434 HGDIOBJ hOldObj;
435 RECT rcItem = {
440 };
441
442 hDC = CreateCompatibleDC(draw->hDC);
444
445 /* FIXME: Draw resolution preview bitmap inside monitor. */
447 FillRect(hDC, &rcItem, hBrush);
448 DeleteObject(hBrush);
449
450 GdiTransparentBlt(draw->hDC,
451 draw->rcItem.left, draw->rcItem.top,
452 draw->rcItem.right - draw->rcItem.left + 1,
453 draw->rcItem.bottom - draw->rcItem.top + 1,
454 hDC,
455 0, 0,
458
459 SelectObject(hDC, hOldObj);
460 DeleteDC(hDC);
461}
462
463/* Get the ID for SETTINGS_DATA::hSpectrumBitmaps */
464static VOID
466{
467 HDC hdcMem;
468 INT iBitmap;
469
471
472 if (!hdcMem)
473 return;
474
475 switch(BitsPerPel)
476 {
477 case 4: iBitmap = 0; break;
478 case 8: iBitmap = 1; break;
479 default: iBitmap = 2;
480 }
481
482 if (SelectObject(hdcMem, pData->hSpectrumBitmaps[iBitmap]))
483 {
485 client->left, client->top,
486 client->right - client->left,
487 client->bottom - client->top,
488 hdcMem, 0, 0,
489 pData->cxSource[iBitmap],
490 pData->cySource[iBitmap], SRCCOPY);
491 }
492
494}
495
496static VOID
498{
499 /* If new BPP is not compatible with resolution:
500 * 1) try to find the nearest smaller matching resolution
501 * 2) otherwise, get the nearest bigger resolution
502 */
503 PSETTINGS_ENTRY Current;
504 DWORD dmNewBitsPerPel;
505 DWORD index;
506 HDC hSpectrumDC;
507 HWND hSpectrumControl;
508 RECT client;
509
511 dmNewBitsPerPel = (DWORD) SendDlgItemMessage(hwndDlg, IDC_SETTINGS_BPP, CB_GETITEMDATA, index, 0);
512
513 /* Show a new spectrum bitmap */
514 hSpectrumControl = GetDlgItem(hwndDlg, IDC_SETTINGS_SPECTRUM);
515 hSpectrumDC = GetDC(hSpectrumControl);
516 if (hSpectrumDC == NULL)
517 return;
518
519 GetClientRect(hSpectrumControl, &client);
520 ShowColorSpectrum(hSpectrumDC, &client, dmNewBitsPerPel, pData);
521 ReleaseDC(hSpectrumControl, hSpectrumDC);
522
523 /* Find if new parameters are valid */
524 Current = pData->CurrentDisplayDevice->CurrentSettings;
525 if (dmNewBitsPerPel == Current->dmBitsPerPel)
526 {
527 /* No change */
528 return;
529 }
530
531 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
532
533 if (dmNewBitsPerPel < Current->dmBitsPerPel)
534 {
535 Current = Current->Blink;
536 while (Current != NULL)
537 {
538 if (Current->dmBitsPerPel == dmNewBitsPerPel
539 && Current->dmPelsHeight == pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight
540 && Current->dmPelsWidth == pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth)
541 {
542 pData->CurrentDisplayDevice->CurrentSettings = Current;
543 UpdateDisplay(hwndDlg, pData, TRUE);
544 return;
545 }
546 Current = Current->Blink;
547 }
548 }
549 else
550 {
551 Current = Current->Flink;
552 while (Current != NULL)
553 {
554 if (Current->dmBitsPerPel == dmNewBitsPerPel
555 && Current->dmPelsHeight == pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight
556 && Current->dmPelsWidth == pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth)
557 {
558 pData->CurrentDisplayDevice->CurrentSettings = Current;
559 UpdateDisplay(hwndDlg, pData, TRUE);
560 return;
561 }
562 Current = Current->Flink;
563 }
564 }
565
566 /* Search smaller resolution compatible with current color depth */
567 Current = pData->CurrentDisplayDevice->CurrentSettings->Blink;
568 while (Current != NULL)
569 {
570 if (Current->dmBitsPerPel == dmNewBitsPerPel)
571 {
572 pData->CurrentDisplayDevice->CurrentSettings = Current;
573 UpdateDisplay(hwndDlg, pData, TRUE);
574 return;
575 }
576 Current = Current->Blink;
577 }
578
579 /* Search bigger resolution compatible with current color depth */
580 Current = pData->CurrentDisplayDevice->CurrentSettings->Flink;
581 while (Current != NULL)
582 {
583 if (Current->dmBitsPerPel == dmNewBitsPerPel)
584 {
585 pData->CurrentDisplayDevice->CurrentSettings = Current;
586 UpdateDisplay(hwndDlg, pData, TRUE);
587 return;
588 }
589 Current = Current->Flink;
590 }
591
592 /* We shouldn't go there */
593}
594
595static VOID
597 IN BOOL bUpdateThumb)
598{
599 /* If new resolution is not compatible with color depth:
600 * 1) try to find the nearest bigger matching color depth
601 * 2) otherwise, get the nearest smaller color depth
602 */
603 PSETTINGS_ENTRY Current;
604 DWORD dmNewPelsHeight = pData->CurrentDisplayDevice->Resolutions[NewPosition].dmPelsHeight;
605 DWORD dmNewPelsWidth = pData->CurrentDisplayDevice->Resolutions[NewPosition].dmPelsWidth;
606 DWORD dmBitsPerPel;
607 DWORD dmDisplayFrequency;
608
609 /* Find if new parameters are valid */
610 Current = pData->CurrentDisplayDevice->CurrentSettings;
611 if (dmNewPelsHeight == Current->dmPelsHeight && dmNewPelsWidth == Current->dmPelsWidth)
612 {
613 /* No change */
614 return;
615 }
616
617 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
619
620 dmBitsPerPel = Current->dmBitsPerPel;
621 dmDisplayFrequency = Current->dmDisplayFrequency;
622
623 if (CompareSettings(Current, dmNewPelsWidth,
624 dmNewPelsHeight, dmBitsPerPel,
625 dmDisplayFrequency) < 0)
626 {
627 Current = Current->Blink;
628 while (Current != NULL)
629 {
630 if (Current->dmPelsHeight == dmNewPelsHeight
631 && Current->dmPelsWidth == dmNewPelsWidth
632 && Current->dmBitsPerPel == dmBitsPerPel)
633 {
634 pData->CurrentDisplayDevice->CurrentSettings = Current;
635 UpdateDisplay(hwndDlg, pData, bUpdateThumb);
636 return;
637 }
638 Current = Current->Blink;
639 }
640 }
641 else
642 {
643 Current = Current->Flink;
644 while (Current != NULL)
645 {
646 if (Current->dmPelsHeight == dmNewPelsHeight
647 && Current->dmPelsWidth == dmNewPelsWidth
648 && Current->dmBitsPerPel == dmBitsPerPel)
649 {
650 pData->CurrentDisplayDevice->CurrentSettings = Current;
651 UpdateDisplay(hwndDlg, pData, bUpdateThumb);
652 return;
653 }
654 Current = Current->Flink;
655 }
656 }
657
658 /* Search bigger color depth compatible with current resolution */
659 Current = pData->CurrentDisplayDevice->CurrentSettings->Flink;
660 while (Current != NULL)
661 {
662 if (dmNewPelsHeight == Current->dmPelsHeight && dmNewPelsWidth == Current->dmPelsWidth)
663 {
664 pData->CurrentDisplayDevice->CurrentSettings = Current;
665 UpdateDisplay(hwndDlg, pData, bUpdateThumb);
666 return;
667 }
668 Current = Current->Flink;
669 }
670
671 /* Search smaller color depth compatible with current resolution */
672 Current = pData->CurrentDisplayDevice->CurrentSettings->Blink;
673 while (Current != NULL)
674 {
675 if (dmNewPelsHeight == Current->dmPelsHeight && dmNewPelsWidth == Current->dmPelsWidth)
676 {
677 pData->CurrentDisplayDevice->CurrentSettings = Current;
678 UpdateDisplay(hwndDlg, pData, bUpdateThumb);
679 return;
680 }
681 Current = Current->Blink;
682 }
683
684 /* We shouldn't go there */
685}
686
687/* Property sheet page callback */
690{
691 UINT Ret = 0;
692
693 switch (uMsg)
694 {
695 case PSPCB_CREATE:
697 break;
698
699 case PSPCB_RELEASE:
701 break;
702 }
703
704 return Ret;
705}
706
707static INT_PTR CALLBACK
709{
711
713
714 switch(uMsg)
715 {
716 case WM_INITDIALOG:
717 /* Allocate the local dialog data */
719 if (pData == NULL)
720 return FALSE;
721
722 /* Link the dialog data to the dialog */
724
725 /* Timeout in seconds */
726 pData->nTimeout = 15;
727
728 /* Load the raw timeout string */
729 LoadString(hApplet, IDS_TIMEOUTTEXT, pData->szRawBuffer, ARRAYSIZE(pData->szRawBuffer));
730
731 /* Cook the timeout string and show it */
732 _stprintf(pData->szCookedBuffer, pData->szRawBuffer, pData->nTimeout);
733 SetDlgItemText(hwndDlg, IDC_TIMEOUTTEXT, pData->szCookedBuffer);
734
735 /* Start the timer (ticks every second)*/
736 SetTimer(hwndDlg, 1, 1000, NULL);
737 break;
738
739 case WM_TIMER:
740 /* Update the timepout value */
741 pData->nTimeout--;
742
743 /* Update the timeout text */
744 _stprintf(pData->szCookedBuffer, pData->szRawBuffer, pData->nTimeout);
745 SetDlgItemText(hwndDlg, IDC_TIMEOUTTEXT, pData->szCookedBuffer);
746
747 /* Kill the timer and return a 'No', if we ran out of time */
748 if (pData->nTimeout == 0)
749 {
750 KillTimer(hwndDlg, 1);
751 EndDialog(hwndDlg, IDNO);
752 }
753 break;
754
755 case WM_COMMAND:
756 /* Kill the timer and return the clicked button id */
757 KillTimer(hwndDlg, 1);
758 EndDialog(hwndDlg, LOWORD(wParam));
759 break;
760
761 case WM_DESTROY:
762 /* Free the local dialog data */
764 break;
765 }
766
767 return FALSE;
768}
769
770BOOL
772{
773 TCHAR Message[1024], Title[256];
775
776 RtlZeroMemory(&devmode, sizeof(devmode));
777 devmode.dmSize = (WORD)sizeof(devmode);
783
784 *rc = ChangeDisplaySettingsEx(DeviceName,
785 &devmode,
786 NULL,
788 NULL);
789 switch (*rc)
790 {
792 break;
793
798 return FALSE;
799
801 default:
805 return FALSE;
806 }
807
809 {
810 return TRUE;
811 }
812 else
813 {
818
819 *rc = ChangeDisplaySettingsEx(DeviceName,
820 &devmode,
821 NULL,
823 NULL);
824 switch (*rc)
825 {
827 return FALSE;
828
833 return FALSE;
834
836 default:
840 return FALSE;
841 }
842 }
843}
844
845static
849{
850 PSETTINGS_ENTRY Request = &pDevice->InitialSettings, BestEntry = NULL, Current;
851 LONG Distance, NearestDistance = MAXLONG;
852
853 /* Find the best entry in the list */
854 for (Current = pDevice->Settings; Current; Current = Current->Flink)
855 {
856 Distance = 0x100000 * labs(Current->dmBitsPerPel - Request->dmBitsPerPel ) +
857 0x100 * labs(Current->dmPelsWidth - Request->dmPelsWidth ) +
858 0x100 * labs(Current->dmPelsHeight - Request->dmPelsHeight ) +
859 labs(Current->dmDisplayFrequency - Request->dmDisplayFrequency);
860 if (Distance == 0)
861 return Current;
862
863 if (Distance < NearestDistance)
864 {
865 BestEntry = Current;
866 NearestDistance = Distance;
867 }
868 }
869
870 return BestEntry;
871}
872
873static VOID
875{
876 BOOL Ret;
877 LONG rc;
878
879 Ret = SwitchDisplayMode(hwndDlg,
880 pData->CurrentDisplayDevice->DeviceName,
881 &pData->CurrentDisplayDevice->InitialSettings,
882 pData->CurrentDisplayDevice->CurrentSettings,
883 &rc);
884
885 if (rc != DISP_CHANGE_SUCCESSFUL)
886 return;
887
888 if (Ret)
889 {
890 pData->CurrentDisplayDevice->InitialSettings.dmPelsWidth = pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth;
891 pData->CurrentDisplayDevice->InitialSettings.dmPelsHeight = pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight;
892 pData->CurrentDisplayDevice->InitialSettings.dmBitsPerPel = pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel;
893 pData->CurrentDisplayDevice->InitialSettings.dmDisplayFrequency = pData->CurrentDisplayDevice->CurrentSettings->dmDisplayFrequency;
894 }
895 else
896 {
897 pData->CurrentDisplayDevice->CurrentSettings = FindBestElement(pData->CurrentDisplayDevice);
898 UpdateDisplay(hwndDlg, pData, TRUE);
899 }
900}
901
902/* Property page dialog callback */
905{
907
909
910 switch(uMsg)
911 {
912 case WM_INITDIALOG:
913 {
914 SettingsOnInitDialog(hwndDlg);
915 break;
916 }
917 case WM_DRAWITEM:
918 {
919 LPDRAWITEMSTRUCT lpDrawItem;
920 lpDrawItem = (LPDRAWITEMSTRUCT)lParam;
921
922 switch (lpDrawItem->CtlID)
923 {
925 {
926 ShowResolutionPreview(lpDrawItem, pData);
927 break;
928 }
930 {
931 ShowColorSpectrum(lpDrawItem->hDC, &lpDrawItem->rcItem, pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel, pData);
932 break;
933 }
934 }
935 break;
936 }
937 case WM_COMMAND:
938 {
939 DWORD controlId = LOWORD(wParam);
941
942 if (controlId == IDC_SETTINGS_ADVANCED && command == BN_CLICKED)
943 {
944 if (DisplayAdvancedSettings(hwndDlg, pData->CurrentDisplayDevice))
945 {
947 ZeroMemory(&devmode, sizeof(devmode));
948 devmode.dmSize = (WORD)sizeof(devmode);
949 if (EnumDisplaySettingsExW(pData->CurrentDisplayDevice->DeviceName,
951 {
952 PSETTINGS_ENTRY pInitialSettings = &pData->CurrentDisplayDevice->InitialSettings;
953 pInitialSettings->dmPelsWidth = devmode.dmPelsWidth;
954 pInitialSettings->dmPelsHeight = devmode.dmPelsHeight;
955 pInitialSettings->dmBitsPerPel = devmode.dmBitsPerPel;
957 pData->CurrentDisplayDevice->CurrentSettings =
958 FindBestElement(pData->CurrentDisplayDevice);
959 UpdateDisplay(hwndDlg, pData, TRUE);
960 }
961 }
962 }
963 else if (controlId == IDC_SETTINGS_BPP && command == CBN_SELCHANGE)
964 OnBPPChanged(hwndDlg, pData);
965 break;
966 }
967 case WM_HSCROLL:
968 {
969 switch (LOWORD(wParam))
970 {
971 case TB_LINEUP:
972 case TB_LINEDOWN:
973 case TB_PAGEUP:
974 case TB_PAGEDOWN:
975 case TB_TOP:
976 case TB_BOTTOM:
977 case TB_ENDTRACK:
978 {
979 DWORD newPosition = (DWORD) SendDlgItemMessage(hwndDlg, IDC_SETTINGS_RESOLUTION, TBM_GETPOS, 0, 0);
980 OnResolutionChanged(hwndDlg, pData, newPosition, TRUE);
981 break;
982 }
983
984 case TB_THUMBTRACK:
986 break;
987 }
988 break;
989 }
990 case WM_NOTIFY:
991 {
992 LPNMHDR lpnm = (LPNMHDR)lParam;
993 if (lpnm->code == (UINT)PSN_APPLY)
994 {
995 if (pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth != pData->CurrentDisplayDevice->InitialSettings.dmPelsWidth
996 || pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight != pData->CurrentDisplayDevice->InitialSettings.dmPelsHeight
997 || pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel != pData->CurrentDisplayDevice->InitialSettings.dmBitsPerPel)
998 {
999 /* Apply new settings */
1000 ApplyDisplaySettings(hwndDlg, pData);
1001 }
1002 }
1003 else if (lpnm->code == MSLN_MONITORCHANGED)
1004 {
1006 PDISPLAY_DEVICE_ENTRY Current = pData->DisplayDeviceList;
1007 ULONG i;
1008 for (i = 0; i < lpnmi->hdr.Index; i++)
1009 Current = Current->Flink;
1010 OnDisplayDeviceChanged(hwndDlg, pData, Current);
1011 }
1012 break;
1013 }
1014
1015 case WM_CONTEXTMENU:
1016 {
1017 HWND hwndMonSel;
1018 HMENU hPopup;
1019 UINT uiCmd;
1020 POINT pt, ptClient;
1021 INT Index;
1022
1023 pt.x = (SHORT)LOWORD(lParam);
1024 pt.y = (SHORT)HIWORD(lParam);
1025
1026 hwndMonSel = GetDlgItem(hwndDlg,
1028 if ((HWND)wParam == hwndMonSel)
1029 {
1030 if (pt.x == -1 && pt.y == -1)
1031 {
1032 RECT rcMon;
1033
1034 Index = (INT)SendMessage(hwndMonSel,
1036 0,
1037 0);
1038
1039 if (Index >= 0 &&
1040 (INT)SendMessage(hwndMonSel,
1042 Index,
1043 (LPARAM)&rcMon) > 0)
1044 {
1045 pt.x = rcMon.left + ((rcMon.right - rcMon.left) / 2);
1046 pt.y = rcMon.top + ((rcMon.bottom - rcMon.top) / 2);
1047 }
1048 else
1049 pt.x = pt.y = 0;
1050
1051 MapWindowPoints(hwndMonSel,
1052 NULL,
1053 &pt,
1054 1);
1055 }
1056 else
1057 {
1058 ptClient = pt;
1060 hwndMonSel,
1061 &ptClient,
1062 1);
1063
1064 Index = (INT)SendMessage(hwndMonSel,
1066 (WPARAM)&ptClient,
1067 0);
1068 }
1069
1070 if (Index >= 0)
1071 {
1072 hPopup = LoadPopupMenu(hApplet,
1074 if (hPopup != NULL)
1075 {
1076 /* FIXME: Enable/Disable menu items */
1077 EnableMenuItem(hPopup,
1080 EnableMenuItem(hPopup,
1083 EnableMenuItem(hPopup,
1086 EnableMenuItem(hPopup,
1089
1090 uiCmd = (UINT)TrackPopupMenu(hPopup,
1092 pt.x,
1093 pt.y,
1094 0,
1095 hwndDlg,
1096 NULL);
1097
1098 switch (uiCmd)
1099 {
1100 case ID_MENU_ATTACHED:
1101 case ID_MENU_PRIMARY:
1102 case ID_MENU_IDENTIFY:
1103 case ID_MENU_PROPERTIES:
1104 /* FIXME: Implement */
1105 break;
1106 }
1107
1108 DestroyMenu(hPopup);
1109 }
1110 }
1111 }
1112 break;
1113 }
1114
1115 case WM_DESTROY:
1116 {
1117 DWORD i;
1118 PDISPLAY_DEVICE_ENTRY Current = pData->DisplayDeviceList;
1119
1120 while (Current != NULL)
1121 {
1122 PDISPLAY_DEVICE_ENTRY Next = Current->Flink;
1123 PSETTINGS_ENTRY CurrentSettings = Current->Settings;
1124 while (CurrentSettings != NULL)
1125 {
1126 PSETTINGS_ENTRY NextSettings = CurrentSettings->Flink;
1127 HeapFree(GetProcessHeap(), 0, CurrentSettings);
1128 CurrentSettings = NextSettings;
1129 }
1130 HeapFree(GetProcessHeap(), 0, Current);
1131 Current = Next;
1132 }
1133
1134 for (i = 0; i < NUM_SPECTRUM_BITMAPS; i++)
1135 {
1136 if (pData->hSpectrumBitmaps[i])
1137 DeleteObject(pData->hSpectrumBitmaps[i]);
1138 }
1139
1141 }
1142 }
1143 return FALSE;
1144}
static HDC hDC
Definition: 3dtext.c:33
DEVMODEW devmode
BOOL DisplayAdvancedSettings(HWND hWndParent, PDISPLAY_DEVICE_ENTRY DisplayDevice)
Definition: advmon.c:78
GLOBAL_DATA g_GlobalData
Definition: background.c:70
#define IDS_PIXEL
Definition: resource.h:41
#define IDC_SETTINGS_RESOLUTION_TEXT
Definition: resource.h:21
#define index(s, c)
Definition: various.h:29
HMENU LoadPopupMenu(IN HINSTANCE hInstance, IN LPCWSTR lpMenuName)
Definition: util.cpp:33
Definition: bufpool.h:45
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define MONITOR_BOTTOM
Definition: desk.h:74
#define MONITOR_LEFT
Definition: desk.h:71
#define MONITOR_ALPHA
Definition: desk.h:79
#define NUM_SPECTRUM_BITMAPS
Definition: desk.h:82
#define MONITOR_TOP
Definition: desk.h:72
#define MONITOR_RIGHT
Definition: desk.h:73
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
HINSTANCE hApplet
Definition: access.c:17
#define IDC_SETTINGS_RESOLUTION
Definition: resource.h:66
#define ID_MENU_PROPERTIES
Definition: resource.h:86
#define IDC_SETTINGS_BPP
Definition: resource.h:65
#define IDB_SPECTRUM_4
Definition: resource.h:73
#define IDC_RESOLUTION_PREVIEW
Definition: resource.h:35
#define IDC_SETTINGS_MONSEL
Definition: resource.h:69
#define ID_MENU_IDENTIFY
Definition: resource.h:85
#define IDC_SETTINGS_SPECTRUM
Definition: resource.h:70
#define IDM_MONITOR_MENU
Definition: resource.h:82
#define IDS_DISPLAY_SETTINGS
Definition: resource.h:161
#define IDC_TIMEOUTTEXT
Definition: resource.h:201
#define IDC_SETTINGS_MONTEXT
Definition: resource.h:71
#define IDS_TIMEOUTTEXT
Definition: resource.h:202
#define IDS_APPLY_NEEDS_RESTART
Definition: resource.h:164
#define IDC_SETTINGS_DEVICE
Definition: resource.h:64
#define IDD_CONFIRMSETTINGS
Definition: resource.h:19
#define IDC_SETTINGS_ADVANCED
Definition: resource.h:68
#define ID_MENU_PRIMARY
Definition: resource.h:84
#define ID_MENU_ATTACHED
Definition: resource.h:83
#define IDS_APPLY_FAILED
Definition: resource.h:163
static BOOL AddDisplayDevice(IN PSETTINGS_DATA pData, IN const DISPLAY_DEVICE *DisplayDevice)
Definition: settings.c:173
static VOID ShowColorSpectrum(IN HDC hDC, IN LPRECT client, IN DWORD BitsPerPel, IN PSETTINGS_DATA pData)
Definition: settings.c:465
static VOID UpdateDisplay(IN HWND hwndDlg, PSETTINGS_DATA pData, IN BOOL bUpdateThumb)
Definition: settings.c:30
static VOID OnResolutionChanged(IN HWND hwndDlg, IN PSETTINGS_DATA pData, IN DWORD NewPosition, IN BOOL bUpdateThumb)
Definition: settings.c:596
static INT_PTR CALLBACK ConfirmDlgProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
Definition: settings.c:708
static VOID SettingsOnInitDialog(IN HWND hwndDlg)
Definition: settings.c:315
struct _SETTINGS_DATA * PSETTINGS_DATA
static PSETTINGS_ENTRY GetPossibleSettings(IN LPCTSTR DeviceName, OUT DWORD *pSettingsCount, OUT PSETTINGS_ENTRY *CurrentSettings)
Definition: settings.c:88
struct _TIMEOUTDATA * PTIMEOUTDATA
static PSETTINGS_ENTRY FindBestElement(_In_ PDISPLAY_DEVICE_ENTRY pDevice)
Definition: settings.c:847
static VOID OnDisplayDeviceChanged(IN HWND hwndDlg, IN PSETTINGS_DATA pData, IN PDISPLAY_DEVICE_ENTRY pDeviceEntry)
Definition: settings.c:281
static int CompareSettings(PSETTINGS_ENTRY Entry, DWORD dmPelsWidth, DWORD dmPelsHeight, DWORD dmBitsPerPel, DWORD dmDisplayFrequency)
Definition: settings.c:66
static VOID ApplyDisplaySettings(HWND hwndDlg, PSETTINGS_DATA pData)
Definition: settings.c:874
INT_PTR CALLBACK SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
Definition: settings.c:904
static VOID OnBPPChanged(IN HWND hwndDlg, IN PSETTINGS_DATA pData)
Definition: settings.c:497
UINT CALLBACK SettingsPageCallbackProc(HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp)
Definition: settings.c:689
struct _SETTINGS_DATA SETTINGS_DATA
static VOID ShowResolutionPreview(IN LPDRAWITEMSTRUCT draw, IN PSETTINGS_DATA pData)
Definition: settings.c:430
struct _TIMEOUTDATA TIMEOUTDATA
BOOL SwitchDisplayMode(HWND hwndDlg, PWSTR DeviceName, PSETTINGS_ENTRY seInit, PSETTINGS_ENTRY seNew, OUT PLONG rc)
Definition: settings.c:771
DWORD bpp
Definition: surface.c:185
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
static const WCHAR Title[]
Definition: oid.c:1259
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define CALLBACK
Definition: compat.h:35
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
static const WCHAR Message[]
Definition: register.c:74
#define pt(x, y)
Definition: drawing.c:79
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
FxDevice * pDevice
pKey DeleteObject()
GLuint * monitors
Definition: glext.h:11118
GLuint index
Definition: glext.h:6031
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
_Check_return_ long __cdecl labs(_In_ long x)
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define _stprintf
Definition: utility.h:124
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:92
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
VOID UnregisterMonitorSelectionControl(IN HINSTANCE hInstance)
Definition: monslctl.c:1655
BOOL RegisterMonitorSelectionControl(IN HINSTANCE hInstance)
Definition: monslctl.c:1638
struct _MONSL_MONINFO MONSL_MONINFO
#define MSLM_GETCURSEL
Definition: monslctl.h:139
struct _MONSL_MONNMMONITORCHANGING * PMONSL_MONNMMONITORCHANGING
struct _MONSL_MONINFO * PMONSL_MONINFO
#define MSLM_SETMONITORSINFO
Definition: monslctl.h:89
#define MSLM_GETMONITORINFO
Definition: monslctl.h:161
#define MSLM_SETMONITORINFO
Definition: monslctl.h:150
#define MSLN_MONITORCHANGED
Definition: monslctl.h:66
#define MSLM_GETMONITORRECT
Definition: monslctl.h:212
#define MSLM_HITTEST
Definition: monslctl.h:120
#define _In_
Definition: ms_sal.h:308
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
unsigned int UINT
Definition: ndis.h:50
#define DWORD
Definition: nt_native.h:44
#define LOWORD(l)
Definition: pedump.c:82
short SHORT
Definition: pedump.c:59
long LONG
Definition: pedump.c:60
#define INT
Definition: polytest.cpp:20
#define PropSheet_Changed(d, w)
Definition: prsht.h:344
#define PSPCB_CREATE
Definition: prsht.h:38
#define PSN_APPLY
Definition: prsht.h:117
#define PSPCB_RELEASE
Definition: prsht.h:37
#define LPPROPSHEETPAGE
Definition: prsht.h:390
#define TB_TOP
Definition: commctrl.h:2079
#define TB_ENDTRACK
Definition: commctrl.h:2081
#define TB_PAGEUP
Definition: commctrl.h:2075
#define TB_BOTTOM
Definition: commctrl.h:2080
#define TBM_GETPOS
Definition: commctrl.h:2031
#define TBM_CLEARTICS
Definition: commctrl.h:2040
#define TB_PAGEDOWN
Definition: commctrl.h:2076
#define TBM_SETRANGE
Definition: commctrl.h:2037
#define TB_THUMBTRACK
Definition: commctrl.h:2078
#define TB_LINEUP
Definition: commctrl.h:2073
#define TBM_SETPOS
Definition: commctrl.h:2036
#define TB_LINEDOWN
Definition: commctrl.h:2074
#define WM_CONTEXTMENU
Definition: richedit.h:64
#define WM_NOTIFY
Definition: richedit.h:61
#define memset(x, y, z)
Definition: compat.h:39
static FILE * client
Definition: client.c:41
base of all file and directory entries
Definition: entries.h:83
Definition: bl.h:1331
DWORD StateFlags
Definition: wingdi.h:2812
Definition: precomp.h:68
PRESOLUTION_INFO Resolutions
Definition: precomp.h:77
struct _DISPLAY_DEVICE_ENTRY * Flink
Definition: precomp.h:69
DWORD SettingsCount
Definition: precomp.h:76
SETTINGS_ENTRY InitialSettings
Definition: precomp.h:80
PSETTINGS_ENTRY CurrentSettings
Definition: precomp.h:79
DWORD ResolutionsCount
Definition: precomp.h:78
DWORD DeviceStateFlags
Definition: precomp.h:74
LPWSTR DeviceID
Definition: precomp.h:73
LPWSTR DeviceDescription
Definition: precomp.h:70
PSETTINGS_ENTRY Settings
Definition: precomp.h:75
LPWSTR DeviceKey
Definition: precomp.h:72
LPWSTR DeviceName
Definition: precomp.h:71
LONG bmMonHeight
Definition: desk.h:164
LONG bmMonWidth
Definition: desk.h:163
COLORREF desktop_color
Definition: desk.h:159
HBITMAP hMonitorBitmap
Definition: desk.h:162
DWORD Flags
Definition: monslctl.h:19
POINT Position
Definition: monslctl.h:17
MONSL_MONNMHDR hdr
Definition: monslctl.h:41
DWORD dmPelsWidth
Definition: precomp.h:54
DWORD dmPelsHeight
Definition: precomp.h:55
int cxSource[NUM_SPECTRUM_BITMAPS]
Definition: settings.c:18
PDISPLAY_DEVICE_ENTRY CurrentDisplayDevice
Definition: settings.c:16
HBITMAP hSpectrumBitmaps[NUM_SPECTRUM_BITMAPS]
Definition: settings.c:17
int cySource[NUM_SPECTRUM_BITMAPS]
Definition: settings.c:19
PDISPLAY_DEVICE_ENTRY DisplayDeviceList
Definition: settings.c:15
Definition: precomp.h:59
DWORD dmPelsHeight
Definition: precomp.h:64
DWORD dmDisplayFrequency
Definition: desk.h:138
struct _SETTINGS_ENTRY * Flink
Definition: precomp.h:61
struct _SETTINGS_ENTRY * Blink
Definition: precomp.h:60
DWORD dmBitsPerPel
Definition: precomp.h:62
DWORD dmPelsWidth
Definition: precomp.h:63
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
INT nTimeout
Definition: settings.c:26
TCHAR szCookedBuffer[256]
Definition: settings.c:25
TCHAR szRawBuffer[256]
Definition: settings.c:24
DWORD dmBitsPerPel
Definition: wingdi.h:1647
DWORD dmFields
Definition: wingdi.h:1622
DWORD dmPelsWidth
Definition: wingdi.h:1648
WORD dmDriverExtra
Definition: wingdi.h:1621
DWORD dmPelsHeight
Definition: wingdi.h:1649
DWORD dmDisplayFrequency
Definition: wingdi.h:1654
WORD dmSize
Definition: wingdi.h:1620
Definition: uimain.c:89
Definition: copy.c:22
Definition: name.c:39
UINT code
Definition: winuser.h:3159
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830
uint16_t * PWSTR
Definition: typedefs.h:56
int32_t INT_PTR
Definition: typedefs.h:64
ULONG_PTR SIZE_T
Definition: typedefs.h:80
int32_t INT
Definition: typedefs.h:58
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
#define IN
Definition: typedefs.h:39
int32_t * PLONG
Definition: typedefs.h:58
#define MAKELONG(a, b)
Definition: typedefs.h:249
uint32_t ULONG
Definition: typedefs.h:59
#define HIWORD(l)
Definition: typedefs.h:247
#define OUT
Definition: typedefs.h:40
#define MAXLONG
Definition: umtypes.h:116
BOOL WINAPI GdiTransparentBlt(HDC hdcDst, int xDst, int yDst, int wDst, int hDst, HDC hdcSrc, int xSrc, int ySrc, int wSrc, int hSrc, UINT crTransparent)
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings
Definition: wdfdevice.h:2595
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
Definition: wdfdevice.h:3275
_In_ WDFREQUEST Request
Definition: wdfdevice.h:547
HDC hdcMem
Definition: welcome.c:104
BOOL WINAPI EnumDisplaySettingsExW(LPCWSTR lpszDeviceName, DWORD iModeNum, LPDEVMODEW lpDevMode, DWORD dwFlags)
Definition: display.c:330
#define ZeroMemory
Definition: winbase.h:1712
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ ULONG iMode
Definition: winddi.h:3520
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
const char * description
Definition: directx.c:2497
#define DM_DISPLAYFREQUENCY
Definition: wingdi.h:1272
#define HORZRES
Definition: wingdi.h:716
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
#define DM_PELSWIDTH
Definition: wingdi.h:1269
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
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)
#define SRCCOPY
Definition: wingdi.h:333
#define VERTRES
Definition: wingdi.h:717
#define DM_BITSPERPEL
Definition: wingdi.h:1268
#define PLANES
Definition: wingdi.h:721
#define CreateIC
Definition: wingdi.h:4446
#define BITSPIXEL
Definition: wingdi.h:720
#define DISPLAY_DEVICE_ATTACHED_TO_DESKTOP
Definition: wingdi.h:1396
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
#define DM_PELSHEIGHT
Definition: wingdi.h:1270
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
BOOL WINAPI DeleteDC(_In_ HDC)
struct tagDRAWITEMSTRUCT * LPDRAWITEMSTRUCT
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define CB_SELECTSTRING
Definition: winuser.h:1960
#define CB_SETITEMDATA
Definition: winuser.h:1966
#define SW_HIDE
Definition: winuser.h:768
#define MF_BYCOMMAND
Definition: winuser.h:202
#define IMAGE_BITMAP
Definition: winuser.h:211
#define DWLP_USER
Definition: winuser.h:872
#define WM_HSCROLL
Definition: winuser.h:1743
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define TPM_RIGHTBUTTON
Definition: winuser.h:2380
#define WM_COMMAND
Definition: winuser.h:1740
#define DISP_CHANGE_SUCCESSFUL
Definition: winuser.h:190
#define CB_ERR
Definition: winuser.h:2435
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE hInst, _In_ LPCWSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
Definition: cursoricon.c:2234
#define CB_RESETCONTENT
Definition: winuser.h:1959
#define CB_FINDSTRINGEXACT
Definition: winuser.h:1940
#define WM_INITDIALOG
Definition: winuser.h:1739
#define CDS_UPDATEREGISTRY
Definition: winuser.h:181
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define WM_DRAWITEM
Definition: winuser.h:1645
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
#define CBN_SELCHANGE
Definition: winuser.h:1979
#define DISP_CHANGE_FAILED
Definition: winuser.h:194
#define WM_SETTEXT
Definition: winuser.h:1617
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define ENUM_CURRENT_SETTINGS
Definition: winuser.h:179
#define WM_TIMER
Definition: winuser.h:1742
#define IDNO
Definition: winuser.h:836
#define CB_ADDSTRING
Definition: winuser.h:1936
struct tagNMHDR * LPNMHDR
#define CB_GETITEMDATA
Definition: winuser.h:1950
#define SendMessage
Definition: winuser.h:5843
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
HDC WINAPI GetDC(_In_opt_ HWND)
#define MB_OK
Definition: winuser.h:790
HWND WINAPI GetParent(_In_ HWND)
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define LoadString
Definition: winuser.h:5819
#define MessageBox
Definition: winuser.h:5822
#define MB_ICONINFORMATION
Definition: winuser.h:802
#define MB_ICONSTOP
Definition: winuser.h:803
#define LR_DEFAULTCOLOR
Definition: winuser.h:1087
#define BN_CLICKED
Definition: winuser.h:1925
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
#define WM_DESTROY
Definition: winuser.h:1609
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define IDYES
Definition: winuser.h:835
#define TPM_RETURNCMD
Definition: winuser.h:2387
#define DISP_CHANGE_RESTART
Definition: winuser.h:191
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
#define CB_GETCURSEL
Definition: winuser.h:1943
#define SendDlgItemMessage
Definition: winuser.h:5842
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define SetDlgItemText
Definition: winuser.h:5849
#define DialogBox
Definition: winuser.h:5761
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
#define MF_GRAYED
Definition: winuser.h:129
#define MF_DISABLED
Definition: winuser.h:130
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409
char TCHAR
Definition: xmlstorage.h:189
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
CHAR * LPTSTR
Definition: xmlstorage.h:192
#define _tcslen
Definition: xmlstorage.h:198