Skocz do zawartości

Surprise

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

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

    protokół gg

    Zainteresuj się winsock... pozdrawiam
  5. Pewnie, że się da...przeczytaj art o drukowaniu na tej strony...bodajże w dziale początkujący... pozdrawiam
  6. 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
  7. Surprise

    Problem [INI]

    mmmm mój pierwszy art...to były czasy...tu masz linka: https://www.winapi.org/index.php?option=content&task=view&id=44&Itemid=30
  8. kurde a właśnie miałem odpowiedź pisać ;)
  9. Surprise

    Okno dialogowe

    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%...
  10. Surprise

    zasoby internetowe

    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
  11. 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
  12. dzisiaj nie miałem chwilowo co robić (nie chciało mi się pisać arta...hehe, nie no spoko za pare dni dokończe..) i przetestowałem ten mój sposób na znikające bitmapy...ON..DZIAŁAAAA!!!! hehe pozdro
  13. Surprise

    Okno dialogowe

    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
  14. hej, kiedyś też trapił mnie ten problem. możesz sobie pościągać gotowe biblioteki z neta, ale najlepiej napisać samemu, jak? z tą sprawą skieruj się do NICONA, który kiedyś mi to ładnie wytłumaczył ;)
  15. 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.
  16. Surprise

    Okno dialogowe

    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
  17. 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
  18. 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
  19. Hej, myślę, że podczas wywołania komunikatu BM_SETIMAGE w lParam podaj pusty uchwyt do bitmapy lub poprostu NULL, to powinno załatwić sprawę chociaz nie jestem do końca pewny - nie testowałem :D , w ostateczności możesz zrobić szary obrazek...hehe Pozdrawiam
  20. 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
  21. 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
  22. Surprise

    ScreenShot

    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
  23. 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
  24. Surprise

    bitmapy i przyciski

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