Toon posts:

[C++/win32] Richedit printen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo allemaal,

Ik ben bezig met een programma waarin een richedit component verwerkt zit, eigenlijk een simpele tekstverwerker en nu heb ik het helemaal voor elkaar om tekst op te maken en eigenlijk is mijn programma dan ook zo goed als af.

Het enige waar ik nog mee worstel is dat ik eerst geen richedit control had maar een gewone edit control, en dus ook de print functie daar op afgesteld had, maar ik wil nu ook graag formatted text printen, heeft iemand enig idee hoe ik dit aan moet pakken?
Misschien iemand met een code voorbeeld? _/-\o_

P.S. Deze jonge man maakt geen gebruik van MFC :9

EDIT: even iets duidelijker gemaakt

[ Voor 3% gewijzigd door Verwijderd op 27-12-2006 14:40 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
En wat heb je al geprobeerd? Heb je al gezocht? Iets gevonden? Wat werkte er niet?
Heb je hier al eens gekeken? Want dat levert mij een Microsoft artikel dat volgens mij precies beschrijft wat jij zoekt.

Ik zie dat je nieuw bent @GoT; Welkom in dat geval :w
Kijk even de Programming Beleid Quickstart door om te zien wat wij hier een van je verwachten voordat je een topic opent ;)

[ Voor 53% gewijzigd door RobIII op 27-12-2006 15:00 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

@RobIII: dat MS artikel gaat over een Richedit in .NET, TS werkt met c++/mfc.

Maar daar is op de MS site ook wel wat over te vinden.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Verwijderd

Topicstarter
RobIII schreef op woensdag 27 december 2006 @ 14:58:
En wat heb je al geprobeerd? Heb je al gezocht? Iets gevonden? Wat werkte er niet?
Ohwja, dat is misschien wel handig om te vermelden, maar eerst gebruikte ik een vrij simpele print functie om de tekst uit een edit control te printen maar toen ik van de edit control een richedit control maakte kreeg ik of
1.de tekst zonder opmaak uit de printer rollen
of als ik het een klein beetje aanpaste door de tekst uit de Richedit control te streamen:
2.de tekst met de opmaak tags, maar niet geinterpreteerd, ik kreeg dus alle RTF codes te zien, en ik wilde die juist niet zien, maar wel opgemaakte tekst
Heb je hier al eens gekeken? Want dat levert mij een Microsoft artikel dat volgens mij precies beschrijft wat jij zoekt.
Dat artikel heb ik gezien, ware het niet dat het hier om VB.NET en C#.NET gaat en ik daar niet zo in thuis ben, en ik eigenlijk zoek naar een oplossing voor C++/Win32;)
Ik zie dat je nieuw bent @GoT; Welkom in dat geval :w
Bedankt :*) :)
Kijk even de Programming Beleid Quickstart door om te zien wat wij hier een van je verwachten voordat je een topic opent ;)
Ik snap dat je doelt op doen van voor onderzoek voordat je een vraag stelt, maar dat heb ik ook echt al wel vrij uitgebreid proberen te doen... ;)

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
zwippie schreef op woensdag 27 december 2006 @ 15:04:
@RobIII: dat MS artikel gaat over een Richedit in .NET, TS werkt met c++/mfc.

Maar daar is op de MS site ook wel wat over te vinden.
offtopic:
Ik zou toch zweren dat ik daarnet C# las :X
Kerst-dufheid denk ik :P
Verwijderd schreef op woensdag 27 december 2006 @ 15:10:
Ik snap dat je doelt op doen van voor onderzoek voordat je een vraag stelt, maar dat heb ik ook echt al wel vrij uitgebreid proberen te doen... ;)
Het is hier op GoT gebruikelijk dat dan te vermelden zodat we niet allemaal vragen gaan stellen over dingen die je allang geprobeerd hebt enzo ;) Scheelt ons (en jou) een hoop tijd ;)

[ Voor 36% gewijzigd door RobIII op 27-12-2006 15:11 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
RobIII schreef op woensdag 27 december 2006 @ 15:10:

Het is hier op GoT gebruikelijk dat dan te vermelden zodat we niet allemaal vragen gaan stellen over dingen die je allang geprobeerd hebt enzo ;) Scheelt ons (en jou) een hoop tijd ;)
Mja, ik denk dat die kerst dufheid besmettelijk is;)

