Skocz do zawartości

Surprise

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

Posty napisane przez Surprise

  1. Jeśli chodzi o określenie ilości przechowywanego tekstu to richedit posługuje się trochę innym komunikatem:

    EM_EXLIMITTEXT
    wParam = 0;
    lParam = (LPARAM) (DWORD) cchTextMax;

    Sprawę formatowania można powierzyć komunikatowi:

    EM_SETCHARFORMAT
    wParam = (WPARAM) (UINT) uFlags;
    lParam = (LPARAM) (CHARFORMAT FAR *) lpFmt;

    W lParam przekazujemy wskaźnik do struktury CHARFORMAT w której określamy w odpowienich polach formatowanie tekstu.

    typedef struct _charformat {
    UINT cbSize;
    _WPAD _wPad1;
    DWORD dwMask;
    DWORD dwEffects;
    LONG yHeight;
    LONG yOffset;
    COLORREF crTextColor;
    BYTE bCharSet;
    BYTE bPitchAndFamily;
    CHAR szFaceName[LF_FACESIZE];
    _WPAD _wPad2;
    } CHARFORMAT;

    wParam określa część tekstu, która ma zostać sformatowana:

    SCF_SELECTION - zaznaczony
    SCF_ALL - wszystko
    SCF_WORD | SCF_SELECTION - muszą występować razem. Formatują zaznaczone wyrazy, jeśli nic nie zostało zaznaczone, a wskaźnik kursor jest gdzię w wyrazie to wtedy zezwala na formatowanie

    Inne komunikaty i struktury służące do formatowania:

    CHARFORMAT
    EM_GETCHARFORMAT
    EM_GETPARAFORMAT
    EM_GETRECT
    EM_SETBKGNDCOLOR
    EM_SETCHARFORMAT
    EM_SETEVENTMASK
    EM_SETPARAFORMAT
    EM_SETRECT
    PARAFORMAT

    No nic więcej nie piszę bo zaraz się z tego art zrobi...hehe...a co do artów to za niedługo następna częśc (o szukaniu tekstu..itp, formatowanie będzie później :P), mimo to zachęcam do pracy z helpem...kurde czemu was tak zraża ten angielski...ehh

  2. No Nicon, mnie też to zadziwia, taki fajny help, no i MSDN, a tak mało osób z tego korzysta. Czasem nawet nie trzeba super-ekstra umieć angielskiego,wystarczy trochę intuicji i własnych eksperymentów, ale co to tam...pozdrawiam 8)

  3. Hej! (jak mnie dawno nie było na tym forum..hehe)

    Myslę, że po prostu wywołaj tę funkcję, normalnie bez niczego, bo przecież nie ma parametierów...heh

    Funkcja to prostu przestawia zapis sciezki uzywanej, czy zwracanej przez niektóre funkcje (jak napisał Nicon - wszystko przez Dosa...hehe).
    _lopen GetDriveType LoadLibrary
    CopyFile GetFileAttributes LoadLibraryEx
    CreateDirectory GetFullPathName MoveFile
    CreateFile GetModuleFileName MoveFileEx
    CreateProcess GetModuleHandle OpenFile
    DeleteFile GetSystemDirectory RemoveDirectory
    FindFirstFile GetTempFileName SearchPath
    FindNextFile GetTempPath SetCurrentDirectory
    GetCurrentDirectory GetVolumeInformation SetFileAttributes
    GetDiskFreeSpace GetWindowsDirectory

    To są te funkcje, również buforek argv jest na to podatny.
    Istnieje jeszcze VOID SetFileApisToOEM(VOID), która działa odwrotnie.
    A tak na marginesie, znalazłem to pirwszy raz w helpie...taaak polecam helpa, zabójcza broń...hehe

    Pozdrawiam

  4. Witam

    nie no co ty...po co od razu dziewczyną...

    Jak chcesz dołączyć do zasobów jakiś plik binarny to musisz dać mu typ RCDATA...np. nazwa RCDATA "moj wav.wav".
    Tylko, że jak chce tak zrobić to mi DevCpp wariuje i zwraca błąd.
    Ciekawe dlaczego skoro podświetla ten napis tak jak ICON czy BITMAP...
    Ja z linii poleceń wywołałem brcc32.exe (borlanda) i jako paramert podałem plik rc właśnie z definicją data i utorzył ładny plik res.

    Kiedy już będziesz miał wava w zasobach musisz go jeszcze odtworzyć
    funkcją sndPlaySound:

    sndPlaySound("nazwa_zasobu", SND_RESOURCE | SND_ASYNC) ;

    Jeśli chodzi o menu to nie mam pojęcia.
    Na stronie jest art, który pokazuje jak zrobić żeby aplikacja wyglądała z tymi bajerami pod xp. Ja w Devie daje odpowiednią opcję - uwzględniaj tematy xp czy jakoś tak...

    to tyle...

    Pozdrawiam

  5. Witam

    No najprościej to było by wyświetlić je w staticu albo przycisku.
    Po prostu na początku deklarujesz sobie tablice uchwytów na bitmapki.
    Potem ładujesz do nich z zasobów odpowiedni obraz.
    Przy wyświetlanie obrazków na przyciskach najlepiej użyć komunikatu BM_SETIMAGE. Co do sprawdzania czy ktoś wybrał takie same to pobieramy sobie z tych okien bitmapy (BM_GETIMAGE) i porównujemy. Jak wybrał prawidłowe to rysujemy puste pole i dajemy wartość enable false, albo niszczymy je, chowamy (ShowWindow).
    Jest jeszcze problem wyswietlenia w pomieszanej kolejności odpowiednich bitmap, które mamy w naszej tablicy. Myślę, że możesz zrobić plik, który określa pozycje. Możesz też napisać funkcje która będzie losowała miejsca. Tylko losowanie potrwa trochę czasu. Najepiej wylosować pozycje dla kliku obrazów a reszte narysować normalnie...

    To tyle pozdrawiam...

  6. Witam...
    Jeśli chcesz zrobić tę mgłę z wykorzystaniem samego pliku windows.h to będziesz się musiał nagimnastykować, no i potem oświetlić..?? nie no nie ma sensu. Ja polecałbym OpenGl, które może współgrać z kodem napisanym w c++ i winapi. Tam również wygodniej narysujesz pokój 3D.
    Jest wiele stron opisujących tworzenie mgły właśnie w OpenGl, np. z opengl.pl możesz sciągnąć przykład wyświetlający sześcian i mgłę. Jednak jak chcesz użyć opengl musisz się zaopatrzyć w odpowiednie biblioteki...

    Pozdrawiam

  7. Witaj

    Coś mi się zdaje, że w twój problem tkwi teraz w tej funkcji okienkowej dla dialogbox'a. Może okienko zaraz się zamyka...ja programuje pod Devem i nie mam takiego problemu...dziwne że kompilator zwrócił ci błąd...nie musisz definiować czegoś jako wskaźnik, żeby przekazać to jako wskaźnik...dziwne przecież funkcja sama w sobie jest wskaźnikiem...ja przeważnie tę funkcję rzutuję na DLGPROC, albo wogle nic nie robię.
    Co do drugiego problemu to naprawdę nie wiem jak to wygląda po BC++...jedno jest pewne linker nie może odnaleźć pliku nagłówkowego windows.h...może przekopiuj ten plik do folderu gdzie jest plik cpp i wpis "windows.h"...
    Pozdrawiam.

  8. Witaj!

    Istnieje również funkcja, która to wykonuje i wcale nie trzeba dołączać inny plików nagłówkowych...tylko windows.h oczywiśćie:

    char szPath [ ] = "C:\\Moje Dokumenty\\Plik.exe" ;
    char szFileName [255] ;
    
    GetFileTitle(szPath, szFileName, 255) ;
    

    Pierwszy parametr to ścieżka, drugi to bufor na nazwę pliku, który funkcja wyłuska no i trzeci wielkość tego buforka...

    Pozdrawiam ;)

  9. Witam wszystkich

    Jeśli chodzi o RichEdita to piszę kolejną część z serii Edytor Tekstu właśnie o tej kontrolce...za niedługo sie ukaże...

    Google

    Wyniki 1 - 10 spośród około 12,700 dla zapytania +RichEdit +documentation. (Znaleziono w 0,31 sek.)

    Nie znalazłem polskiej dokumentacji, ale aż roi się od angielskich , a z nich intuicyjnie zawsze coś idzie się dowiedzieć.
    Również słynny help umieszczony na ftp tej strony zawiera informacje o tej kontrolce.

    Polecam strone www.codeproject.com (wpiszcie w search RichEdit na bank coś znajdziecie [po angielsku])

    Kiedyś znalazłem (polską) stronke gdzie między innymi było cóś o RichEdicie (podstawy, operacje na tekście i podświetlanie składni) może się wam przyda:

    https://pancake.sggw.waw.pl/~hador/Masm32/Pl/index.html

    Jednak jak widzicie najwięcej informacji jest w innych językach(nie chodzi mi o języki programowania..hehe), tak więc cza się tego poduczyć...

    Pozdrawiam

  10. A tekst który wyświetlasz pojawia się??

    Bo jeśli tak to jest błąd przy ładowaniu bitmapy, czyli wg mnie źle podany hInstance...
    A jak się tekst nie pojawia to już nie wiem. Sprawdzałem twój kod w Dev 4 i napis się wyświetlał, potem załadowałem bitmapę w WinMain (albo można dać (::hInstance = hInstance) i wszystko grało.

    Pozdro

  11. Jeśli chodzi o kod który pokazałeś to wydaje mi się, że ładowanie bitmapy powinieś obłuzyć w głównej funkcji WinMain (chyba miałem kiedyś taki problem..hyhy), albo w WinMain przekaż po prostu globalnemu uchytowi programu hInstance, uchyt który nadaje funkcja WinMain.
    Coś mi się zdaje że nazwałeś je identycznie.

    czyli

    ::hInstance = hInstance ;

    i możesz ładować obrazki w każdym miejscu programu (no prawie)
    ;)

    Jednak jeśli chcesz wyświetlać jakąś bitmapę to polecam zwykłą kontrolkę STATIC w której możesz łatwo to zrobić.
    Przykładowy kod:

    CreateWindow("STATIC", "nazwa_zasobu", WS_CHILD | WS_VISIBLE | SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, 0, 0, hwnd, (HMENU) 100, hInstance, 0) ;
    

    Jak nadasz staticowi falge SS_BITMAP to będzie on wyświetla bitmapę którą masz w zasobach (jest również SS_ICON - ikona). Nazwę podajesz jako zwykły tekst.
    Flaga SS_REALSIZEIMEGE powoduje że static automatycznie zmieni swoje rozmiary wyświetlając cały obrazek...
    ...i to tyle...

    Pozdrawiam...

  12. W winapi jest funkcja wsprintf.
    Jako pierwszy parametr podajesz wskaźnik na bufor (char * lub te twoje LPCTSTR. W drugim to co chcesz do niej załadować, lub skonwertować na dany typ. np jeśli chcesz przekopiować do LPCTSTR liczbe to po prostu:

    LPCTSTR lancuch ;
    
    lancuch = (LPCTSTR) GlobalAlloc(GPTR, 255) ;
    
    int liczba = 2 ;
    wsprintf(lancuch, "Oto jest liczba: %d", liczba) ;
    
    GlobalFree(lancuch) ;
    

    Przydało by się przydzielić pamięć co nie?

    W zmiennej lancuch będzie teraz tekst: Oto jest liczba: 2.
    (będzie do momentu zwolnienia pamięci (GlobalFree).
    Funkcja ta przyjmuje nieskończenie wiele parametrów. Po prostu tyle ile będzie ci potrzebnych tyle ich podasz. To %d informuje funkcje, że ma konwertować liczbę do łańcuchu. Jaką liczbę - tą w zmiennej liczba bo ją podaliśmy.

    I to na tyle...

    Pozdro ;)

  13. w c/c++ nie ma problemu, dodajesz komunikat WM_CTLCOLOREDIT do procedurki obsługi okna (np. WndProc):

    DWORD edit_color = RGB(255, 00, 00) ; //czerwony
    DWORD text_color = RGB(00, 255, 00) ; //zielony
    //----
       case WM_CTLCOLOREDIT:
                SetBkColor((HDC)wParam, edit_color) ;
                SetTextColor((HDC)wParam, text_color) ;
                return (LRESULT) CreateSolidBrush(edit_color) ;
    //----
    

    W wParam przekazywany jest kontekst do kontrolki edit. Dalej wykonujesz na nim operacje - zmieniasz kolor tekstu i tła.

    Na stronie masz cały artykuł o kontekstach, czyli grafice w GDI, przejrzyj go a na pewno skumasz te funkcje - https://www.winapi.org/index.php?option=content&task=view&id=7&Itemid=28

    Jeśli masz więcej editów i chciałbyś przypisać kolor tylko do jednego,musisz sprawdzić czy lParam jest równy uchwytowi edita, który ma zostać zmodyfikowany.

    np.

    //----
    if((HWND)lParam == uchwyt_edita)
    {
     //tu wklejasz kod
    }
    //----
    

    Istnieją również odpowiedniki tego komunikatu dla listy, statica, czy okna dialogowego.
    Nazwy ich są intuicyjne, czyli np. WM_CTLCOLORLISTBOX - postępujesz tak jak dla edita.

    I to na tyle...

    Powodzenia ;)

  14. No to zależy...
    W tej troche starszę wersji był edytor zasobów, w menu project, i tam bez problemu mogłeś dodawać ikonkę. (taki fajny edyorek)

    Ale najlepiej po prostu otwórz sobie plik z zasobami - z rozszerzeniem rc,
    i wpisz nim definicje ikonki, takie cóś:

    //----
    NAZWA_IKONY ICON "sciezka.ico"
    //----
    

    no i potem tylko w programie piszesz:

    //-----
    wndclass.hIcon = LoadIcon (hInstance, "NAZWA_IKONY") ;
    //----
    

    I po kłopocie... ;)

    Pozdrawiam

  15. Przecież masz już tam wpisaną funkcję LoadIcon.
    Przypuszczam, że masz ikonkę gdzieś w zasobach i chcesz ją z nich załadować:

    //----
    wndclass.hIcon = LoadIcon(hInstance, "NAZWA_IKONY") ;
    //----
    

    W pierwszym podajesz instancje, a w drugim nazwę ikony w zasobie.
    Jeśli nazwą zasobu jest liczba robisz tak:

    //----
    wndclass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(500)) ;
    //----
    

    I to na tyle...

    Pozdrawiam

  16. Witaj

    Według mnie najlepszym rozwiązaniem będzie stworzenie okienka dialogowego. Więcej możesz poczytać tutaj na winapi.org w dziale podstawy (Okna dialogowe part I).

    Jednak możesz zrobić sobie zwykłe nowe okno, tak jak to pierwsze.

    Potem w momencie naciśnięcia przycisku, wywołujesz funkcję odpowiedzialną za pokazanie okna:
    ShowWindow(hUchy2Okna, SW_SHOW) ;

    Mimo wszystko polecałbym okienka dialogowe.

    pozdro

  17. Hej zmarax!!!

    Szkoda, że szukasz na ftp skoro już x osób podało ci gotowy kod.

    Ale jak już tak bardzo chcesz gotowy projekt to
    masz:
    ftp://ftp.winapi.org
    W katalogu examples są przykładziki do chyba każdego z artów tej strony.

    Tamten link chyba źle cię przenosił.
    Jak tu nie znajdziesz to ja jestem..(nie ważne)...hyh

    Pozdro ;)

  18. bool odczytaj_wartosc_ciag_(HKEY glowny_klucz, 
                      LPCTSTR adres_klucza, 
                     LPCTSTR nazwa_wartosci, 
                     LPCTSTR sprawdzana_wartosc 
                     ) 
    { 
    char buffer[1024]; 
    bool takie_same = false ;
    char koncowy [1024] ; 
    HKEY hKey; 
    if(RegOpenKeyEx(glowny_klucz,adres_klucza,0,KEY_ALL_ACCESS,&hKey)==ERROR_SUCCESS) 
    { 
            
            DWORD dwSize; 
          dwSize = sizeof(buffer); 
            RegQueryValueEx(hKey,nazwa_wartosci,NULL,NULL,reinterpret_cast<BYTE *>(&buffer),&dwSize); 
          
          strcpy(koncowy, buffer) ; 
          RegCloseKey(hKey); 
          
          int koncowy_len = strlen(koncowy) ;
          int spr_len = strlen(sprawdzana_wartosc) ;
          
          takie_same = true ;
          if(koncowy_len == spr_len)
          {
              for(int i = 0 ; i < spr_len ; i++)
              {
                  if(koncowy[i] != sprawdzana_wartosc[i])
                  {
                      takie_same = false ;
                      break ;
                  }    
              }    
          }  
          else
          {
              takie_same = false ;
          }      
    } 
    return takie_same ;
    } 
    

    Skompilowałem program z tą funkcją co widzisz i działa...
    Najpierw funkcja sprawdza długość dwóch łańcuchów, a potem (jeśli są równe) sprawdza czy ich wartości są takie same... ;)

    Pozdro

  19. Nie znam takiej funkcji winapi, ale możesz użyć itoa, lub sprintf...

    //------
    int n_value = 12 ;
    char sz_string[5] ;
    
    itoa(n_value, sz_string, 10) ; 
    //albo
    sprintf(sz_string, "%d", n_value) ;
    //------
    

    Obie te funkcje znajdują się w pliku stdlib.h (chyba) ;)

  20. Piasiu ma racje..na bank. Niby po co się trudzimy pisząc te arty - na stronie jest elegancko napisane o funkcjach do rejestru. Mało tego jest jeszcze plik umieszczony na ftp w którym znajdziesz przykłady. Przez własne szperanie i rozwiązywanie problemu więcej się nauczysz, choć czasami potrzebujemy na szybko i po prostu się nie chce - wiem coś o tym... :$

    pozdro :D

×
×
  • Utwórz nowe...