Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}