Hlavnφ
Hlavnφ strana
Seznam Φlßnk∙
NejΦten∞jÜφ Φlßnky
Progres e-mailem
Visual C++ FAQ

Serißly
COM
ISAPI

banner2.gif (2546 bytes)

Nenechte si ujφt
NeobdΘlnφkovß okna
Tisk bez Preview
MFC a DLL
Logo v MDI ploÜe
Kouzla s kombo-boxem
V²jimky v C++

banner.gif (3305 bytes)

Kreslenφ do titulku okna Jan Odvßrko
13.10.1999
[Hlavnφ strßnka]  |  [Rubrika]  |  [Download]

Kreslenφ do titulku okna je mΘ≥∞ Φasto pou₧φvan², avÜak o to zajφmav∞jÜφ programßtorsk² problΘm. Titulek okna je zajiÜt∞n stylem WM_CAPTION a p°edstavuje specißlnφ ne-klientskou plochu, do kterΘ lze libovoln∞ kreslit. Grafick² v²stup do titulku okna se provßdφ v reakci na Φty°i zprßvy: WM_NCPAINT, WM_NCACTIVATE, WM_SETTEXT a WM_SYSCOMMAND. Pokud pot°ebujeme vykreslit dalÜφ informaci, p°edßme zprßvy standardnφ okΘnkovΘ procedu°e, potΘ pomocφ specißlnφho kontextu kreslφme. Podφvejme se na nßsledujφcφ metodu, kterß vypisuje do titulku okna text.

void CDrawCaptionDlg::DrawCaption()
{
  CWindowDC dc(this);

  CRect rcWindow;
  GetWindowRect(&rcWindow);

  // V²poΦet polohy titulku.
  int x = ::GetSystemMetrics(SM_CXSIZE) +
      ::GetSystemMetrics(SM_CXBORDER) +
      ::GetSystemMetrics(SM_CXFRAME);

  int y = ::GetSystemMetrics(SM_CYFRAME);

  CRect rcCaption(x, y, rcWindow.right - rcWindow.left
    - 2 * x - ::GetSystemMetrics(SM_CXFRAME),
    ::GetSystemMetrics(SM_CYSIZE));

  // Vypsßnφ textu do titulku okna.
  dc.SetBkMode(TRANSPARENT);
  dc.SetTextColor(RGB(255255255));
  dc.DrawText("Ahoj sv∞te"&rcCaption, DT_RIGHT);
}

Pomocφ t°φdy CWindowDC zφskßme specißlnφ kreslicφ kontext, kter² nßm umo₧≥uje kreslit do ne-klientskΘ plochy (tj, mimo klientskou plochu) okna. Tato t°φda stejn∞ jako CClientDC d∞dφ ze t°φdy CDC a jejφ pou₧itφ je tedy stejnΘ. Metodou GetWindowRect zφskßme obrazovkovΘ sou°adnice okna, ketrΘ pozd∞ji pou₧ijeme pro v²poΦet polohy titulku. DalÜφ metodou, kterß je p°edchozφ ukßzce pou₧ita je GetSystemMetrics. Tato metoda slou₧φ pro zjiÜ¥ovßnφ systΘmov²ch rozm∞r∙ (v pixlech), kterΘ identifikujeme parametrem. Vypsßnφ textu pak provedeme jednoduÜe pomocφ metody DrawText, p°ed jejφ₧ volßnφm jeÜt∞ nastavφme pr∙hlednost a barvu.

Volßnφ p°edchozφ funkce pak budeme provßd∞t v reakci na vÜechny zmφn∞nΘ zprßvy, ve kter²ch se manipuluje s obsahem titulku. Nßsledujφcφ k≤d ukazuje implementaci metody WindowProc.

LRESULT CDrawCaptionDlg::WindowProc(UINT message,
  WPARAM wParam, LPARAM lParam) 
{
  LRESULT lResult =  CDialog::WindowProc(message,
	wParam, lParam);

  switch (message)
  {
  case WM_NCPAINT:
  case WM_NCACTIVATE:
  case WM_SETTEXT:
  case WM_SYSCOMMAND:
    DrawCaption();
    break;
  }

  return lResult;
}

jo_04101999_drawcaption_obr1.gif (2367 bytes)

 

 


PodobnΘ Φlßnky:

Kdo Otßzka nebo p°ipomφnka

Prohlφ₧enφ p°φsp∞vk∙ nebo nov² p°φsp∞vek

O firm∞... Kontakt Ostatnφ