Skocz do zawartości

Storm

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

Posty napisane przez Storm

  1. Ja bym zamiast petli while obslugiwał komunikaty od Timera i w ten sposob co jakis czas poruszał zającami itp. Nie było by problemu z odbiorem innych komunikatów. A tak u ciebie nie są pewnie pobierane kolejne komunikaty bo cały czas jest obsługiwany ten jeden tj. wybranie z menu "Simulat".Jego obsługa to pewnie ta nieskończona pętla,więc się nie skończy i dlatego inne komunikaty nie są obsługiwane..Przynajmniej tak mi się wydaje.Ale moge się mylić.

    Pozdrawiam.

  2. Witam troszke przerobilem twoj kod powinno byc ok

    //---------------------------------------------------------------------------
    #include <windows.h>
    #include <stdio.h>
    #include <stdarg.h>
    #define MAX_KEY_LENGTH          255
    #define MAX_VALUE_NAME         16000
    #define MAX_PATH               16000
    //---------------------------------------------------------------------------
    int MessageBoxPrintf(CHAR * szCaption,CHAR * szFormat, ...)
    {
      va_list wsk_na_liste_arg;     
      CHAR bufor[1024]; 
      va_start(wsk_na_liste_arg,szFormat);
      _vsnprintf(bufor,sizeof(bufor),szFormat,wsk_na_liste_arg);
      va_end(wsk_na_liste_arg);
            return MessageBox(NULL,bufor,szCaption,0);
    }
    //---------------------------------------------------------------------------
    WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
     //
            HKEY hKey; 
        if( RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\jajo",0,KEY_ALL_ACCESS,&hKey) ==
                                                                                    ERROR_SUCCESS ) 
            { 
        TCHAR    achKey[MAX_KEY_LENGTH];   // buffer for subkey name 
        DWORD    cbName;                   // size of name string 
        TCHAR    achClass[MAX_PATH] = TEXT("");  // buffer for class name 
        DWORD    cchClassName = MAX_PATH;  // size of class string 
        DWORD    cSubKeys=0;               // number of subkeys 
        DWORD    cbMaxSubKey;              // longest subkey size 
        DWORD    cchMaxClass;              // longest class string 
        DWORD    cValues;              // number of values for key 
        DWORD    cchMaxValue;          // longest value name 
        DWORD    cbMaxValueData;       // longest value data 
        DWORD    cbSecurityDescriptor; // size of security descriptor 
        FILETIME ftLastWriteTime;      // last write time 
      
        DWORD i, retCode; 
      
        TCHAR  achValue[MAX_VALUE_NAME]; 
        DWORD cchValue = MAX_VALUE_NAME; 
      
        // Get the class name and the value count. 
        if( (retCode = RegQueryInfoKey( 
            hKey,                    // key handle 
            achClass,                // buffer for class name 
            &cchClassName,           // size of class string 
            NULL,                    // reserved 
            &cSubKeys,               // number of subkeys 
            &cbMaxSubKey,            // longest subkey size 
            &cchMaxClass,            // longest class string 
            &cValues,                // number of values for this key 
            &cchMaxValue,            // longest value name 
            &cbMaxValueData,         // longest value data 
            &cbSecurityDescriptor,   // security descriptor 
            &ftLastWriteTime)       // last write time 
                    )==ERROR_SUCCESS)
                 {
               //RegCloseKey(hKey); 
               int liczba = (int) cValues; 
               LPCTSTR ile; 
               LPCTSTR tresc; 
               for (int i=0;i<liczba;i++) 
                 { 
                  cchValue = MAX_VALUE_NAME; 
                  achValue[0] = '\0'; 
                  retCode = RegEnumValue(hKey, i, 
                    achValue, 
                    &cchValue, 
                    NULL, 
                    NULL, 
                    NULL, 
                    NULL); 
    
                  MessageBox(NULL,achValue,"info",MB_OK); 
                 } 
               //ile = liczba + "adas"; 
               //MessageBox(NULL,ile,"Ile",MB_OK);
                             MessageBoxPrintf("Ile","Znaleziono %d wartosci",liczba);
                 }
               RegCloseKey(hKey); 
            } 
            return 0;
    }
    //---------------------------------------------------------------------------

    Pozdrawiam

  3. Witam

    Uwazam,ze nie jest dobrym pomyslem czytanie ikonki z pliku,bo zawsze plik,ktos moze usunac,lepjej ja dodac do zasobow,wtedy sie wkompiluje w execa.Nie jest to trudne.

    W Visualu wybierz
    Project->Add Resource
    Wybierz Icon nastepnie Import
    Pojawi ci sie okienko gdzie mozesz wyszukac swoj plik *.ico
    Po wskazaniu pliku i wybraniu open ikonka doda sie do zasobow.

    Jak obejrzec zasoby?
    W Visualu wybierz
    View->Resource View

    Tam masz takie drzewko zasobow(nazwa_pliku.rc)
    Wybierz z niego Icon
    Powinno ci sie dodac tam ikonka
    Bedziesz widział w tym drzewku jej identyfikator zapewne IDI_ICOIN1

    Teraz wystarczy wpisac w programie
    zamiast
    wndclass.hIcon = LoadIcon(NULL, IDI_WINLOGO);
    to
    wndclass.hIcon = LoadIcon (hInstance,MAKEINTRESOURCE(IDI_ICON1));

    Pozdrawiam.

  4. zmarax napisał:
    Do RafalS: na ftp.winapi.org nie ma źródeł programów :( Proszę o podanie jakiejś strony z gotowym żródłem programu (do ściągniecia gotowych plików żróðłowych) bo nie tylko ja mam taki problem, wiele osób boryka się z tym samym...Z góry dzięki

    Bo ja podałem adres ktory mozesz wpisac,gdy uzywasz klienta ftp(np Total Comander ma takowego),a codeguy podal link,z ktorego mozna sie dostac na serwerek przez przegladarke.

    Dla mnie wygodniejszy jest ten pierwszy sposob.

    Pozdrawiam

  5. Ja bym powiedział konstruktorem klasy,której obiekt zdefiniowano globalnie.Bo definicja klasy moze być na zewnątrz main'a,ale konstruktor pracuje dopiero gdy jest tworzony obiekt.Więc chodzi o obiekt danej klasy nie klasę(klasa to typ).

  6. Nie wiem czy o to ci chodzi?Czy chodzi o to aby instrukcje zawarte w konstruktorze były wykonane przed pierwszą instrukcją programu?
    Jeżeli tak to wystarczy obiekt danej klasy zadeklarować globalnie.

    Przykład

    #include<iostream>
    using namespace std;
    //---------------------------------------------------------------------------
    class klasa
    {
      public:
      klasa() ;  //konstruktor
    };
    //---------------------------------------------------------------------------
    klasa::klasa()
    {
      cout << "Jestem konstruktorem" <<endl;
    }
    //----------------------------------------------------------------------------
    klasa obiekt; //definicja zmiennej globalnej
    int main()
    {
      cout << "Pierwsza instrukcja"<<endl;
      cin.get();
            return 0;
    }
    //---------------------------------------------------------------------------
    

    Pozdrawiam

  7. Witam

    W swoim programie zmień linie
    klasaokna.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
    na
    klasaokna.lpszMenuName = "Menu";

    A co do przykładów to pare topików temu ktoś podawał adres serwerka ftp

    host: ftp.winapi.org
    Można się logować anonimowo.

    Off topic:
    Dzięki dobrzy ludzie za te przykłady na pewno się przydadzą.

    Pozdrawiam

  8. Witam

    Mam taki problemik.Chciałem wyświetlić MessageBoxa który niezaleznie od wersji system(angielska,polska) wyświetli mi napisy w klawiszach po polsku(czyli TAK NIE zamiast YES NO).Chcialem uzyc funkcji MessageBoxIndirect opisanej tu https://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/dialogboxes/dialogboxreference/dialogboxfunctions/messageboxindirect.asp ale napisy w klawiszach caly czas sa wyswietlane po angielsku.Używam angielskiej wersji systemu(xp). Co robie nie tak?

    const MSGBOXPARAMS MsgBoxParams=
              {
                      sizeof(MsgBoxParams),
              NULL,
                      NULL,
                      "Czy na pewno chcesz wyjść ?",
                      "Edytor Plansz",
                      MB_YESNO | MB_ICONQUESTION,
              NULL,
                      NULL,
                      NULL,
                      MAKELANGID(LANG_POLISH,SUBLANG_DEFAULT)
              };
    
    //obsługa komunikatu WM_CLOSE
    CASE  WM_CLOSE:
    
              if(IDYES==MessageBoxIndirect(&MsgBoxParams))
                      DestroyWindow(hwnd);                      
              return 0;
    

    Z góry dzięki za odpowiedź.
    Pozdrawiam

  9. No wiec tak sprawa wyglada tak,ze kumpel zmienil sobie rozdielczosc na zbyt wysoka i nic nie widział na ekranie,ktos mi podal link do programu z mieniajacego rozdielczosc(mozna go np wrzucic do autostartu lub rejestru w trybie awaryjnym, program robi to co ma robic).Wiec problem rozwiazany.Ale nie wiem jak on dziala bo nie mam zrodla.A jestem ciekaw w jaki sposob on zmienia rozdielczosc.

    Pozdrawiam

  10. Marcin napisał:
    ja mowilem o funkcji skladowej klasy(tu przyjazn ze swoja klasa jest bez sensu)

    A jak inaczej chcesz to zrobić, aby funkcja ta znajdywała się w klasie i nie była zaprzyjaźniona?

    Ja tylko napisalem,ze przeciez funkcja skladowa ma z definicji dostep do wszelkich skladnikow swojej klasy.Wiec po co deklarowac przyjazn klasy ze swoja funkcja skladowa.Moznaby powiedziec ze ona jest z definicji zaprzyjazniona ze swoja klasa.

    Odpowiedz na pytanie: Nie chce tego zrobic, bo nie da sie tego zrobic.

    Przyklad

    #include<iostream>
    #include<conio.h>
    //---------------------------------------------------------------------------
    class CVector {
         float x;
         float y;
         float z;
       public:
         CVector(float a=0,float b=0,float c=0) :x(a) , y(b) , z(c)  //konstruktor
           {
           }
         CVector operator*( float r )
           {
             x*=r;
             y*=r;
             z*=r;
             return (*this);
           }
    
         //friend CVector CVector::operator*( float r ); //czy opuscimy tę linie                                                                           //czy nie bez róznicy
                                  //i tak funkcja ma dostep do skladowych prywatnych
         wypisz()
           {
            std::cout<<"x="<<x<<"\n"<<"y="<<y<<"\n"<<"z="<<z;
            getch();
           }
    
    
    };
    //---------------------------------------------------------------------------
    int main()
    {
      CVector wek(1,1,1) ,
              wek2       ;
      wek2=wek*4;
      wek2.wypisz();
            return 0;
    }
    //---------------------------------------------------------------------------
    

    Pozdrawiam

  11. Witam.

    Operacja mnozenia jest operacja dwuargumentowa.Jesli przeladowujemy
    operator dwuargumentowy to funkcja przeladowujaca(operator):

    -musi miec dwa argumenty jesli jest zadeklarowana globalnie.

    -musi miec jeden argument jezeli jest zadeklarowana jako funkcja skladowa klasy(drugim argument bedzie niejawnie przekazywany przez wskaznik this do obiektu tej klasy).Jednym z argumentow zawsze musi byc obiekt tej klasy na rzecz ktorego funkcja przeladowujaca jest wywolywana.

    Deklaracja funkcji zaprzyjaznionej jest bez sensu,bo po co klasa ma deklarowac swoja wlasna funkcje skladowa(ma ona juz dostep do wszelkich skladnikow) jako zaprzyjazniona.

    Pozdrawiam

  12. Witam!

    Mam pytanka nawiazujace do tematu.

    W win98 i Dosie bylo cos takiego jak przerwanie zegarowe generowane od timera. Z tego powodu aplikacje nie moga otrzymywac komunikatu WM_TIMER nie czesciej niz 55ms.

    W NT ta warosc wynosi 10ms.

    1.A jak to jest w 2000/xp/2003 czy to tez jest 10ms?

    Bo w MSDN-ie pisza o wartosci USER_TIMER_MINIMUM:

    https://msdn.microsoft.com/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Timers/TimerReference/TimerFunctions/SetTimer.asp

    Ale ile ona wynosi?Ewentualnie jak to sprawdzic?

    Jesli bym chcial odmierzyc dokladnie czas w MSDN-ie znalazlem funkcje:
    QueryPerformanceCounter
    QueryPerformanceFrequency

    https://msdn.microsoft.com/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Timers/TimerReference/TimerFunctions/QueryPerformanceFrequency.asp

    2.Czy czestotliwosc uzywana w funkcji QueryPerformanceFrequency zalezy od czestotliwosci procesora? Bo gdybym chcial przenies programik na kompa o innej czestotliwosci procka to czy bedzie jakas zmiana w tej czestotliwosci?

    Dzieki za wszelkie odpowiedzi!

  13. Typy zmienoprzecinkowe charakteryzuja sie tym, ze maja skonczona dokladnosc w przeciwienstwie do calkowitych. Tzn iles bitow przypada na na ceche i iles na mantyse(Liczba=M*2^C).Poza tym 0.1 ma chyba nieskonczone rozwiniecie(gdybys chcial 0.1 przedstawic binarnie) w przeciwienstwie np do 0.5 .Stad ta niedokladnosc. Dlatego nigdy nie powinno sie dawac warunku rownosci dla liczb zmiennoprzecinkowych bo program pojdzie w maliny.

×
×
  • Utwórz nowe...