Verwijderd

Topicstarter
Het is gelukt(zwippie nog bedankt voor de link)

Ik heb nu alleen nog 2 problemen:
1. Ik zou graag een printen met een ander lettertype
2. Ik krijg mijn tekst wel geprint, maar daarna begint mijn printer als een gek lege blaadjes uit te spuugen....:S heeft iemand enig idee hoe ik dat op moet lossen?

Dit is mijn Print functie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
BOOL Print(HWND hwnd)
      {
    PRINTDLG pd;
    ZeroMemory(&pd, sizeof(PRINTDLG));

    // populate it
    pd.lStructSize  = sizeof(PRINTDLG);
    pd.hwndOwner    = hwnd;
    pd.hDevMode     = NULL;
    pd.hDevNames    = NULL;
    pd.Flags        = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC;
    pd.nCopies      = 1;
    pd.nFromPage    = 1;
    pd.nToPage      = 1;
    pd.nMinPage     = 1;
    pd.nMaxPage     = 0xFFFF;

    // bail out on cancel or error
    if (!PrintDlg(&pd)) return FALSE;
              
      FORMATRANGE fr;
      int         nHorizRes = GetDeviceCaps(pd.hDC, HORZRES),
                  nVertRes = GetDeviceCaps(pd.hDC, VERTRES),
                  nLogPixelsX = GetDeviceCaps(pd.hDC, LOGPIXELSX),
                  nLogPixelsY = GetDeviceCaps(pd.hDC, LOGPIXELSY);
      LONG        lTextLength;   // Length of document.
      LONG        lTextPrinted;  // Amount of document printed.

      // Ensure the printer DC is in MM_TEXT mode.
      SetMapMode ( pd.hDC, MM_TEXT );

      // Rendering to the same DC we are measuring.
      ZeroMemory(&fr, sizeof(fr));
      fr.hdc = fr.hdcTarget = pd.hDC;

      // Set up the page.
      fr.rcPage.left     = 0;
      fr.rcPage.top      = 0;
      fr.rcPage.right    = (nHorizRes/nLogPixelsX) * 1440;
      fr.rcPage.bottom   = (nVertRes/nLogPixelsY) * 1440;

      // Set up 1" margins all around.
      fr.rc.left   = fr.rcPage.left + 1440;  // 1440 TWIPS = 1 inch.
      fr.rc.top    = fr.rcPage.top + 1440;
      fr.rc.right  = fr.rcPage.right - 1440;
      fr.rc.bottom = fr.rcPage.bottom - 1440;

      // Default the range of text to print as the entire document.
      fr.chrg.cpMin = 0;
      fr.chrg.cpMax = -1;

      // Set up the print job (standard printing stuff here).
      DOCINFO di;
    ZeroMemory(&di, sizeof(di));
    di.cbSize       = sizeof(DOCINFO);
    di.lpszDocName  = "Type-in Document";
    di.lpszOutput   = NULL;
    di.fwType       = 0;
    

      // Start the document.
      StartDoc(pd.hDC, &di);

      // Find out real size of document in characters.
      lTextLength = SendMessage (hEdit, WM_GETTEXTLENGTH, 0, 0 );

      do
         {
         // Start the page.
         StartPage(pd.hDC);

         // Print as much text as can fit on a page. The return value is
         // the index of the first character on the next page. Using TRUE
         // for the wParam parameter causes the text to be printed.

  
         lTextPrinted = SendMessage(hEdit,EM_FORMATRANGE,TRUE,(LPARAM)&fr);

         // Print last page.
         EndPage(pd.hDC);
         
         // If there is more text to print, adjust the range of characters
         // to start printing at the first character of the next page.
            if (lTextPrinted < lTextLength)
            {
            fr.chrg.cpMin = lTextPrinted;
            fr.chrg.cpMax = -1;
            }
         }
      while (lTextPrinted < lTextLength);

      // Tell the control to release cached information.
      SendMessage(hEdit, EM_FORMATRANGE, 0, (LPARAM)NULL);

      EndDoc (pd.hDC);
      DeleteDC(pd.hDC);

      return TRUE;
      }
Pagina: 1