Skocz do zawartości

Surprise

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

Surprise's Achievements

Newbie

Newbie (1/14)

0

Reputacja

  1. https://www.winapi.org/index.php?option=content&task=view&id=130&Itemid=30...art na stronie...zanim zapytasz poszperaj trochę
  2. Surprise

    Jeszcze raz MySql

    Nie będę się tu wymądrzał bo jeszcze się nie brałem za sql w c++, ale znalazłem taki oto kurs: https://www.utopia.pl/applegreen/procki/mysqlapi.php - może on coś pomoże ;) Pozdrawiam
  3. Surprise

    Ping

    Hmmm...kiedyś kiedy jeszcze był dział download, było źródło programu typu ping...napisał je bodajże Dracula, ale nie jestem pewnien...cóż do tego najlepiej wykorzystać protokół udp, jednak nie mam nigdzie gotowej funkcji i czasu (hyh), dlatego dam ci linka do fajnego kursu: https://www.keeller.kompozytor.net/ws_wprowadzenie.php Pozdrawiam
  4. Surprise

    rozciaganie obrazka

    No to może trochę kodu...bo w jasnowidza mi się nie chce bawić...hyh, pokaż jak wyświetlasz bitmapę, najlepiej całą procedurę komunikatów...
  5. Surprise

    odswiezanie okna

    Witam, nie rozumiem tego zdania w nawiasie...hyh mógłbyś jakoś to przystępniej wytłumaczyć. Do wyświetlania bitmap polecam statica (tworzysz kontrolkę tego typu ze style SS_BITMAP i SS_IMAGEREALSIZE, czy jakoś tak i jako nazwę podajesz bitmapkę w zasobach). Co do metody jaką wyświetlasz. W zdarzeniu WM_PAINT wyświetlasz bitmapkę w odpowiednim miejscu i jest po kłopocie, tj, nie powinno być problemów. Funkcja która odświeża okno (wywołuje zdarzenie WM_PAINT) to InvalidateRect(hwnd, NULL, NULL, true), lub po prostu wysyłasz nazwę wiadomości funckją SendMessage. Jeśli masz jakieś pytania to wal śmiało, ale tak jak mówiłem, mnie roboty jest ze staticem ;) Pozdrawiam
  6. [Zmarnowałem cały dzień], nie no, nie zmarnowałeś tylko myślałeś nad tym...nawet nie wiesz ile doświadczenia ci przybyło...heh. Nie dziwie ci się, że zdawało ci się, że dla każdej zakładki jest osobne okno...to jest logiczne...na przykład w VB czy Delphi kontrolki tab mają tak ładnie porobione dla każdej zakładki okna...potem się na nich rysuje i jest git. Dlaczego serwis wolno działa ? Bo tak..hyh
  7. Witam, tekst pobierasz i ustawiasz za pomocą GetWindowText i SetWindowText...poszukaj o tych funkcjach w dokumentacji, którą znajdziesz na ftp tej strony (plik hlp.) Co do okien...zależy jak chcesz z nich korzystać. Jednak polecam zapoznać się z oknami dialogowymi (art o tym znajdziesz na tej stronie). Co do tworzenie drugiego okna na podstawie wypełnionej już struktury wndclass. Po prostu jeśli ją już raz wypełniłeś i zarejestrowałem funkcją RegistryClass to zmień pola, które nie pasują do nowego okna...(czyli klase i funkcje obsługi komunikatów, jeśli nie chcesz żeby okno zachowywało się tak jak to pierwsze) i jeszcze raz zarejestruj. Potem utuwórz już standardowo nowe okno, którego klasę będzie stanowiła nazwa klasy, którą podałeś podczas drugiego wypełniania naszej strukturki. Wiem, może to wszystko trochę zamotanie napisałem...ale może jakoś zrozumiesz ;) Pozdrawiam i życzę owocnej pracy z dokumentacją (prawdę mówiąc jeśli się z nią nie zapoznasz i nie nauczysz korzystać to...cóż...każdy postrzega to nieco inaczej) [Jak będziesz miał problemy to pisz, tutaj albo na moje gg].
  8. Witam w procedurze komunikatów musisz obsłużyć wiadmość WM_COMMAND. WM_COMMAND wNotifyCode = HIWORD(wParam); // kod zdarzenia notify wID = LOWORD(wParam); // identyfikator okna hwndCtl = (HWND) lParam; // uchwyt okna czyli z pola wParam wyciągaz najpierw identyfikator okna, które chcesz obsłużyć, w twoim przypadku będzie to 101. Potem sprawdzasz czy zdarzenie notify jest równe BN_CLICKED i wykonujesz odpowiednie operacje. W praktyce wygląda to mniej więcej tak: //główna pętla switch case WM_COMMAND: if((LOWORD(wParam) == 101) && (HIWORD(wParam) == BN_CLICKED)) { //tutaj funkcje, które mają być wykonane po wciśnięciu buttona } break ; Jeśli coś jest niejasne to pytaj ;) Pozdrawiam
  9. Surprise

    Menu kontekstowe

    Witaj gesiek, niestety nie miałem czasu odpowiedzieć na to pytanie na forum eksperta...ale miło, że się tu zalogowałeś...hehe...taaak po raz kolejny przekonujemy się, że codeproject.com to porządna strona...co do wywołania odpowiedniej funkcji - pomęcz się trochę, masz przecież źródła, jak już znajdziesz odpowiedź będziesz odczuwał satysfakcje no i podziękujesz, że nie udzieliliśmy ci gotowego sposobu :P Pozdrawiam ;)
  10. Ja tam zawsze daty przekzuje jako %d, a może coś z ciągiem formatującym nie tak, może przekaż go bezpośrednio...nie wiem ;) pozdrawiam
  11. GDI+, czy jakoś tak, która jest opisana na tej stronie bodajże przed Salwadore...jednak nie bawiłem się w takie rzeczy i nie znam gotowych bibliotek...pewnie w necie pełno tego cholerstwa jest ;)
  12. Surprise

    zmiana kolorow

    masz bitki zapisane w imageData i robisz tak: unsigned char char tempRGB ; //zmienna zamiany składowych unsigned char * imageData ; //zmienna w których masz bitmape //no i teraz petelka - zamienia składowe formatu RGB na GBR for(imageIdx = 0 ; imageIdx < bitmapInfoHeader.biSizeImage ; imageIdx+=3) { tempRGB = imageData[imageIdx] ; imageData[imageIdx] = imageData[imageIdx +2] ; imageData[imageIdx + 2] = tempRGB ; } //mam nadzieję że się nie pomyliłem :P i jest git...w biSizeImage miałem zapisany rozmiar bitmapy, tą strukturę wykorzystuje (podobnie jak zamiana z RGB na GBR) do zapisu bitmapki do pliku, myle, że też ci było do tego potrzebne... ;) pozdrawiam
  13. Jednak czy wygaszanie monitora działa na systemach xp. Kiedyś pisałem taki niezbyt przyjazny program i u mojego kumpla nie odegrało się do końca całe przedstawienie ;) Jak jest już wygaszanie to może też włączanie wygaszacza się przyda: SendMessage(hWnd, WM_SYSCOMMAND, SC_SCREENSAVE,0) ; Co do pobierania informacji...hmm...część z nich, chociaż nich może jakoś uda się wyłuskać funckją GetDeviceCaps...ale to tylko liczby i takie tam..może się przyda..opis znajdziesz w helpie. Obacz sobie w helpie rozdział System Infromation Functions...coś tam może znajdziesz. Pozdrawiam
  14. Witam ponownie Rzeczywiście ten mój pierwszy sposób jest baaardzo zły...jednak żeby wyjść z tego wszystkiego z honorem ;) zmarax masz tutaj funckje: bool WstawNowaLinia(char * tekst, HWND hEdit) { char nowalinia[255] ; int line, line_count, line_len, start ; if((tekst[0] != (char) NULL) && (hEdit)) { line_count = SendMessage(hEdit, EM_GETLINECOUNT, (WPARAM) 0, (LPARAM) 0) ; line = SendMessage(hEdit, EM_LINEINDEX, (WPARAM) (line_count - 1), (LPARAM) 0) ; line_len = SendMessage(hEdit, EM_LINELENGTH, (WPARAM) line, (LPARAM) 0) ; start = line + line_len ; SendMessage(hEdit, EM_SETSEL, start, start) ; if(line) wsprintf(nowalinia, "\n%s", tekst) ; else wsprintf(nowalinia, tekst) ; SendMessage(hEdit, EM_REPLACESEL, (WPARAM) 1, (LPARAM) nowalinia) ; return true ; } return false ; } Wyjaśnienie: Jeśli wszystko zostało prawidłowo przekazane to najpierw pobieramy sobie ilość lini, a potem (ideks jest liczony od zera ilość linie nie) za pomocą EM_LINEINDEX otrzymujemy odpowiednie współrzędne lini. Pobieramy długość tej linii i (w start) otrzymujemy pozycję ostatniego znaku w tekście..ostaniego znaku(!!!!!!!!!!)....kurde..a nie lepiej zrobić tak: bool WstawNowaLinia(char * tekst, HWND hEdit) { char nowalinia[255] ; int start ; if((tekst[0] != (char) NULL) && (hEdit)) { start = (GetWindowTextLength(hEdit) -1) ; SendMessage(hEdit, EM_SETSEL, start, start) ; if(start != -1) wsprintf(nowalinia, "\n%s", tekst) ; else wsprintf(nowalinia, tekst) ; SendMessage(hEdit, EM_REPLACESEL, (WPARAM) 1, (LPARAM) nowalinia) ; return true ; } return false ; } Pobieramy ilość tekstu i odejmuje jeden (w końcu ma być to index, liczony od 0). No a potem to już wszystko jasne... Jeśli chcesz zrobić tak jak w gg...to nie ma problemu. Ustawiasz sobie flage ES_READONLY (w gg można zaznaczać). Potem jakiś przycisk, który będzie dodawał nowe linie. Oto przykładowa obsługa zdarzenia dla takiego przycisku: char pomoc[255] ; //---- case WM_COMMAND: if(wParam == 100) //załużmy, że id tego przycisku to 100 { GetWindowText(hZdanie, pomoc, 255) ; //pobieramy sobie tekst do dodania WstawNowaLinie(pomoc, hDialog) ; //wstawiamy go do okna dialogu (tak jak w gg ;)) SetWindowText(hZdanie, "") ; //czyścimy pole do wprowadzania tekstu } break ; //---- break ; I nie wciskać kitu, że nie działa bo sprawdzałem...hehe I to tyle. Pozdrawiam ;)
  15. Sprawa jest prosta: jeśli operujesz na wskaźniku do struktury to do jej elementów odwołujesz się za pomocą ->...a kropa również występuje w c++ tylko, że za jej pomocą odnosisz się do elementu struktury, która jest zwykłym obiektem (ni wskaźnikiem). Co do LBTN, a lBtn no to tylko nazwa się zmienia chiba. Przed nazwą zmiennych (to tylko taka zasada) podaje się LP w celu zwrócenia uwagi na to, że jest wskaźnikiem. np w dokumentacji często zamiast gwiadki dodany jest przedrostek LP. Może coś pochrzaniłem...wiosna idzie!!! pozdrawiam
×
×
  • Utwórz nowe...