A wiec piszę procedurę własnej kontrolki. Mam w oknie tekst i chce zrobic zeby po kliknieciu go pojawil sie wokol niego niebieski prostokat a tekst zamienil sie na bialy, czy jest na to jakas specjalna metoda czy <ort>po prostu</ort> trzeba wszystko samemu opisac. Z tego co czytalem to chyba jest to powiazane z trybem wypełniania wielokątów ale czy isteniej taki, z gory dzieki za pomoc...
Nie porywasz się z motyką na słońce? ;)
- Jaką kontrolkę piszesz? Nikt nie jest tutaj jasnowidzem...
- Chodzi Ci o ramkę wokół kontrolki, czy wogól tekstu wewnątrz kontrolki, który może być częścią większej ilości tekstu (coś jak zaznaczenie)?? Czy jeszcze o coś innego???
- "Z trybem wypełniania wielokątów" ??? Ale o co chodzi? GDI?? OpenGL?? :)Prostokąt rysujesz przez FillRect() albo FrameRect() albo Rectangle() albo RoundRect(), ew. DrawFocusRect() oczywiście w WinAPI...
chodzi mi o zaznaczenie tekstu...
"porywam się z motyką na słońce" ? a czemu to niby, przeciez to nie jest wcale takie trudne, tym bardziej ze moja kontrolka jest bardzo prosta, tak wiec jak zaznaczyc tekst ?
chodzi mi o zaznaczenie tekstu...
"porywam się z motyką na słońce" ? a czemu to niby, przeciez to nie jest wcale takie trudne, tym bardziej ze moja kontrolka jest bardzo prosta, tak wiec jak zaznaczyc tekst ?
Taaa... ale co to za kontrolka? Subclassowany editbox??
Nie jest trudne..?
Czyli tak:
- Najpierw musisz uwzględniając aktualną pozycję tekstu w kontrolce, znaleźć położenie tekstu, który ktoś wybrał...Czyli obliczyć miejsce kliknięcia myszą, sprawdzić czy tam jest coś co może być zaznaczone, czy ktoś trafił w tekst w ogóle, itd.
- Następnie obliczyć wymiar zaznaczonego tekstu...
- Teraz musisz wiedzieć dokładnie w którym miejscu kontrolki jest rysowany zaznaczony tekst, chyba, że sam to robisz...
- Znając położenie i wymiar tekstu rysujesz w tym miejscu prostokąt(jaki chcesz), a następnie tekst, który tam ma być...
Dużo rzeczy zależy od tego czy sm rysujesz, czy po prostu wykorzystujesz kontrolki systemowe... Rysując samemu masz większą kontrolę ale więcej też się namęczysz...
hehe ja to wszystko juz zrobilem, niemow mi jak obliczyc polozenie zaznaczenia tylko jak odwrocic kolory, znalazlem funkcje InvertRect ale ona tlo zamienia na czarne a tekst na bialy a ja chcialbym zeby zamienialo tlo na niebieski.
aha i mam jeszcze pytanie jak obliczyc srednia szerokosc znaku dla czcionki MS San Serif. Bo podobno wynosi ona 3/2 tm.tmAveCharWidth, ale cos to nie gra...
hehe ja to wszystko juz zrobilem, niemow mi jak obliczyc polozenie zaznaczenia tylko jak odwrocic kolory, znalazlem funkcje InvertRect ale ona tlo zamienia na czarne a tekst na bialy a ja chcialbym zeby zamienialo tlo na niebieski.
Taaa... Niestety nadal nie wiem co ty napisałeś za kontrolkę...
Pomyśl logicznie: skoro odwracasz kolor bialy to dostajesz czarny. Jak chcesz mieć niebieski to odwróć odwrócony niebieski ;-P
Po raz trzeci: narysuj prostokąt w tym miejscu o zadanych kolorach, z ramką czy bez. Jeżeli bez ramki to wystarczy narysować tekst o innym kolorze tła... Chyba, że sam nie rysujesz tekstu w swojej kontrolce? Ale niestety tak się nie dogadamy skoro tylko Ty wiesz co rysujesz i jak...
aha i mam jeszcze pytanie jak obliczyc srednia szerokosc znaku dla czcionki MS San Serif. Bo podobno wynosi ona 3/2 tm.tmAveCharWidth, ale cos to nie gra...
Skoro podobne tyle wynosi to pewnie tak jest.
Pytanie tylko do czego ją stosujesz? Do obliczenia szerokości wyrazu pewnie? :/
nom cuz dobra sam sobie jakos odwroce te kolory, myslalem ze moze jest do tego jakas funkcja a sredniej szerokosci znaku bo chce na koncu tekstu wyswietlic ikonke...
...bo wymiar tekstu liczy:
GetTextExtentPoint32()
The GetTextExtentPoint32 function computes the width and height of the specified string of text.
ok juz wszystko dziarga ale mam bardzo dziwny problem. Choci mi o ikonki XP (z kanalem alpha) wczesniej wrzucalem ikonki do zasobow i nie wazne jak wyswietlalem wszystko bylo dobrze. Teraz gdy probuje wyswietlic ikonke to tlo w niej jest czarne (bez kanalu alpha). Jedynie ikonka na pasku tytulu jest poprawnie wyswietlana... co zrobilem zle ze teraz wszystko sie kopsa ?