Skocz do zawartości

Snake

Użytkownicy
  • Postów

    1 445
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Snake

  1. Snake

    Nasze strony

    Erm, to jest Chrome :)
  2. Snake

    Nasze strony

    Nah, po wyłączeniu wszystkich rozszerzeń nadal to samo :P
  3. Snake

    Nasze strony

    Prezentuje się świetnie ;) Tylko jest jeden glitch na podstronie download: https://gmclan.org/up541_6_zrzut_ekranu.html
  4. Snake

    VC++ 2010 EE

    Tego "custom wizarda" też nie było? Standardowe szablony z folderu "VC\VCWizards\AppWiz" znajdującego się tam, gdzie instalowałeś VC++, z tego co widzę to są zrobione w taki sam sposób co opisuje artykuł, który dałem powyżej. Może spróbuj utworzyć swój szablon na ich podstawie.
  5. Snake

    VC++ 2010 EE

    W menu "File" jest opcja "Export template...", ale z tego co kojarze to nie działało z projektami C++. Jest alternatywne rozwiązanie, ale nie jestem pewien czy będzie działać z Express: http://msdn.microsoft.com/en-us/library/bhceedxx.aspx
  6. ... GML var pathSystem32; pathSystem32 = environment_get_variable( "WINDIR" ) + "\system32"; file_copy( "X:\Jakiś\Plik.omg", pathSystem32 + "\Plik.omg" );
  7. Użyj funkcji environment_get_variable przekazując nazwę jednej z zmiennych środowiskowych: http://en.wikipedia.org/wiki/Environment_v...crosoft_Windows (bez procentów)
  8. Snake

    pytania

    Ten, do którego przekazujesz wskaźnik na "buff", czyli lpBuffer. Tylko zmień rozmiar bufora podany w nSize bo long ma 4 bajty, nie 255. long buff = 12345678; WriteProcessMemory(hProcess, (LPVOID)address, (LPVOID) &buff, sizeof( buff ), 0);
  9. Snake

    C czy C++

    Odpycha? Co do programów to ja bym jednak radził Ci nauczyć się C#, będzie Ci łatwiej ogarnąć samo tworzenie aplikacji a przy tym nauczysz się też programować obiektowo. Ogólnie łatwiej Ci będzie wystartować bo masz większość rzeczy pod nosem i składnia nie jest jakoś specjalnie trudna do nauczenia (w dodatku nie musisz sobie zawracać głowy takimi rzeczami jak np. wskaźniki, zarządzanie pamięcią itd. z czym wiele początkujących ma problemy). Jak już byś załapał więcej to gry też możesz za jego pomocą tworzyć np. z użyciem XNA. Jeśli chodzi o C to masz tam bardzo ubogą bibliotekę standardową, więc będzie Ci znacznie ciężej w porównaniu do C++ -- jak już wybierasz pomiędzy tymi dwoma językami to bierz C++, możesz na początku w nim pisać takim samym stylem jak w C (czy GML-u), czyli proceduralnie, jeśli masz problemy z obiektowością i dodatkowo masz troszkę lepszą bibliotekę na start (no i później do dyspozycji wiele fajnych ficzerów jak właśnie obiektowość czy szablony). Jeśli jednak wybierzesz C#, to w późniejszym czasie radzę się też nauczyć tego C czy C++ (wtedy Ci też o wiele szybciej pójdzie z nauką języka), naprawdę warto wiedzieć jak to wszystko co wcześniej robiłeś działa niskopoziomo i ogólnie warto znać różne języki a nie poprzestawać na jednym (rzekłbym nawet, że dzięki temu będziesz miał większe umiejętności jeśli chodzi o programowanie) ;) EDIT: Javy też nie lubię (sam nie wiem czemu, być może dlatego, że większość programistów posługujących się tym językiem to zupełne cioty :P). A C# uwielbiam (jednak nic nie przebije C++, ha!)
  10. Snake

    C czy C++

    A co masz zamiar pisać ?
  11. Właściwie, to pozycja danych o wymiarach w JPG zmienia się w zależności od pliku. Napisałem skrypt, który wyszukuje te dane i je zwraca: jpg_get_dimensions GML // argument0: sciezka do pliku jpg // zwraca: wysokosc i szerokosc spakowana w DWORDa, lub 0 jeśli nastąpił błąd var file, width, height, blockType, blockSize, result; result = 0; file = file_bin_open( argument0, 0 ); if ( file_bin_read_byte( file ) != $FF && file_bin_read_byte( file ) != $D8 ) { show_message( "Nie rozpoznano pliku jpg." ); file_bin_close( file ); return 0; } while ( true ) { if ( file_bin_read_byte( file ) == $FF ) { blockType = file_bin_read_byte( file ); if ( blockType == $C0 ) { file_bin_seek( file, file_bin_position( file ) + 3 ); height = (file_bin_read_byte( file ) << 8) | file_bin_read_byte( file ); width = (file_bin_read_byte( file ) << 8) | file_bin_read_byte( file ); result = (width << 16) | height; file_bin_seek( file, file_bin_position( file ) - 7 ); } else if ( blockType == $D9 ) break; blockSize = (file_bin_read_byte( file ) << 8) | file_bin_read_byte( file ); file_bin_seek( file, file_bin_position( file ) + blockSize - 2 ); } else break; } file_bin_close( file ); return result; potem żeby odpakować te wartości możesz użyć tych skryptów: get_width GML // argument0: wartosc zwrocona przez jpg_get_dimensions // zwraca: szerokosc return argument0 >> 16; get_height GML // argument0: wartosc zwrocona przez jpg_get_dimensions // zwraca: wysokosc return argument0 & $FFFF; no i przykład użycia: GML var dimensions; dimensions = jpg_get_dimensions( get_open_filename( "Pliki jpg|*.jpg", "" ) ); show_message( "Szerokość: " + string( get_width( dimensions ) ) + "#Wysokość: " + string( get_height( dimensions ) ) ); powinno trybić, sprawdzałem na kilku różnych plikach i było OK :P
  12. Huh, ten splitter robi praktycznie to samo, co narzędzie, które piszę. Nawet dane wyjściowe wyglądają bardzo podobnie :D Cóż, widzę że nie ma sensu się dłużej męczyć nad moim programem :P
  13. Większą wadą jest przerażająco niska wydajność czytania i zapisywania plików, jako że w GM binarnie można wczytywać/zapisywać jedynie po jednym bajcie :F
  14. Pograłem jeszcze trochę i z plemnikami dzieje się to samo od czasu do czasu ;p
  15. Jakiś bug -- u mnie komórka przy obracaniu mutuje:
  16. Może bez optymalizacji kompilator by wygenerował inny kod dla każdej z tych konstrukcji, tak to to wszystko zostanie uznane za jedno i to samo i kompilator wygeneruje zależnie od kontekstu kod najlepszy dla danego trybu optymalizacji (rozmiar, szybkość). Tak więc to niema znaczenia z którego wariantu się tu skorzysta, to samo tyczy się:
  17. Co do taba: http://www.tannerwilliamson.com/wp-content..._batch_file.png te wyrównanie skrótów klawiszowych do prawej (np. "Ctrl+N") jest zrobione w taki sposób: "New\tCtrl+N" "Open\tCtrl+O" "Save\tCtrl+S" itd. w GM-ie zamiast tego "\t" można spokojnie wstawić znak tabulatora do stringa (albo to zrobić np. w taki sposób: "New" + chr( 9 ) + "Ctrl+N").
  18. Nie wiem, czy idzie tak zrobić z Twoim DLL-em ale w przykładzie tego nie widziałem, tak więc co dodać: - możliwość podpinania submenu pod itemy - włączanie/wyłączanie itemów - itemy z możliwością zaznaczania - ikonki do itemów i może jeszcze możliwość ustawienia domyślnego itema w menu ("default menu item"). No i mógłbyś połączyć "Box_TransferProc( window_handle() )" z funkcją od ładowania biblioteki, nie widzę powodu żeby to wywoływać oddzielnie :P Aha, w nazwach itemów z submenu można używać taba żeby wyrównać skrót klawiszowy (np. "Nowy...\tCTRL+N", gdzie "\t" to tab) -- można by o tym wspomnieć w dokumentacji.
  19. HMENU menuMain = CreateMenu(); MENUINFO menuInfo; menuInfo.cbSize = sizeof( menuInfo ); menuInfo.fMask = MIM_STYLE; GetMenuInfo( menuMain, &menuInfo ); menuInfo.dwStyle |= MNS_NOTIFYBYPOS; SetMenuInfo( menuMain, &menuInfo ); Po utworzeniu menu za pomocą CreateMenu.
  20. Co umieścić, SetMenu? Umieść gdzie chcesz, po zainicjalizowaniu całego menu najlepiej.
  21. Podpina. Jeśli WM_COMMAND obsługuje to w czym problem? Jak wolisz obsługiwać komunikat WM_MENUCOMMAND zamiast tamtego to dodaj styl MNS_NOTIFYBYPOS do głównego menu.
  22. Coś musisz robić nie tak, mi działa bez problemu używając SetWindowLong. Napisałem dla testów coś takiego: #include <windows.h> WNDPROC g_procPrev; LRESULT CALLBACK WndProc( HWND aWnd, UINT aMsg, WPARAM aWparam, LPARAM aLparam ) { char character[2] = {0}; switch ( aMsg ) { case WM_CHAR: character[0] = (char) aWparam; MessageBoxA( aWnd, character, "", 0 ); break; case WM_LBUTTONDOWN: MessageBoxA( aWnd, "Click.", "", 0 ); } return CallWindowProc( g_procPrev, aWnd, aMsg, aWparam, aLparam ); } extern "C" __declspec( dllexport ) double Subclass( double aHandle ) { g_procPrev = (WNDPROC) SetWindowLong( (HWND) (DWORD) aHandle, GWL_WNDPROC, (LONG) WndProc ); return 0.0; } i jest ok.
×
×
  • Dodaj nową pozycję...