Autor Wątek: [WinAPI] Podwójne buforowanie  (Przeczytany 10356 razy)

Offline Lobsang Rampa

  • Użytkownik
    • Global Epidemic

# Styczeń 17, 2014, 20:03:21
Zaciekawiliście mnie tym Regex-em, wcześniej wyrażenia regularne kojarzyły mi się tylko z Boostem i operacjami na stringach. Okazuje się, że w C::B też jest domyślnie zainstalowany plugin obsługujący Regex, jednak widzę, że jest to narzędzie mało przyjazne w obsłudze, właśnie przez wspomnianą przez Xiona konieczność formułowania odpowiednich "zaklęć". Niby do nauczenia i opanowania, ale czy warto na to tracić czas.


Wielokrotne kursory to jakby wizualny interfejs do regexowego Find & Replace, z uaktualnianiem tekstu w czasie rzeczywistym. Zamiast pamiętać, że $ pasuje do końca linijki, można po prostu wcisnąć End. Albo Home zamiast ^. Albo używać Ctrl+strzałek do poruszania się między słowami, itp. itd. Mimo że komendy będą dla każdego kursora takie same, w każdym przypadku będzie się on poruszał inaczej, zależnie od lokalnego kontekstu. Żeby osiągnąć ten sam efekt w przypadku regexów, trzeba by sporo tego kontekstu wciągnąć do wyrażenia.
Tylko pozostaje kwestia ustawienia pozycji tego wielokursora, w C::B z tego co widzę, trzeba ręcznie zaznaczać fragmenty kodu korzystając z włączonego "multiple selections" i można edytować w wielu miejscach na raz. Jednak konieczność ręcznego ustawiania punktów edycji jest kłopotliwa przy dużej ich ilości. Wolałbym mieć możliwość ustawienia wielokursora np. przy wszystkich wystąpieniach jakiegoś wyrażenia w całym pliku.

A jak się ustawia pozycję wielokursora u Was w VS ? ręcznie czy za pomocą jakiegoś narzędzia ?

Btw. W C::B jak już wspomniałem kiedyś, jeśli kursor znajduje się nad jakąś zmienną to automatycznie wszystkie jej wystąpienia w pliku są na czerwono, aż się prosi, żeby to zastosować do obsługi wielokursora, jakąś kombinacja klawiszy aktywować te pola jako "multiple selections" i je jednocześnie edytować. Może ktoś na forum biegły w C::B już to rozgryzł ?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Xirdus

  • Redaktor

# Styczeń 17, 2014, 20:16:22
Zaciekawiliście mnie tym Regex-em, wcześniej wyrażenia regularne kojarzyły mi się tylko z Boostem i operacjami na stringach. Okazuje się, że w C::B też jest domyślnie zainstalowany plugin obsługujący Regex
No bo edycja kodu to nie są operacje na stringach? ;)

jednak widzę, że jest to narzędzie mało przyjazne w obsłudze, właśnie przez wspomnianą przez Xiona konieczność formułowania odpowiednich "zaklęć". Niby do nauczenia i opanowania, ale czy warto na to tracić czas.
Jasne! Wyrażenia regularne przydają się w bardzo, bardzo wielu dziedzinach życia (a właściwie nie-życia ;) ).

Tylko pozostaje kwestia ustawienia pozycji tego wielokursora, w C::B z tego co widzę, trzeba ręcznie zaznaczać fragmenty kodu korzystając z włączonego "multiple selections" i można edytować w wielu miejscach na raz. Jednak konieczność ręcznego ustawiania punktów edycji jest kłopotliwa przy dużej ich ilości. Wolałbym mieć możliwość ustawienia wielokursora np. przy wszystkich wystąpieniach jakiegoś wyrażenia w całym pliku.
Napisz plugin :P

A jak się ustawia pozycję wielokursora u Was w VS ? ręcznie czy za pomocą jakiegoś narzędzia ?
Z tego co wiem, to (przynajmniej w wersji Express) nie ma wielokursora, za to jest prostokątne zaznaczanie, które mimo że bardziej kłopotliwe, w niektórych wypadkach się sprawdza.

Btw. W C::B jak już wspomniałem kiedyś, jeśli kursor znajduje się nad jakąś zmienną to automatycznie wszystkie jej wystąpienia w pliku są na czerwono, aż się prosi, żeby to zastosować do obsługi wielokursora, jakąś kombinacja klawiszy aktywować te pola jako "multiple selections" i je jednocześnie edytować. Może ktoś na forum biegły w C::B już to rozgryzł ?
Jak już wspomniałem - napisz plugin :)

