Wcale nie było to takie oczywiste na samym początku. Oczywiście rozwiązanie jak zawsze jest proste i jak zwykle sprowadziło się do stworzenia własnej kontrolki. Tyle że to tworzenie było banalne i moją przeciążoną kontrolkę ciężko nazwać nową.
Kontrolki mają chronioną metodę WndProc, która odpowiada za obsługę systemowych zdarzeń jakie trafiają do kontrolki. Cała sztuczka polega na przeciążeniu metody. Robimy to jednak w taki sposób, że pozostaje pierwotna obsługa, ale w przypadku message'a Paint (0x0F) dostajemy wewnętrznie event Paint. Całość wygląda tak:
protected override void WndProc(ref System.Windows.Forms.Message m)
{
base.WndProc(ref m);
if(m.Msg == 0x0F)
OnPaint(new System.Windows.Forms.PaintEventArgs(CreateGraphics(), ClientRectangle));
}
To jest jedyna metoda jaka jest przeciążona w klasie. Oczywiście nie ma problemu aby rozwijać tę kontrolkę dalej dodając kolejne rozszerzenia.
Czytaj też:
Brak komentarzy:
Prześlij komentarz