Skocz do zawartości

Surprise

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

Posty napisane przez Surprise

  1. Raz wypełniasz i podajesz..a jak chcesz żeby jakiś item wyglądał inaczej niż sobie zdefiniowałeś w strukturce to odwołujesz sie do odpowiedniego pola, zmieniasz tylko to jedno...i znowu podajesz...

    pozdrawiam

  2. Pewnie że się da ;)

    Najpierw musisz przesunąć kursor do nowej linii:

    int line_index = SendMessage(hEdit, EM_LINEFROMCHAR, (WPARAM) -1, 0) ;

    line_index++ ;

    int pos = SendMessage(hEdit, EM_LINEINDEX, line_index, 0) ;
    SendMessage(hEdit, EM_SETSEL, pos, pos) ;

    Komunikat EM_LINEFROMCHAR (zapomnialem go opisać w arcie..echh) zwraca na podstawie pozycji znaku numer linii w kontrolce richedit...jeśli podamy -1 wtedy zwróci nam bieżącą linię...następnie zwiększamy o jeden (możesz sprawdzać czy jest to ostania linia [EM_GETLINECOUNT i wtedy przejść do poprzedniej(--) lub pierwszej(0)). Mamy już właściwą linie...teraz wysyłamy EM_LINEINDEX i otrzymujemy nową pozycję znaku...potem tylko ustwiamy wiadomością EM_SETSEL pozycję kursora...

    No i wypadałoby wstawić tekst...

    EM_REPLACESEL
    fCanUndo = (BOOL) wParam ;
    lpszReplace = (LPCTSTR) lParam ;

    fCanUndo określasz czy operacja wstawiania może być cofnięta..no a lpszReplace tekst do (w naszym przypadku nie mamy zaznaczonego przedziału) wstawienia...

    to tyle, jeśli masz jakieś pytania to wal śmiało...coś na pewno znajdziesz w ostatnim arcie..który postaram się uzupełnić o pominięte przeze mnie infromacje...hehe wybaczcie... :$

    pozdrawiam

  3. BOOL WINAPI InsertMenuItem(

    HMENU hMenu, //uchwyt do menu do którego ma być dodany nowy item
    UINT uItem, //oznacza pozycje nowego itema, lub jego numer id
    BOOL fByPosition, //true - uItem oznacza pozycje, false - uItem oznacza numer id,
    LPMENUITEMINFO lpmi //wskaźnik do struktury określającej menu
    );

    struktura określająca menu:

    cbSize - rozmiar struktury;
    fMask - określa co ma zostać ustawione...w helpie masz wypisane wszystki flagi..
    fType - typ itema...np...bitmapa..string
    fState - stan...grayed..itp
    wId - identyfiaktor
    hSubMenu - czyli uchwyt do menu, które ma być rozwinięte po najechaniu na itema...
    hbmpChecked - uchwyt do bitmapy, która reprezentuje stan wybrany tema...
    hbmpInchecked - to co wyżej z małą różnicą
    dwTypeData - tekst na itemie...
    cch - rozmiar tekstu (jeśli wybran MFT_STRING)...

    I to cała filozofia...wypełniasz odpowiednio te pola...i podajesz jako parametr do funkcji...btw: cały tekst pochodzi z helpa...jak masz jakieś pytania to wal śmiało...jednak wszystko masz w helpie...
    (chyba zaraz dodam ten opis do słownika ;))

    pozdrawiam

  4. Witam, pewnie, ze istnieje.

    Najpierw musisz wypełnić strukture CHOOSECOLOR:

    typedef struct { // cc
    DWORD lStructSize;
    HWND hwndOwner;
    HWND hInstance;
    COLORREF rgbResult;
    COLORREF* lpCustColors;
    DWORD Flags;
    LPARAM lCustData;
    LPCCHOOKPROC lpfnHook;
    LPCTSTR lpTemplateName;
    } CHOOSECOLOR;

    Nie wszystkie pola oczywiście.
    Potem podajesz ją jako parametr do funckji:

    BOOL ChooseColor(LPCHOOSECOLOR lpcc) ;

    Ta funkcja wyświetli okno (o ile dobrze wypełniłeś strukture). Zwróci true jeśli user wybrał jakiś kolor. Wartość tego koloru masz w rgbResult.
    lpCustColor to wskaźnik do tablicy z kolorami - kolory niestandardowe. Myusisz stworzyć tablice 16 elementową i podać jej adres. Właśnie tam będą przekazywane informacje o kol. niestand.

    I to by było na tyle, jak czegoś nie będziesz wiedział to pytaj ;)

    pozdrawiam

  5. No to jednak trzeba dodać do gł. procedurki. Nie musisz pobierać uchytu okna dialogowego jeśli chcesz zastosować kolorki do wszystkich lub jeśli masz tylko jedno takie okno. Ale jeśli już tak bardzo chcesz to w zdarzeniu okna dialogowego WM_INITDIALOG przekaż ten uchwyt jakiemuś globalnemu np.

    hUchwytGlobalny = hDlg ;

    powinno zadziałać, ale nie jestem pewny na 100%...

  6. Witam wszystkich.
    Sporo osób z nas, kiedy ma problem przeszukuje sieć i znajduje różne ciekawe strony. W tym wątku umieszczajcie linki do stron (tematyka programowanie, winapi oczywiście), które wam się przydały i które innym mogą w przyszłości posłużyć jako rozwiązania problemów (można dodać krótką notkę co na niej znajdziecie lub jak wam służą/służyły. Wszystkie posty nie związane z tematem jak i również odnośniki do stron typu google bądą usuwane ;) Cel jest oczywisty...mam nadzieję...

    btw: zaleca się używanie znacznika url.

    Oto moja lista przydatnych adresów:

    https://www.winapi.org
    no comments...hehe

    https://www.codeproject.com
    tutaj znajdziecie wiele ciekawych artukułów na każdy trapiący was temat - jeśli chodzi o programowanie rzecz jasna.

    https://msdn.microsoft.com
    wielka baza danych na temat programowania autorstwa microsoftu, powiązana z ich produktami...

    https://https://pancake.sggw.waw.pl/~hador/Masm32/Pl/index.html
    strona nauczyciela, który bardzo fajnie opisuje programowanie api w asemblerze, osoby nie znające tego jezyka też zachęcam do odwiedzin- są tam naprawę fajne arty, które można z powodzeniem przenieść na c++.

    https://https://programmersheaven.com
    Over 28258 files, links and articles to explore.
    Chyba nie muszę wyjaśniać dlaczego warto... ;)

    //DOPISANO

    Już kilkadziesiąt osób obaczyło ten topic i zero linków...jednak muszę bardziej sprecyzować cel: pracuje nad projektem strony (wyszukiwarki) i programu (to samo co strona tylko exec), który by ułatwiał programistom znajdowanie informacji w internecie na tematy ich trapiące, chcę żebyście sie podzielili swoimi doświadczeniami...każdy kto poda jakiś sensowny link i go skomentuje zostanie dodany jako współautor tej bazy danych...ufffff

    Pozdrawiam

  7. step 1:

    wejdź na tę stronę https://www.codeproject.com/tabctrl/tabpagedrives.asp

    step 2:

    zobacz czy program przedstawiony na obrazku ci odpowiada

    step 3:

    if(odpowiada)
    {
    download_source() ;
    }
    else
    {
    ShellExecute(HWND_DESKTOP, "open", "https://www.codeproject.com",NULL, NULL, SW_SHOWNORMAL) ;

    if(searching() == NO_FIND)
    {
    ShellExecute(HWND_DESKTOP, "open", "https://www.google.pl", NULL, NULL, SW_SHOWNORMAL) ;
    if(searching() == NO_FIND)
    {
    MessageBox(HWND_DESKTOP, "Niemożliwe", "Nie wierze", MB_OK) ;
    }
    }
    }

    w razie nie powodzenia goto: step 3.

    pozdrawiam

  8. wydaje mi się, że w proc. okna dialogowego, chociaż z drugiej strony, nie korzystałem nigdy z CTLCOLORDLG winc nie jestem pewnien na 100%, ale przecież to nie problem przestestować w proc. okna głównego i dialogowego...?

    pozdr

  9. LB_DELETESTRING
    wParam = (WPARAM) index; // index itemu do usunięcia
    lParam = 0; // nie używane

    komunikat wysłany do listbox'a usuwa itema o indexie zdefiniowanym w wParam.

    LB_INSERTSTRING
    wParam = (WPARAM) index; // index tworzonego itema
    lParam = (LPARAM) (LPCTSTR) lpsz; // adres stringu - nazwa itema

    komunikat dodaje nowego itema o nazwie w lParam i indexie w wParam.

    LB_FINDSTRING
    wParam = (WPARAM) indexStart; // odkąd rozpocząć wyszukiwanie
    lParam = (LPARAM) (LPCTSTR) lpszFind; // szukany string

    Wyszukuje element listy, który nazwą odpowiada wartości podanej w wParam. Jeśli się powiedzie zwróci nam index wyszukanego itema, jeśli nie zróci wartość LB_ERR

    Na podstawie dwóch funkcji możesz napisać nową, która usuwa i w jego miejsce wstawia nowego itema. Jeśli chcesz zmienić item znająć jego nazwe uzyj LB_FINDSTRIONG i po kłopocie. Swego czasu napiasłem plik nagłówkowyz takimi fajnymi funkcjami, ale zaginął mi chiba po formacie...ehh

    pozdrawiam i zachęcam do pracy z helpem (download na ftp tej strony) taka praca dużo daje, a w helpie znajdziesz praktycznie wszystko.

  10. witam

    WM_CTLCOLORDLG
    hdcDlg = (HDC) wParam; // uchwyt do kontekstu dialogboxa
    hwndDlg = (HWND) lParam; // uchwyt do dialogboxa

    W procedurze komunikatów obsługujesz ten komunikat, na podstawie kontekstu podanego w wParam zmieniasz tło:

    WM_CTLCOLORDLG:
    SetBkColor((HDC) wParam, RGB(255, 00, 00)) ;
    break ;

    I to wszystko. Jak chcesz możesz bardziej pokombinować na stronie masz art o grafice GDI w której opisano podstawowe opercje na kontekstach.

    W helpie jest również opisany taki komunikat: WM_CTLCOLORMSGBOX...co wy na to ;)

    Pozdrawiam i zycze powodzenia

  11. nie musisz wcale znać asemblera , żeby wyciągnąć coś z tych artów. autor korzysta z tego języka, ale ty po przeczytaniu powinieneś mniej więcej wiedzieć o co chodzi. funkcje, które są używane możesz znaleźć w helpie, a tam znajdziesz już ich opis, typy parametierów i inne rzeczy (help na ftp tej strony).

    pozdrawiam ;)

  12. Witam ponownie...

    Tutaj masz takiego linka:
    https://pancake.sggw.waw.pl/~hador/Masm32/Pl/pages/28.htm

    Znajdziesz tam opis funkcji uruchomieniowych, czyli operacje na procesach, nie wiem czy to pomoże bo sam zabieram się za czytanie tych artów, ale polecam wszystkim, bo to jest wg mnie ciekawe, czy rozwiąże twój problem? Chiba warto spróbować...pamiętaj...impassible is nothing, trzeba mieć tylko mocne nerwy..hehe

    który raz to ja pozdrawiam...niech wam będzie

    pozdro

    ;)

  13. Witam

    Chiba nie przeglądałeś przykładów na tej stronie...

    Lookij se na to (tak na hama wyciąłem z arta, hmm artów też nie czytasz o ty..heh):

    ofn.lpstrFilter = "nazwa na liscie wybory\0*.rozszerzenie\0druga nazwa na liscie\0drugi rodzaj rozszerzenia\0\0"
    

    całość polega na rozdzielaniu kodem zerowym czyli \0.

    Pozdrawiam

  14. Hej,

    no to napisz worda od nowa...hehe nie no co ty żartuje (chociaż czemu nie ;)

    Możesz to zrobić tak (choć zapewne jest lepsze rozwiązanie ;)
    Napisz program, który co jakiś czas (zrób se timera) będzie pobierał uchwyt aktywnego okna (GetForegroundWindow) i będzie sprawdzał czy w tytule tego okna jest ciąg znaków ".doc", jeśli tak to wtedy robisz z tym oknem co chcesz, chowasz niszczysz...zależy od ciebie...jak masz uchwyt okna możesz zrobić sysko...

    btw: a jeśli zmienię rozszerzenie pliku na ".nic" i otworze? hę jak to sobie wyobrażałeś? hę?

    pozdrawiam

  15. Witam

    Tak, wywołanie klawisza printscreen(VK_SNAPSHOT 0x2C) jest dobrym rozwiązaniem. Potem tylko operujesz sobie na schowku (na stronie w dziale inne jest o tym art). Sprawdzasz czy jest tam teraz bitmapka i pobierasz do bloku pamięci, a potem przypisujesz go do zmiennej, najlepiej do unsigned char *, następnie podajesz ją (zmienną) jako parametr funkcji, która zapisuje bitmapke do pliku, którą to funkcje sobie wcześniej napiszesz...hehe. Nie jestem pewnien co do operacji na schowku czy wszystko dobrze będzie, ale spóóbuj...a co do funkcji zapisuj bitmapki, to...mogę ci wysłać... ;)

    Pozdrawiam

  16. Witam panie banasiak,

    sposób, który podam może nie jest jakiś tam efektywny, ale łatwy do zrealizowania. Całość polega na tym, że ustawisz sobie otwierania plików(np. doc, czy exe) za pomocą twojego programu. Kiedy user kliknie na plik, uruchomi się twój program, a jako parametr będzie podany właśnie ten plik (w lpCmdLine jest jego ścieżka). Potem sprawdzasz sobie scieżkę pliku (CmdLine, czy argv) i jeśli ścieżka spełni warunki to uruchamiasz plik...jak?? Oto kod funkcji ShellExecute:

    ShellExecute(hwnd, "open", "plik", NULL, NULL, SW_SHOWNORMAL) ;

    Taki sposób nie jest najlepszym rozwiązaniem, myślę, że zastosowanie ShellExtensions powinno dać wymarzony efekt...

    Pozdr

  17. Hej,

    Pierwsze co trzeba zrobić, aby wyświetlać na przycisku bitmape to nadać buttonowi odopowiedni styl, czyli BS_BITMAP. Przedtem musisz jeszcze do zmiennej HBITMAP załadować bitampę i w jakimś miejscu programu ustawić ją dla tego przycisku, czyli wysłać komunikat BM_SETIMAGE.
    Taki mały przykładzik:

    //----
    HBITMAP hBitmap ;
    HWND przycisk ;
    //----
    
    //----
    hBitmap = LoadBitmap(hInstance, "bitmapa") ;
    hPrzycisk = CreateWindow(..........BS_BITMAP.........) ;
    //----
    
    //----
    SendMessage (przycisk, BM_SETIMAGE, (WPARAM) IMAGE_BITMAP, (LPARAM) hBitmap ) ;
    //----
    

    I to by było na tyle...
    pozdrawiam ;)

  18. witam

    Myślę, że rozwiązanie Nicona jest najlepsze...dopisze tylko, że są funkcje, które same sprawdzają czy wartość jest cyfra, lierą...itp ich definicje znajdziesz w pliku nagłówkowym ctype.h. Oto niektóre z tych funkji:

    int isalpha (int c) - czy litera
    int islower (int c) - czy mała litera
    int isupper (int c) - wielka litera
    int isdigit (int c) - cyfra dziesiętna
    int idpunct (int c) - znak intrerpunkcyjny....

    i tak dalej...

    Pozdrawiam

×
×
  • Utwórz nowe...