bool FNT_HELPERS_API CloneWndFont(CWnd* ip_wnd, CFont* op_newFnt, LONG height, bool bold /*= false*/) { if (!ip_wnd || !op_newFnt) return false; CFont* p_font = ip_wnd->GetFont(); if (!p_font) return false; if (op_newFnt->m_hObject) op_newFnt->DeleteObject(); // Create font for 96 DPI. LOGFONT lf; p_font->GetLogFont(&lf); // Set other LOGFONT values as appropriate. lf.lfHeight = -MulDiv(height, 96, 72); lf.lfWeight = bold ? FW_BOLD : FW_NORMAL; CFont tmpFont; VERIFY(tmpFont.CreateFontIndirect(&lf)); // Scale the tmHeight; create target font. TEXTMETRIC tm; CDC *pDC = ip_wnd->GetDC(); CFont* fontOld = pDC->SelectObject(&tmpFont); pDC->GetTextMetrics(&tm); pDC->SelectObject(fontOld); tmpFont.DeleteObject(); ip_wnd->ReleaseDC(pDC); DPIAware da; lf.lfHeight = da.ScaleY(tm.tmHeight); op_newFnt->CreateFontIndirect(&lf); return true; }
BOOL CCheckEngineTabDlg::OnInitDialog() { Super::OnInitDialog(); m_quick_help_text.SetWindowText(MLL::LoadString(IDS_CEPAGE_QUICK_HELP_TEXT)); m_errors_list.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES | LVS_EX_GRIDLINES); //устанавливаем картинки состояния для чекбоксов... m_errors_list.SetImageList(&m_image_list, LVSIL_STATE); DPIAware dpia; m_errors_list.InsertColumn(0, MLL::LoadString(IDS_CEPAGE_ERROR_STATE), LVCFMT_LEFT, dpia.ScaleX(70)); m_errors_list.InsertColumn(1, _T("BC"), LVCFMT_LEFT, 35); m_errors_list.InsertColumn(2, MLL::LoadString(IDS_CEPAGE_ERROR_DESCRIPTION), LVCFMT_LEFT, 450); SetTimer(TIMER_ID,250,NULL); ResetErrorsList(); m_header_ctrl->Init(m_errors_list.GetHeaderCtrl()); m_header_ctrl->SetTextColor(m_gray_text_color); UpdateDialogControls(this,TRUE); return TRUE; // return TRUE unless you set the focus to a control }
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; //устанавливаем позицию главного окна запомненную ранее, если это возможно if (m_OnGetInitialPos) { CPoint point; m_OnGetInitialPos(point); if (point.x != std::numeric_limits<int>::max() && point.y != std::numeric_limits<int>::max()) { cs.x = point.x; cs.y = point.y; } } //устанавливаем необходимый размер главного окна. Windows непонятным образо м масштабирует диалоги (непропорционально DPI), поэтому //для каждого DPI подгоняем размеры DPIAware dpia; switch(dpia.GetDPIX()) { case 72: cs.cx = dpia.ScaleX(965); break; default: case 96: cs.cx = dpia.ScaleX(730); //OK break; case 120: cs.cx = dpia.ScaleX(765); break; case 144: cs.cx = dpia.ScaleX(795); //OK break; case 192: cs.cx = dpia.ScaleX(730); break; } switch(dpia.GetDPIY()) { case 72: cs.cy = dpia.ScaleY(580); break; default: case 96: cs.cy = dpia.ScaleY(455); break; } cs.style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX; cs.dwExStyle &= ~WS_EX_CLIENTEDGE; cs.dwExStyle |= WS_EX_CONTROLPARENT; cs.lpszClass = AfxRegisterWndClass(0); return TRUE; }