Na początku zadeklarujmy zmienne których użyjemy:

W kodzie dla zdarzenia WM_CREATE należy wpisać:

by stworzyć obiekt.

Potem normalnie inicjujemy OpenGL’a, tyle, że kontekst graficzny przypisujemy dla hstat, o taki kod był w szablonie, tylko dół dodałem:

Użyjemy tej funkcji z procedurze okienkowej po pokazaniu się okna, czyli po funkcji ShowWindow w taki sposób:

Przed zakończeniem programu (w WM_DESTROY przed funkcją PostQuitMessage(0)) użyjemy takiej funkcji:

No i jeszcze ostatecznie coś narysujmy na naszym staticu

Użyjemy to w ten sposób:

W razie watpliwości, przejrzyj kod przykładowy:

należy nie zapomnieć o podlinkowaniu libów opengl32 i glu32.

Autor: Spine

Trzeba je ręcznie wpisywać za pomocą odpowiednich kodów (muszą być poprzedzone backslashem ”):

206 – ć
210 – ł
230 – ś
242 – ó
245 – ą
251 – ę
253 – ź
276 – ż
344 – ń

Przykład:

Autor: Iskar

Sprawa jest prosta – wystarczy po otworzeniu pliku przesunąć się (seekg) na jego koniec (drugim parametrem będzie flaga end) a potem odczytać aktualną pozycję w pliku (tellg), która zwróci nam pozycję w bajtach. Potem z powrotem przesuwamy się na początek pliku (seekg z drugim parametrem beg). Przykład:

U mnie pojawił się tekst: Rozmiar pliku (w bajtach): 1440054, w kilobajtach: 1406

Autor: Iskar

Jak przesunąć programowo scroll?

Należy wysłać do okna odpowiedni komunikat:

– WM_VSCROLL – aby przesunąć pionowy scroll,
– WM_HSCROLL – aby przesunąć poziomy scroll,

za pomocą funkcji SendMessage:

Pierwszy parametr to uchwyt okna, do którego ma zostać wysłany komunikat, następny – identyfikator komunikatu, kolejne dwa parametry to wartości, jakie będą wraz z komunikatem przesłane. W wParam prześlemy informację o tym, o ile chcemy przesunąć scroll, lParam nie będziemy używać. W przypadku komunikatów WM_VSCROLL i WM_HSCROLL przydatne będą takie opcje:

SB_BOTTOM Przesuwa scroll do samego końca.
SB_LINELEFT Przesuwa scroll o jedną linię w lewo (lub w górę).
SB_LINERIGHT Przesuwa scroll o jedną linię w prawo (lub w dół).
SB_PAGELEFT Przesuwa scroll o jedną stronę w lewo (lub w górę).
SB_PAGERIGHT Przesuwa scroll o jedną stronę w prawo (lub w dół).
SB_THUMBPOSITION Przesuwa scroll do podanego miejsca.
SB_TOP Przesuwa scroll na sam początek.

Przykład:

lub:

Jak widać, jeżeli chcemy przesunąć scroll do danego miejsca, musimy ‚skleić’ za pomocą MAKELONG dwie wartości ze sobą: SB_THUMBPOSITION oraz nową pozycję scrolla.

Jeżeli chcemy otrzymać aktualną pozycję scrolla, należy skorzystać z funkcji GetScrollPos:

Autor: Iskar

Jeżeli probowałeś przesłać do jakieś funkcji, która wymagała jako argumentu char* obiekt typu string, to zapewne spotkałeś się z błędem typów:

W takim wypadku musisz się posłużyć specjalną funkcją składową klasy string c_str(), która zwraca wskaźnik do stałego łańcucha tekstowego umieszczonego w obiekcie typu string:

Autor: Iskar

Na początku musimy otrzymać uchwyt do paska zadań, na którym znajduje się przycisk Start. Jego klasa to Shell_TrayWnd. Do uzyskania jego uchwytu posługużymy się funkcją FindWindow, który jako pierwszy argument przyjmuje nazwę klasy okna, a jako drugi – jego tytuł:

Następnie musimy otrzymać uchwyt do przycisku Start. Używamy w tym celu funkcji GetWindow, której przekazujemy uchwyt TaskBar i, podając jako drugi argument wartość GW_CHILD, oznajmiamy, że chcemy otrzymać uchwyt do okna potomnego:

