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í