Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Visual Studio 2005 i drukowanie w MFC (Język C++).

Czebu 10 Cze 2010 19:30 2487 4
  • #1 10 Cze 2010 19:30
    Czebu
    Poziom 19  

    Code:
    void CTerminarzView::drukuj(void)
    
    {
    /*
    Bledy wystepujace podczas debugowania:
    Pierwszy punkt przerwania programu:
    -      m_hDC   0x00000000 {unused=??? }   HDC__ *
          unused   CXX0030: Error: expression cannot be evaluated   
    -      m_pNextClass   0x00000000 {???}   CRuntimeClass *
          m_lpszClassName   CXX0030: Error: expression cannot be evaluated   
          m_nObjectSize   CXX0030: Error: expression cannot be evaluated   
          m_wSchema   CXX0030: Error: expression cannot be evaluated   
          m_pfnCreateObject   CXX0030: Error: expression cannot be evaluated   
          m_pfnGetBaseClass   CXX0030: Error: expression cannot be evaluated   
          m_pNextClass   CXX0030: Error: expression cannot be evaluated   
          m_pClassInit   CXX0030: Error: expression cannot be evaluated

    -      m_pNextClass   0x00000000 {???}   CRuntimeClass *
          m_lpszClassName   CXX0030: Error: expression cannot be evaluated   
          m_nObjectSize   CXX0030: Error: expression cannot be evaluated   
          m_wSchema   CXX0030: Error: expression cannot be evaluated   
          m_pfnCreateObject   CXX0030: Error: expression cannot be evaluated   
          m_pfnGetBaseClass   CXX0030: Error: expression cannot be evaluated   
          m_pNextClass   CXX0030: Error: expression cannot be evaluated   
          m_pClassInit   CXX0030: Error: expression cannot be evaluated   
    -      m_hDC   0x00000000 {unused=??? }   HDC__ *
          unused   CXX0030: Error: expression cannot be evaluated   
    -      m_hAttribDC   0x00000000 {unused=??? }   HDC__ *
          unused   CXX0030: Error: expression cannot be evaluated   

    Drugi punkt przerwania programu:
    -      lpszOutput   0x00000000 <Bad Ptr>   const char *




             CXX0030: Error: expression cannot be evaluated   
    -      lpszDatatype   0x00000000 <Bad Ptr>   const char *
             CXX0030: Error: expression cannot be evaluated   
    -      m_hDC   0x00000000 {unused=??? }   HDC__ *
          unused   CXX0030: Error: expression cannot be evaluated   
    -      m_pNextClass   0x00000000 {???}   CRuntimeClass *
          m_lpszClassName   CXX0030: Error: expression cannot be evaluated   
          m_nObjectSize   CXX0030: Error: expression cannot be evaluated   
          m_wSchema   CXX0030: Error: expression cannot be evaluated   
          m_pfnCreateObject   CXX0030: Error: expression cannot be evaluated   
          m_pfnGetBaseClass   CXX0030: Error: expression cannot be evaluated   
          m_pNextClass   CXX0030: Error: expression cannot be evaluated   
          m_pClassInit   CXX0030: Error: expression cannot be evaluated   
    -      m_pNextClass   0x00000000 {???}   CRuntimeClass *
          m_lpszClassName   CXX0030: Error: expression cannot be evaluated   
          m_nObjectSize   CXX0030: Error: expression cannot be evaluated   
          m_wSchema   CXX0030: Error: expression cannot be evaluated   
          m_pfnCreateObject   CXX0030: Error: expression cannot be evaluated   
          m_pfnGetBaseClass   CXX0030: Error: expression cannot be evaluated   
          m_pNextClass   CXX0030: Error: expression cannot be evaluated   
          m_pClassInit   CXX0030: Error: expression cannot be evaluated   
    -      m_hDC   0x00000000 {unused=??? }   HDC__ *
          unused   CXX0030: Error: expression cannot be evaluated   
    -      m_hAttribDC   0x00000000 {unused=??? }   HDC__ *
          unused   CXX0030: Error: expression cannot be evaluated   
    */
          UpdateData();
          CPrintDialog Wydruk(FALSE, PD_ALLPAGES, this);
          CDC dcDrukuj;
          DOCINFO drukuj_kalendarz;

          if(Wydruk.DoModal() == IDOK)
          {
             drukuj_kalendarz.cbSize = sizeof(drukuj_kalendarz);
             drukuj_kalendarz.lpszDocName = "Drukowanie miesiaca";
             drukuj_kalendarz.lpszOutput = NULL;
             drukuj_kalendarz.lpszDatatype = NULL;
             drukuj_kalendarz.fwType = NULL;
    //         dcDrukuj.SetMapMode(MM_TEXT); // tu wystepuje pierwszy blad, po kliknieciu OK
          // przy tym trybie y jest ujemne
          // odwzorowane na centymetry
          // 1 jednostka = 0,01 mm
          // 100 jednostek = 1cm
          };

    //      if(dcDrukuj.StartDoc(&drukuj_kalendarz) >= 0) // tu wystepuje drugi blad, po kliknieciu na OK lub Anuluj
    //      {
    //      dcDrukuj.StartPage();
    //      dcDrukuj.Ellipse(0, 0, 2000, -1000);
    //      dcDrukuj.EndPage();
    //      dcDrukuj.StartPage();
    //      dcDrukuj.Rectangle(1000, 1000, 20000, -1000);
          // Rysuj fakture
          // 10mm margines
    //      dcDrukuj.Rectangle(1000, -1000, 20000, -29000); // ramka marginesow
    //      CFont cz1, cz2;
    //      cz1.CreatePointFont(4500, "Tahoma");
    //      cz2.CreatePointFont(2500, "Tahoma");
    //      dcDrukuj.SelectObject(&cz1);

    //      CString txt;
    //      int liczba; - ta zmienna jest dodana do pliku naglowkowego
    //      txt.Format("Liczba z okienka = %d", liczba); // %d - to chyba jest parametr
    //      dcDrukuj.TextOut(10000, -3300, txt); // drukowanie nie liczby
    //      dcDrukuj.SelectObject(&cz2);
    //      dcDrukuj.Rectangle(2000, -5000, 10000, -8800);
    //      dcDrukuj.TextOut(2200, -5200, "Wystawiajacy");
    //      };
    }


    Program został napisany w Visual Studio 2005 (wersja Angielski, Stany Zjednoczone). System Windows XP Professional, konto Użytkownika zaawansowanego. Opcje New project -> MFC Application, w tej chwili wpisujemy nazwę dla tego projektu. Klikamy na Next i robimy ptaszka na opcji Single document. Reszta opcji jest standardowa.

    Ten algorytm jest od drukowania. Nie wiem, gdzie popełniam błąd. Nie wiem, co ten algorytm wydrukuje, ponieważ debuger z Visual Studio 2005 wyrzuca jakieś błędy. To nie są błędy składni. To chyba są błędy-pluskwy. Umieściłem je w komentarzach. Proszę, o podpowiedzi, co powinienem dopisać, a co wyrzucić, z tego algorytmu, żeby nie było tych pluskiew.

    Zapomniałem napisać najważniejsze. Ten algorytm, został napisany w języku C++ .

    0 4
  • #2 26 Wrz 2010 00:54
    Czebu
    Poziom 19  

    Z tym kodem jakoś sobie poradziłem. Ten algorytm ma trochę błędów logicznych. Po prostu nie zgadzają się pewne instrukcje.
    Widzę, że albo nikt nie jest w stanie pomóc, albo uważacie, że liczę na gotowe rozwiązania. Nic z tych rzeczy.
    Stworzyłem zwykły program (nie okno dialogowe). Poważnie scaliłem ten algorytm. Teraz mam problem z samym wydrukowaniem. Użyłem przycisku (klasa CButton). Po kliknięciu w ten przycisk, wyświetla się okno drukowania. Po kliknięciu na OK, wyskakuje mi kolejny błąd debugera. Ale na razie to nic. Może sobie z tym poradzę. Po naciśnięciu przycisku Anuluj. Nie ma żadnych błędów.
    W tym jest problem, że ten program nic nie przekazuje do drukarki. Wydaje mi się, że muszę użyć jakichś funkcji. Sprawdzałem w MSDN. Nic konkretnego nie znalazłem.
    Jakich funkcji muszę użyć, żeby móc napisać jakiś sensowny algorytm do drukowania? I z jakich klas skorzystać? Na to chyba mogę liczyć. Przecież nie proszę o gotowe programy.

    0
  • #3 03 Paź 2010 14:56
    one_eddie
    Poziom 25  

    Na portalach typu CodeProject jest dużo klas odpowiedzialnych za drukowanie, które z powodzeniem można wykorzystać. Dlaczego z nich nie skorzystasz?

    0
  • #4 03 Paź 2010 16:03
    Czebu
    Poziom 19  

    one_eddie napisał:
    Na portalach typu CodeProject jest dużo klas odpowiedzialnych za drukowanie, które z powodzeniem można wykorzystać. Dlaczego z nich nie skorzystasz?

    Postaram się skorzystać. Jeżeli coś jest. Zawsze to jakaś informacja.

    UpdateData() - usunąłem.
    StartPage() oraz EndPage(), chyba powinno się tam znaleźć.
    Nie wiem, czy te StartDoc() musi być. Jeżeli jest StartDoc(), to musi chyba być też EndDoc().
    Nie wiem, co się dzieje z tym kompilatorem. Te StartDoc() mu nie pasuje. Tak jakby nakazuje użycia StartDocA(). Jakoś to dziwnie interpretuje.
    Ważne też, jest z jakich klas są te funkcje. Ważne, z jakich struktur pochodzą niektóre parametry. Tylko ja już nie wiem, kogo lub czego mam się słuchać. Czy tych ludzi, którzy opisują to w tych książkach lub stronach internetowych, czy kompilatora? Chyba muszę się słuchać, kompilatora. Ale nadal nie jestem tego pewien. Nie wiem?

    0
  • #5 05 Paź 2010 15:25
    Eagle
    Poziom 23  

    Ciekawe że niektórym szybciej jest napisać długiego posta jak powyżej niż znaleźć to czego potrzebuje.
    Proponuję wpisać w google "MFC Print" pierwsza linka na jaką natrafiamy to "MFC Print Tutorial" jeśli nie znasz angielskiego proponuję kliknąć w link [Tłumaczenie strony ]. Poczytać i zadawać konkretne pytania jeśli się zrodzą.

    Pozdrawiam

    Eagle

    0
  Szukaj w 5mln produktów