Skocz do zawartości

Surprise

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

Posty napisane przez Surprise

  1. 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

  2. [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

  3. 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].

  4. 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

  5. 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 ;)

  6. 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

  7. 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

  8. 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 ;)

  9. 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

  10. Hej,

    widzę, że cię zainspirował flashget...niestety nie ściągnę go teraz i zobaczę o co dokładnie ci chodzi..hehe

    Co się tyczy punktu 2, czyli tzw. rozsuwania kontrolki...ktoś kiedyś robił taki program za starych dobrych czasów...split...czy jakoś tak...
    Najlepsza kontrolka do wyświetlania listy to chiba ListView...pewno są gdzieś w sieci gotowce...w delphi jest taki komponent...co do pobierania listy plików w katalogu...odeślę cię do arta Nicona na temat wyszukiwania plików..z którego powinieneś wyłuskać potrzebne informacje...wg mnie powinieneś również więcej własnymi siłami szperać w necie i nie zadawać tyle pytań naraz...hehe ;)

    pozdrawiam

  11. Jeśli richedit i wogle edit ma ustawione enabled na true to jest wszystko w porządku...nie rozumiem...znaczy, że jest aktywny, jakby miał enabled false to wtedy byłby nieaktywny...czy kod wtedy zadziała...myśle, że powinien zadziałać...ale nie jestem pewnien na 100% - sprawdź...hehe...jeśli nie chcesz żeby można było kliknąc i nic zmieniać w richedicie to ustaw flage EM_READONLY...a właściwie to nie mieszam już bo do końca nie wiem do czego ci to potrzebne i jaki chcesz osiągnąć efekt..hehe...możesz potraktować to jako pytanie..ale nie musisz... ;)

    pozdrawiam

×
×
  • Utwórz nowe...