[C++] Forms 'Sticky' maken (winamp like)

Pagina: 1
Acties:

  • JochemK
  • Registratie: Maart 2003
  • Laatst online: 06-02 11:55
Ik ben op zoek naar een (gratis) manier om in BCB 6 de formulieren van mijn applicatie sticky te maken, net zoals in Winamp.

Ik heb hier op CodeGuru het volgende voor gevonden:

http://www.codeguru.com/C...g/article.php/c4589/#more

maar dit is geschreven voor VC en daar staan dingen in waar ik niets mee kan.

Ook heb ik op CodeProject het volgende gevonden

http://www.codeproject.com/csharp/stickywindows.asp

Maar dit is weer geschreven in C# waar ik al helemaal niks mee kan.

Is er iemand die hier al een FW component voor heeft, of die de moeite wil nemen om de boel om te schrijven / mij uit te leggen hoe ik de boel om kan schrijven?

Verwijderd

Aannemende dat je VCL gebruikt zou je op zoek kunnen gaan naar Delphi componenten. Als je de source hebt dan is dat waarschijnlijk snel herschreven naar BCB6. Maar ik kan je nu al bijna verzekeren dat zo'n verzoek niet zal worden ingewilligd op GoT. Zelf mag je het herschrijven, wij kunnen je helpen als je iets niet begrijpt.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 21:33
Het is in principe heel simpel. Tijdens het verplaatsen van het venster krijg je WM_MOVING messages, die als argument een rechthoek geven waar het venster nu staat, en die je applicatie mag aanpassen om een andere positie door te geven. Je hoeft dus alleen coördinaten die vlakbij de randen van andere vensters zitten, op de rand te zetten.

Hoe je dat precies doet, daar mag je zelf mee gaan puzzelen. Aan de randen van het scherm plakken is vrij makkelijk; Winamp is vrij geavanceerd, dus voor je dat gevenaard hebt ben je wel een paar uurtjes verder.

Voordeel is wel dat de code die je maakt, goed herbruikbaar is, omdat je alleen maar je herpositioneringsfunctie aan hoept te roepen als respons op een WM_MOVING message.

[ Voor 11% gewijzigd door Soultaker op 20-07-2006 16:58 ]


  • JochemK
  • Registratie: Maart 2003
  • Laatst online: 06-02 11:55
Zelf herschrijven is ook geen probleem, alleen heb ik geen idee waar te beginnen. Het werken met System Calls is nieuw voor mij, en in de code van de eerste ( http://www.codeguru.com/C...g/article.php/c4589/#more ) worden een paar headers geinclude die ik helemaal niet heb. Ik verwacht dat die bij VC horen, maar daar heb ik dus geen beschikking over.

  • JochemK
  • Registratie: Maart 2003
  • Laatst online: 06-02 11:55
Soultaker schreef op donderdag 20 juli 2006 @ 16:57:
Voordeel is wel dat de code die je maakt, goed herbruikbaar is, omdat je alleen maar je herpositioneringsfunctie aan hoept te roepen als respons op een WM_MOVING message.
Als ik het goed begrijp kan ik dus gewoon een functie maken, die er ongeveer zo uitziet:

code:
1
2
3
void reposition_form(hwnd form_that_is_moving, hwnd form_to_stick_to, int offset)
{
}


waarbij je checkt of form_that_is_moving minder dan offset verwijderd is van form_to_stick_to en als dat zo is je ga je 'm verplaatsen zodat ie er tegenaan staat.

Ik zal dit idee ens proberen uit te werken, en als ik er enig resultaat mee boek dat natuurlijk weer hier posten.

Is het trouwens ook mogelijk om dit soort gedrag in een non-visual component in te bouwen, zodat ik in het vervolg alleen maar dat componentje op m'n formulier hoef te laten vallen en ik het gewenste gedrag bereik?