INT_PTR CALLBACK DisplayDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { PINFO pInfo = (PINFO)GetWindowLongPtrW(hDlg, GWLP_USERDATA); switch (message) { case WM_INITDIALOG: DisplayOnInit(hDlg, (PINFO)lParam); return TRUE; case WM_DRAWITEM: { LPDRAWITEMSTRUCT lpDrawItem; lpDrawItem = (LPDRAWITEMSTRUCT) lParam; if(lpDrawItem->CtlID == IDC_COLORIMAGE) { HDC hdcMem; HBITMAP hSpecOld; hdcMem = CreateCompatibleDC(lpDrawItem->hDC); if (hdcMem != NULL) { hSpecOld = SelectObject(hdcMem, pInfo->hSpectrum); StretchBlt(lpDrawItem->hDC, lpDrawItem->rcItem.left, lpDrawItem->rcItem.top, lpDrawItem->rcItem.right - lpDrawItem->rcItem.left, lpDrawItem->rcItem.bottom - lpDrawItem->rcItem.top, hdcMem, 0, 0, pInfo->bitmap.bmWidth, pInfo->bitmap.bmHeight, SRCCOPY); SelectObject(hdcMem, hSpecOld); DeleteDC(hdcMem); } } break; } case WM_HSCROLL: { switch (LOWORD(wParam)) { case TB_LINEUP: case TB_LINEDOWN: case TB_PAGEUP: case TB_PAGEDOWN: case TB_TOP: case TB_BOTTOM: case TB_ENDTRACK: { INT newPosition = (DWORD)SendDlgItemMessageW(hDlg, IDC_GEOSLIDER, TBM_GETPOS, 0, 0); OnResolutionChanged(pInfo, newPosition); break; } case TB_THUMBTRACK: OnResolutionChanged(pInfo, HIWORD(wParam)); 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; } return 0; }
//---------------------------------------------------------- //---------------------------------------------------------- void Screen::SetResolution(const ChilliSource::Integer2& in_size) { SFMLWindow::Get()->SetSize(in_size); OnResolutionChanged(in_size); }
static VOID ReLoadDisplayPage(PINFO pInfo) { DWORD index; INT width, height, pos = 0; INT bpp, num, i, screenmode; BOOL bSet = FALSE; /* get fullscreen info */ screenmode = GetIntegerFromSettings(pInfo->pRdpSettings, L"screen mode id"); /* set trackbar position */ width = GetIntegerFromSettings(pInfo->pRdpSettings, L"desktopwidth"); height = GetIntegerFromSettings(pInfo->pRdpSettings, L"desktopheight"); if (width != -1 && height != -1) { if(screenmode == 2) { pos = SendDlgItemMessageW(pInfo->hDisplayPage, IDC_GEOSLIDER, TBM_GETRANGEMAX, 0, 0); } else { for (index = 0; index < pInfo->CurrentDisplayDevice->ResolutionsCount; index++) { if (pInfo->CurrentDisplayDevice->Resolutions[index].dmPelsWidth == width && pInfo->CurrentDisplayDevice->Resolutions[index].dmPelsHeight == height) { pos = index; break; } } } } /* set slider position */ SendDlgItemMessageW(pInfo->hDisplayPage, IDC_GEOSLIDER, TBM_SETPOS, TRUE, pos); OnResolutionChanged(pInfo, pos); /* set color combo */ bpp = GetIntegerFromSettings(pInfo->pRdpSettings, L"session bpp"); num = SendDlgItemMessageW(pInfo->hDisplayPage, IDC_BPPCOMBO, CB_GETCOUNT, 0, 0); for (i = 0; i < num; i++) { INT data = SendDlgItemMessageW(pInfo->hDisplayPage, IDC_BPPCOMBO, CB_GETITEMDATA, i, 0); if (data == bpp) { SendDlgItemMessageW(pInfo->hDisplayPage, IDC_BPPCOMBO, CB_SETCURSEL, i, 0); bSet = TRUE; break; } } if (!bSet) { SendDlgItemMessageW(pInfo->hDisplayPage, IDC_BPPCOMBO, CB_SETCURSEL, num - 1, 0); } }
/* Property page dialog callback */ INT_PTR CALLBACK SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam) { PDATA pData; TCHAR Message[1024], Title[256]; pData = (PDATA)GetWindowLongPtr(hwndDlg, DWLP_USER); switch(uMsg) { case WM_INITDIALOG: { OnInitDialog(hwndDlg); break; } case WM_DRAWITEM: { LPDRAWITEMSTRUCT lpDrawItem; lpDrawItem = (LPDRAWITEMSTRUCT) lParam; if (lpDrawItem->CtlID == IDC_SETTINGS_SPECTRUM) ShowColorSpectrum(lpDrawItem->hDC, &lpDrawItem->rcItem, pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel, pData); break; } case WM_COMMAND: { DWORD controlId = LOWORD(wParam); DWORD command = HIWORD(wParam); if (controlId == IDC_SETTINGS_ADVANCED && command == BN_CLICKED) DisplayAdvancedSettings(hwndDlg, pData->CurrentDisplayDevice); else if (controlId == IDC_SETTINGS_BPP && command == CBN_SELCHANGE) OnBPPChanged(hwndDlg, pData); break; } case WM_HSCROLL: { switch (LOWORD(wParam)) { 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(hwndDlg, IDC_SETTINGS_RESOLUTION, TBM_GETPOS, 0, 0); OnResolutionChanged(hwndDlg, pData, newPosition, TRUE); break; } case TB_THUMBTRACK: OnResolutionChanged(hwndDlg, pData, HIWORD(wParam), FALSE); break; } break; } case WM_NOTIFY: { LPNMHDR lpnm = (LPNMHDR)lParam; if (lpnm->code == (UINT)PSN_APPLY) { if (pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth != pData->CurrentDisplayDevice->InitialSettings.dmPelsWidth || pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight != pData->CurrentDisplayDevice->InitialSettings.dmPelsHeight || pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel != pData->CurrentDisplayDevice->InitialSettings.dmBitsPerPel) { /* FIXME: Need to test changes */ /* Apply new settings */ LONG rc; DEVMODE devmode; RtlZeroMemory(&devmode, sizeof(DEVMODE)); devmode.dmSize = (WORD)sizeof(DEVMODE); devmode.dmPelsWidth = pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth; devmode.dmPelsHeight = pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight; devmode.dmBitsPerPel = pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel; devmode.dmDisplayFrequency = pData->CurrentDisplayDevice->CurrentSettings->dmDisplayFrequency; devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY; rc = ChangeDisplaySettingsEx( pData->CurrentDisplayDevice->DeviceName, &devmode, NULL, CDS_UPDATEREGISTRY, NULL); switch (rc) { case DISP_CHANGE_SUCCESSFUL: pData->CurrentDisplayDevice->InitialSettings.dmPelsWidth = pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth; pData->CurrentDisplayDevice->InitialSettings.dmPelsHeight = pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight; pData->CurrentDisplayDevice->InitialSettings.dmBitsPerPel = pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel; break; case DISP_CHANGE_RESTART: LoadString(hApplet, IDS_DISPLAY_SETTINGS, Title, sizeof(Title) / sizeof(TCHAR)); LoadString(hApplet, IDS_APPLY_NEEDS_RESTART, Message, sizeof(Message) / sizeof (TCHAR)); MessageBox(hwndDlg, Message, Title, MB_OK | MB_ICONINFORMATION); break; case DISP_CHANGE_FAILED: default: LoadString(hApplet, IDS_DISPLAY_SETTINGS, Title, sizeof(Title) / sizeof(TCHAR)); LoadString(hApplet, IDS_APPLY_FAILED, Message, sizeof(Message) / sizeof (TCHAR)); MessageBox(hwndDlg, Message, Title, MB_OK | MB_ICONSTOP); break; } } } break; } case WM_CONTEXTMENU: { HWND hwndMonSel; HMENU hPopup; UINT uiCmd; POINT pt, ptClient; INT Index; pt.x = (SHORT)LOWORD(lParam); pt.y = (SHORT)HIWORD(lParam); hwndMonSel = GetDlgItem(hwndDlg, IDC_SETTINGS_MONSEL); if ((HWND)wParam == hwndMonSel) { if (pt.x == -1 && pt.y == -1) { RECT rcMon; Index = (INT)SendMessage(hwndMonSel, MSLM_GETCURSEL, 0, 0); if (Index >= 0 && (INT)SendMessage(hwndMonSel, MSLM_GETMONITORRECT, Index, (LPARAM)&rcMon) > 0) { pt.x = rcMon.left + ((rcMon.right - rcMon.left) / 2); pt.y = rcMon.top + ((rcMon.bottom - rcMon.top) / 2); } else pt.x = pt.y = 0; MapWindowPoints(hwndMonSel, NULL, &pt, 1); } else { ptClient = pt; MapWindowPoints(NULL, hwndMonSel, &ptClient, 1); Index = (INT)SendMessage(hwndMonSel, MSLM_HITTEST, (WPARAM)&ptClient, 0); } if (Index >= 0) { hPopup = LoadPopupMenu(hApplet, MAKEINTRESOURCE(IDM_MONITOR_MENU)); if (hPopup != NULL) { /* FIXME: Enable/Disable menu items */ EnableMenuItem(hPopup, ID_MENU_ATTACHED, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); EnableMenuItem(hPopup, ID_MENU_PRIMARY, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); EnableMenuItem(hPopup, ID_MENU_IDENTIFY, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); EnableMenuItem(hPopup, ID_MENU_PROPERTIES, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); uiCmd = (UINT)TrackPopupMenu(hPopup, TPM_RETURNCMD | TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwndDlg, NULL); switch (uiCmd) { case ID_MENU_ATTACHED: case ID_MENU_PRIMARY: case ID_MENU_IDENTIFY: case ID_MENU_PROPERTIES: /* FIXME: Implement */ break; } DestroyMenu(hPopup); } } } break; } case WM_DESTROY: { DWORD i; PDISPLAY_DEVICE_ENTRY Current = pData->DisplayDeviceList; while (Current != NULL) { PDISPLAY_DEVICE_ENTRY Next = Current->Flink; PSETTINGS_ENTRY CurrentSettings = Current->Settings; while (CurrentSettings != NULL) { PSETTINGS_ENTRY NextSettings = CurrentSettings->Flink; HeapFree(GetProcessHeap(), 0, CurrentSettings); CurrentSettings = NextSettings; } HeapFree(GetProcessHeap(), 0, Current); Current = Next; } for (i = 0; i < NUM_SPECTRUM_BITMAPS; i++) { if (pData->hSpectrumBitmaps[i]) DeleteObject(pData->hSpectrumBitmaps[i]); } HeapFree(GetProcessHeap(), 0, pData); } } return FALSE; }