/** * Handle resizing of the container. This implementation will lay out * full-sized controls like list boxes for any screen size, and will layout * labels, editors, etc. to the size they were given in the UI designer. * This code will need to be modified to adjust arbitrary controls to * any screen size. */ void CHelloCarbide2ndGUIContainer::SizeChanged() { CCoeControl::SizeChanged(); LayoutControls(); // [[[ begin generated region: do not modify [Generated Contents] // ]]] end generated region [Generated Contents] }
/** * Handle resizing of the container. This implementation will lay out * full-sized controls like list boxes for any screen size, and will layout * labels, editors, etc. to the size they were given in the UI designer. * This code will need to be modified to adjust arbitrary controls to * any screen size. */ void CPluginsList::SizeChanged() { CCoeControl::SizeChanged(); LayoutControls(); // [[[ begin generated region: do not modify [Generated Contents] // ]]] end generated region [Generated Contents] }
/** * Handle resizing of the container. This implementation will lay out * full-sized controls like list boxes for any screen size, and will layout * labels, editors, etc. to the size they were given in the UI designer. * This code will need to be modified to adjust arbitrary controls to * any screen size. */ void CCalendarManagerContainer::SizeChanged() { CCoeControl::SizeChanged(); LayoutControls(); // [[[ begin generated region: do not modify [Generated Contents] // ]]] end generated region [Generated Contents] if (g_BgContext) { g_BgContext->SetRect(Rect()); if (&Window()) { g_BgContext->SetParentPos(PositionRelativeToScreen()); } } DrawNow(); }
void CTaskDialog::LayoutWindow(void) { // customize post-creation window styles EnableSystemClose(HasFlag(TDF_ALLOW_DIALOG_CANCELLATION)); // create and position controls GenerateControlIDs(); LayoutControls(); SetFontControls(); SetZOrderControls(); // update various graphical items UpdateMainIcon(MainIcon()); UpdateWindowTitle(WindowTitle()); UpdateFooterIcon(FooterIcon()); // set the keyboard focus to the default button // and select the default radio button SetControlFocus(config_.iDefaultButton); if (!HasFlag(TDF_NO_DEFAULT_RADIO_BUTTON) && config_.nDefaultRadioButton != 0) CheckDlgButton(config_.nDefaultRadioButton, BST_CHECKED); // position dialog if (HasFlag(TDF_POSITION_RELATIVE_TO_WINDOW)) CenterWindow(Parent()); else CenterWindow(::GetDesktopWindow()); if (HasFlag(TDF_CALLBACK_TIMER)) CreateCallbackTimer(); Callback(TDN_DIALOG_CONSTRUCTED); }
LRESULT CALLBACK FWindowsNativeFeedbackContext::SlowTaskWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { switch (Msg) { case WM_COMMAND: if(wParam == ShowLogCtlId) { FWindowParams *Params = (FWindowParams*)GetWindowLongPtr(hWnd, GWLP_USERDATA); Params->bLogVisible ^= true; RECT WindowRect; GetClientRect(hWnd, &WindowRect); WindowRect.bottom = Params->StandardH + (Params->bLogVisible? Params->ScaleY * 10 : 0); AdjustWindowRectEx(&WindowRect, GetWindowLong(hWnd, GWL_STYLE), 0, 0); SetWindowPos(hWnd, NULL, 0, 0, WindowRect.right - WindowRect.left, WindowRect.bottom - WindowRect.top, SWP_NOZORDER | SWP_NOMOVE); SetDlgItemText(hWnd, ShowLogCtlId, Params->bLogVisible? TEXT("Hide log") : TEXT("Show log")); ShowWindow(GetDlgItem(hWnd, LogOutputCtlId), Params->bLogVisible? SW_SHOW : SW_HIDE); LayoutControls(hWnd, Params); } return 0; case WM_SIZE: { FWindowParams *Params = (FWindowParams*)GetWindowLongPtr(hWnd, GWLP_USERDATA); if(Params != NULL) { LayoutControls(hWnd, Params); } } return 0; case WM_GETMINMAXINFO: { FWindowParams *Params = (FWindowParams*)GetWindowLongPtr(hWnd, GWLP_USERDATA); if(Params != NULL) { RECT WindowRect; SetRect(&WindowRect, 0, 0, Params->StandardW, Params->StandardH + (Params->bLogVisible? (Params->ScaleY * 5) : 0)); AdjustWindowRectEx(&WindowRect, WS_CAPTION, 0, 0); MINMAXINFO *MinMaxInfo = (MINMAXINFO*)lParam; MinMaxInfo->ptMinTrackSize.x = WindowRect.right - WindowRect.left; MinMaxInfo->ptMinTrackSize.y = WindowRect.bottom - WindowRect.top; if(!Params->bLogVisible) { MinMaxInfo->ptMaxTrackSize.y = MinMaxInfo->ptMinTrackSize.y; } } } return 0; case WM_CLOSE: { FWindowParams *Params = (FWindowParams*)GetWindowLongPtr(hWnd, GWLP_USERDATA); FScopeLock Lock(&Params->Context->CriticalSection); Params->Context->bReceivedUserCancel = true; } return 0; } return DefWindowProc(hWnd, Msg, wParam, lParam); }
DWORD FWindowsNativeFeedbackContext::SlowTaskThreadProc(void* ThreadParam) { FWindowsNativeFeedbackContext* Context = (FWindowsNativeFeedbackContext*)ThreadParam; HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL); WNDCLASSEX WndClassEx; ZeroMemory(&WndClassEx, sizeof(WndClassEx)); WndClassEx.cbSize = sizeof(WndClassEx); WndClassEx.style = CS_HREDRAW | CS_VREDRAW | (Context->bShowCancelButton? 0 : CS_NOCLOSE); WndClassEx.lpfnWndProc = &SlowTaskWindowProc; WndClassEx.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(FWindowsPlatformMisc::GetAppIcon())); WndClassEx.hCursor = LoadCursor(NULL, IDC_ARROW); WndClassEx.hInstance = hInstance; WndClassEx.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); WndClassEx.lpszClassName = TEXT("FFeedbackContextWindows"); ATOM WndClassAtom = RegisterClassEx(&WndClassEx); NONCLIENTMETRICS NonClientMetrics; NonClientMetrics.cbSize = sizeof(NonClientMetrics); SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NonClientMetrics), &NonClientMetrics, 0); HANDLE hFont = CreateFontIndirect(&NonClientMetrics.lfMessageFont); int FontHeight = -MulDiv(8, GetDeviceCaps(GetDC(NULL), LOGPIXELSY), 72); HANDLE hLogFont = CreateFont(FontHeight, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, FIXED_PITCH | FF_MODERN, TEXT("Courier New")); TEXTMETRIC TextMetric; HDC hDC = CreateCompatibleDC(NULL); HGDIOBJ hPrevObj = SelectObject(hDC, hFont); GetTextMetrics(hDC, &TextMetric); SelectObject(hDC, hPrevObj); DeleteDC(hDC); FWindowParams Params; Params.Context = Context; Params.ScaleX = TextMetric.tmAveCharWidth; Params.ScaleY = TextMetric.tmHeight; Params.StandardW = Params.ScaleX * 80; Params.StandardH = Params.ScaleY * 4; Params.bLogVisible = false; DWORD WindowStyle = WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME; RECT WindowRect; ZeroMemory(&WindowRect, sizeof(WindowRect)); WindowRect.left = (GetSystemMetrics(SM_CXSCREEN) - Params.StandardW) / 2; WindowRect.top = (GetSystemMetrics(SM_CYSCREEN) - Params.StandardH) / 2; WindowRect.right = WindowRect.left + Params.StandardW; WindowRect.bottom = WindowRect.top + Params.StandardH; AdjustWindowRectEx(&WindowRect, WindowStyle, 0, 0); const TCHAR* WindowClassName = MAKEINTATOM( WndClassAtom ); HWND hWnd = CreateWindow(WindowClassName, TEXT("Unreal Engine"), WindowStyle, WindowRect.left, WindowRect.top, WindowRect.right - WindowRect.left, WindowRect.bottom - WindowRect.top, NULL, NULL, hInstance, NULL); SetWindowLongPtr(hWnd, GWLP_USERDATA, (LONG_PTR)&Params); SendMessage(hWnd, WM_SETFONT, (WPARAM)hFont, 0); HWND hWndOpenLog = CreateWindow(WC_BUTTON, TEXT("Show log"), BS_CENTER | BS_VCENTER | BS_PUSHBUTTON | BS_TEXT | WS_CHILD | WS_VISIBLE, 10, 10, 10, 10, hWnd, (HMENU)ShowLogCtlId, hInstance, NULL); SendMessage(hWndOpenLog, WM_SETFONT, (WPARAM)hFont, 0); HWND hWndStatus = CreateWindow(WC_STATIC, TEXT(""), SS_CENTER | WS_CHILD | WS_VISIBLE, 10, 10, 10, 10, hWnd, (HMENU)StatusCtlId, hInstance, NULL); SendMessage(hWndStatus, WM_SETFONT, (WPARAM)hFont, 0); HWND hWndProgress = CreateWindowEx(0, PROGRESS_CLASS, TEXT(""), WS_CHILD | WS_VISIBLE, 10, 10, 10, 10, hWnd, (HMENU)ProgressCtlId, hInstance, NULL); SendMessage(hWndProgress, PBM_SETRANGE32, 0, 1000); HWND hWndLogOutput = CreateWindowEx(WS_EX_STATICEDGE, WC_EDIT, TEXT(""), ES_MULTILINE | ES_READONLY | WS_HSCROLL | WS_VSCROLL | WS_CHILD | WS_VISIBLE, 10, 10, 10, 10, hWnd, (HMENU)LogOutputCtlId, hInstance, NULL); SendMessage(hWndLogOutput, WM_SETFONT, (WPARAM)hLogFont, 0); LayoutControls(hWnd, &Params); SetEvent(Context->hUpdateEvent); ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); SetForegroundWindow(hWnd); FString PrevStatus; float PrevProgress = 0.0f; int32 PrevLogOutputLength = 0; for(;;) { HANDLE Handles[] = { Context->hCloseEvent, Context->hUpdateEvent }; DWORD Result = MsgWaitForMultipleObjects(2, Handles, 0, INFINITE, QS_ALLEVENTS); if(Result == WAIT_OBJECT_0) { break; } else if(Result == WAIT_OBJECT_0 + 1) { FScopeLock Lock(&Context->CriticalSection); if(Context->Status != PrevStatus) { SetWindowText(hWndStatus, *Context->Status); PrevStatus = Context->Status; } if(Context->Progress != PrevProgress) { SendMessage(hWndProgress, PBM_SETPOS, (int32)(Context->Progress * 1000.0f), 0); PrevProgress = Context->Progress; } if(Context->LogOutput.Len() > PrevLogOutputLength) { SendMessage(hWndLogOutput, EM_SETSEL, PrevLogOutputLength, PrevLogOutputLength); SendMessage(hWndLogOutput, EM_REPLACESEL, FALSE, (LPARAM)(*Context->LogOutput + PrevLogOutputLength)); SendMessage(hWndLogOutput, EM_SCROLLCARET, 0, 0); PrevLogOutputLength = Context->LogOutput.Len(); } } MSG Msg; while(PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } } DestroyWindow(hWnd); DeleteObject(hLogFont); DeleteObject(hFont); UnregisterClass(WindowClassName, hInstance); return 0; }
//----------------------------------------------------------------------- // This callback will run every time the window created/changed it's size. // We will use it to position all controls on our page. //----------------------------------------------------------------------- void CQAParams::OnSize(UINT nType, int cx, int cy) { CFormView::OnSize(nType, cx, cy); LayoutControls(cx,cy); }
/** * Handle resizing of the container. This implementation will lay out * full-sized controls like list boxes for any screen size, and will layout * labels, editors, etc. to the size they were given in the UI designer. * This code will need to be modified to adjust arbitrary controls to * any screen size. */ void CNPRListBox::SizeChanged() { CCoeControl::SizeChanged(); LayoutControls(); }