Wskaźnik this jest wskaźnikiem na konkretną instancje klasy, jeżeli zrobisz dwa obiekty A i B to każdy z nich posiada swój wskaźnik this, który wskazuje na samego siebie, ale to zapewne wiesz, jeżeli chodzi o to kiedy go należy używać odpowiedź jest prosta - nie używaj nigdzie poza sytuacjami w której jest to konieczne, np. gdy parametr funkcji ma taką samą nazwe jak jedna z jej składowych :
class A
{
int x;
int func(int& x)
{
x = 5;
}
}
Jak myślisz w tym wypadku, do której zmiennej x zapiszemy wartość 5 ? Tak, do tej którą przekazujemy do funkcji, aby zmienić x należącego do klasy A należy użyć wskaźnika this, (this->x = 5). W 99% innych sytuacji będzie on tylko zaciemniał kod. Oczywiscie jak funkcja nie przyjmuje parametru o takiej samej nazwie jak jedna z jej składowych to wskaźnik this jest niepotrzebny (ba, kompilator sam sobie go dopisze, więc nie musisz wgl o nim myśleć :P)
Inny przykład, czasami potrzebujemy zwrócić konkretną instancje klasy np. przy przeciążaniu operatorów :
Foo & operator++()
{
++i;
return *this;
}
W twoim przykładzie 2 pierwsze wywołania w ostateczności po kompilacji będą dokładnie tym samym, kompilator dopisze this tam gdzie potrzeba (obiekt GButton musi oczywiście posiadać metode SetPos), 3 wywołanie GButton::SetPos(posx, posy); raczej służy do wywoływania statycznych metod gdzieś poza klasą lub metod klas bazowych wewnątrz danej klasy :)