Software FX Posted August 31, 2000 Report Share Posted August 31, 2000 dc.GetDeviceCaps() Is not MFC ???? MFC keeps TWO hDC inside de CDC, that's why you get a result. The print preview in MFC DOES crate a memory DC. If you are printing directly to a Printer DC, just remove all scalling (map one logical pixel to 1 physical pixel) and call Paint with CPAINT_PRINT, Chart FX will make the appropriate conversions. -- Frank SFX "Petr Prikryl" <Answer.via.news.please.prikrylp@nospam.skil.nospam.cz.nospam> wrote in message news:gR8ukMmEAHA.1416@sfxserver.softwarefx.com... > (the shortened version of the original article can be > found at the end of this message) > > Thanks, Frank, for clarifying the reasons. However, > it seems to me that this does not fully fit to the > observed situation. I think that I need more > information about how the size of fonts is > recalculated. Could you comment this or could you > point to some documentation? > > (BTW, I did read the Q1381013, but it was rather > difficult to access the page. The search engine > does not show any link -- probably the missing > title of the document is the reason. I did access > the page finally using > http://support.softwarefx.com/kb/138/1/013.htm > > There probably is the logical error in the > article. The second argument in the SetWindowExt() > should probably contain nPrnHeight, not the > nPrnWidth. Another minor problem is that I had to > replace tabs for spaces to be able to print the > HTML page; some code falled out of the right > margin of the paper.) > > After the following details, I do ask another > question that is related to scaling the fonts when > the chart is displayed on the screen in a preview > window (hand written code) with THE ZOOM FACTOR > SETTING REQUIRED. > > > Details on the problem with scaling fonts > ----------------------------------------- > > I did observe the problem of font scaling in the > situation when the device context was directly > related to a physical printer. When I called the > following just before the chart Paint()... > > int xOutRes = dc.GetDeviceCaps(LOGPIXELSX); > int xOutWidth = dc.GetDeviceCaps(HORZRES); > > spChartFX->Paint(reinterpret_cast<long>(dc.m_hDC), > rcChart.left, rcChart.top, > rcChart.right, rcChart.bottom, > ChartfxLib::CPAINT_PRINT, 0); > > I did obtain xOutRes equal to 600 (HP LaserJet 5) and > xOutWidth equal to 4727 (i.e. 7.8783333... inch) which > corresponds well with the 200mm returned when called > dc.GetDeviceCaps(HORZSIZE). > > The dc is the instance of WTL::CDCHandle. I do not > use MFC, nor any "preview code" implemented in WTL. > In other words, there is no special code hidden > behind the scene, and the device context is the > printer's device context (not the memory DC). > > I think that the behaviour is somehow related to the > mapping mode which was set as follows (before the > Paint()): > > dc.SetMapMode(MM_ANISOTROPIC); > > dc.SetWindowExt(2540, 2540); > dc.SetViewportExt(dc.GetDeviceCaps(LOGPIXELSX), > dc.GetDeviceCaps(LOGPIXELSY)); > > Here the 2540 is one inch in hundredths of > milimeters. > > When the same result is printed (physically) to > LaserJet 3 and LaserJet 5, then the default height of > the Y-axis labels is about 0.5 mm for the 300 dpi > printer and about 0.25 mm for 600 dpi printer (hard > to measured, the height on 600dpi printer seems to be > the half of height on 300dpi printer). > > I admit that I am not fluent with mapping modes and > there may be some error "between the chair and the > keyboard". But what mistake am I doing? > > > Related question to displaying chart with scaled font > on the screen > ----------------------------------------------------- > > This question is closely related to the upper question. > I tried to play with the code based on the one from > the Q1381013 article in situation when the preview is > displayed on the display. > > The problem is that the zoom capability is required > here. In other words, the user can choose how big the > preview window or what even what part of the page he > or she wants to look at (window with scrolls with > high magnification -- only the smal part of the page > is visible). Here, the font of the chart should be > scaled according to the current mapping mode > (Window/Viewport ratio). > > The chart part of the page should behave as if it was > a picture (fonts scaled to the size for the final > output device). The difference, in comparison with > the hypothetical picture, is no dependency on the > display and/or final output device resolution. I.e., > the chart should be painted again, but the ratio of > font size to the chart size should be preserved. > > I was not successfull to implement the above > mentioned feature. Fonts were always scaled so that > they looked the same size on the display > independently on the zoom factor of the preview. > > Am I doing a mistake or is it the CFX98 feature? > > > Thanks for explanation, > > Petr > > > "Francisco Padron" <frankp@softwarefx.com> wrote... > > > > When CPAINT_PRINT is specified the size of the fonts > > is recalculated based on the resolution of the > > current device context vs. the screen resolution. If > > the device context you are passing is a Memory DC > > (e.g Metafile) this can not be obtained therefore > > the conversion will not be made. > > > > Check out article Q1381013 for more details > [...] > > > > "Petr Prikryl" [...] wrote ... > [...] > > > > > > I do have problem when calling the Paint(). The font > > > which is used for labeling axes (I did not try other > > > fonts) does not scale for different device context > > > while the chart does. > [...] > > > The device context uses MM_ANISOTROPIC mapping mode. > > > The logical coordinates are in 1/100 of mm. The > > > ViewportExt and WindowExt are set differently for a > > > display and for various printers to obtain 1:1 > > > visual appearance. The auxiliary ruler marks and > > > some text (painted using the device context) show > > > that the mapping works as desired both on the > > > display and on the tested printers. > > > > > > The chart displayed by Paint() fills correctly the > > > given rectangular area leaving only some (expected) > > > small margins. However, the font on 300 DPI printer > > > is very small. The chart fills the given rectangle > > > correctly again. In other words, the ratio between > > > the font size and the chart-box size changes. > > > I tried to choose a different font name and size, > > > but the problem remains. > [...] > > -- > Petr Prikryl, SKIL s.r.o., e-mail: prikrylp at skil dot cz > Please, don't reply via e-mail. > > > Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.