Offline Xender

  • Użytkownik

# Styczeń 17, 2014, 20:20:42
Xion - To porównanie wielokursora do regexów wygląda mi trochę na siłę... Są to raczej dość różne narzędzia i mają swoje use-case'y, które nie zawsze się pokrywają.

Offline Lobsang Rampa

  • Użytkownik
    • Global Epidemic

# Styczeń 17, 2014, 20:29:32
No bo edycja kodu to nie są operacje na stringach? ;)
Nie no, są, tylko się nie spodziewałem w edytorze możliwości bezpośredniego użycia przez użytkownika wyrażeń regularnych na kodzie.

Napisz plugin :P
Chyba szkoda na to czasu :P

Xion, na Twoim profilu obok wieku znajduje się kawałek tortu z wisieńką ??? czy to znaczy, że masz dzisiaj urodziny ? jeśli tak, to Wszystkiego Najlepszego z Okazji Urodzin :D
« Ostatnia zmiana: Styczeń 17, 2014, 20:47:49 wysłana przez Lobsang Rampa »

Offline Xirdus

  • Redaktor

# Styczeń 17, 2014, 21:34:40
Chyba szkoda na to czasu :P
Wszystko zależy od tego jak bardzo tego "potrzebujesz" (w sensie takim, jak dziecko "potrzebuje" lalki Barbie), oraz jak porypane jest API Code::Blocksa. I jak dużo czasu możesz sobie pozwolić zmarnować ;)

Offline Xion

  • Redaktor
    • xion.log

# Styczeń 17, 2014, 21:35:47
Xion - To porównanie wielokursora do regexów wygląda mi trochę na siłę... Są to raczej dość różne narzędzia i mają swoje use-case'y, które nie zawsze się pokrywają.
Być może. W takim razie regexy, wielokrotne kursory i refactor AST to trzy różne narzędzia o różnych zastosowaniach, a zwykłe pisanie kodu/tekstu okazuje się o wiele bardziej skomplikowaną czynnością niż myślałem :)

Cytuj
Xion, na Twoim profilu obok wieku znajduje się kawałek tortu z wisieńką ??? czy to znaczy, że masz dzisiaj urodziny ? jeśli tak, to Wszystkiego Najlepszego z Okazji Urodzin :D
Dziękuję bardzo :)

Offline Lobsang Rampa

  • Użytkownik
    • Global Epidemic

# Styczeń 17, 2014, 21:42:27
Wszystko zależy od tego jak bardzo tego "potrzebujesz" (w sensie takim, jak dziecko "potrzebuje" lalki Barbie), oraz jak porypane jest API Code::Blocksa. I jak dużo czasu możesz sobie pozwolić zmarnować ;)
Na tej zasadzie, że gdyby taka funkcjonalność była dostępna to bym pewnie z tego czasem korzystał, ale nie aż tak bardzo żebym się mordował z pisaniem plugina do tego :P

EDIT: Find & Replace jednak w C::B jest - CTRL + R i w sumie więcej mi nie potrzeba :P
« Ostatnia zmiana: Styczeń 17, 2014, 22:36:32 wysłana przez Lobsang Rampa »

Offline JaTylkoWTejJe...

  • Użytkownik

# Luty 21, 2015, 20:35:26
Witam,
z góry przepraszam za to że odpowiadam po roku, ale może się przydać dla innych osób korzystających z tego samego kursu.
Autor poradnika, z którego czerpałeś wiedzę, popełnił drobny błąd.


Wiersz:

hbmBuf = CreateCompatibleBitmap(hdcBufor, rcOkno.right, rcOkno.bottom);
Należy zamienić na:

hbmBuf = CreateCompatibleBitmap(hdc, rcOkno.right, rcOkno.bottom);
Dlaczego?

Zgodnie z : https://msdn.microsoft.com/en-us/library/windows/desktop/dd183488%28v=vs.85%29.aspx

Cytuj
Note: When a memory device context is created, it initially has a 1-by-1 monochrome bitmap selected into it. If this memory device context is used in CreateCompatibleBitmap, the bitmap that is created is a monochrome bitmap. To create a color bitmap, use the HDC that was used to create the memory device context, as shown in the following code:
C++


    HDC memDC = CreateCompatibleDC ( hDC );
    HBITMAP memBM = CreateCompatibleBitmap ( hDC, nWidth, nHeight );
    SelectObject ( memDC, memBM );

Pozdrawiam