Autor: Iskar

Jak pobrać parametry z linii komend?

Najpierw należy dodać do funkcji main() dwa argumenty:

nazwy zmiennych są dowolne:
argc – określa ile parametrów zostało przekazanych do programu z linii komend.
argv – jest tablicą stringów przechowujących parametry.

Na przyklad wywolanie programu:

> my_prog -arg1 -arg2 arg3

spowoduje, że zmienna argc przyjmie wartość 4, a potem kolejno:

Z powyższego wynika, że pierwszym parametrem programu jest zawsze jego nazwa, a co za tym idzie argc jest zawsze większy lub równy jeden.

Autor: Firen

Sprawa prosta i łatwa, wystarczy wiedzieć, że zawsze pierwszy parametr programu to ścieżka do pliku exe, wystarczy więc wyciąć nazwe pliku i rozszerzenie:

Jeżeli nasza aplikacja nie jest konsolowa tylko typu Win32, to jako pierwszy parametr nie dostaniemy ścieżki do exeka, musimy ją dostać w inny sposób, oto kod:

Jak widać, korzystamy z funkcji WinAPI GetModuleFileName (dzięki za info Firen :>), która w drugim parametrze umieszcza ścieżkę do exeka, do którego należy aktualny proces.

Autor: Iskar

Aby losowane liczby nie powtarzały się, należy przed rozpoczęciem losowania wywołać funkcję srand, do której paremetr otrzymamy z funkcji time(NULL) – zwraca ona ilość sekund, jakie upłynęły od 1 stycznia 1970 roku:

Autor: Iskar

Strumienie cin oraz cout są buforowane, co oznacza, że dane nie są wypisywane/wczytywane za każdym razem, gdy sobie tego zażyczymy, lecz hurtem – gdy danych się troche nazbiera. Powoduje to nieprawidłowe współdziałanie funkcji z stdio ze strumieniami, gdyż używając printf/scanf dane są wypisywane od razu. Może dojść do sytuacji, gdy np. przeplatasz wyświetlanie danych na ekranie za pomocą strumieni i funkcji z stdio, że dane będą wypisywane w niepoprawenej kolejności.

Jeżeli chcesz, aby nie było problemów, na początku programu dodaj linijkę:

Dzięki czemu dane będą wypisywane przez strumienie od razu, w każdym momencie, gdy sobie tego zażyczysz. Tracimy jednak tym sposobem szybkość strumieni.

Autor: Spine

Prawie to samo, co w przypadku ‚error LNK2001: unresolved external symbol _main’, jednak tym razem nie została odnaleziona funkcji WinMain. Zajrzyj do wcześniejszego pytania.

Autor: Iskar

Jeżeli podczas kompilacji natknąłęś się na powyższy błąd, oznacza to, że nie odnaleziono w pliku z kodem źródłowym definicji funkcji main, która wymagana jest w każdej aplikacji konsolowej. Często podczas tworzenia nowego projektu zdarza się pomylić – zamiast wybrać Win32 Application, wybiera się Win32 Console Application, a w źródle umieszcza się definicję funkcji WinMain. Sprawdź, czy na pewno masz w kodzie funkcję main lub czy nie pomyliłeś rodzajów projektów. W tym drugim przypadku, utwórz nowy projekt Wind32 Application i tam umieść swój kod.

Autor: Iskar

Do zablokowania odświeżania formy służy LockWindowUpdate(), gdzie jako parametr wstawiamy uchwyt okna.

Autor: Drazek

Aby wyświetlić formatkę na środku ekranu dzielimy rozdzielczość przez 2 i odejmujemy od tego połowę długości, bądź szerokości formularza.

Autor: Drazek

Ten kod prezentuje usunięcie wszystkich komponentów należących do klasy Tbutton. Tworzmy wskaźnik do którego pętlą przypisujemy kolejne komponenty formy. Jeśli klasa komponentu jest równa z TButton to usuwamy komponent.

Autor: Drazek

Aby stworzyć formę w kształcie elipsy użyjemy funkcji CreateEllipticRg(). Następnie procedurą SetWindowRgn() ustawimy otrzymany uchwyt do obszaru o kształcie elipsy.

Autor: Drazek