|
A DIB section is a DIB that can be selected into a DC like a DDB. Besides giving you direct
access to the pixel data, it's also already in DIB form which makes writing a BMP file simple.
If memory is the problem though, that method won't help
Metafiles[^]
|
|
|
|
|
I don't think memory is the problem...
The machine slows down, but mem -is- alloc'd at the last step that needs to alloc.
at char *bits = new char [sizeVarWhateverThatWas];
But the bitmap is black (all 0s)
So GetDIBits() must not be workin... It works to get the size, but not to actually set the DI bits...
Dang.
All I can come up with is to pop a dialog with the biggest custom control that'll fit on screen,
draw in it, screen print, move it (the control is the size of the full printer bmp),
printscreen, move it, printscreen
then knit all the printscreens back together with mspaint
If you got any better ideas, i'm all ears
How does a metafile get me to a .bmp?
And my drawing code doesn't flip bits or set pixels, it does the usual graphics via HDCs...
...Steve
|
|
|
|
|
Steve Hazel wrote: So GetDIBits() must not be workin... It works to get the size, but not to actually set the DI bits...
Yeah...once you've written to a printer DC, I don't think you can read the resulting pixels
from the DC. They may not even be in RAM.
You can still always create your own dc and draw to it the same as you draw to a printer DC.
Way easier than the "draw in it, screen print, move it " method
Steve Hazel wrote: How does a metafile get me to a .bmp?
It doesn't. It gives you a metafile, a recording of all the drawing you do to a DC.
The docs explain it better than me ...
Enhanced metafiles provide true device independence. You can think of the picture stored in an
enhanced metafile as a "snapshot" of the video display taken at a particular moment.
This "snapshot" maintains its dimensions no matter where it appearson a printer, a plotter, the
desktop, or in the client area of any application.
You can use enhanced metafiles to store a picture created by using the GDI functions (including
new path and transformation functions). Because the enhanced metafile format is standardized,
pictures that are stored in this format can be copied from one application to another; and,
because the pictures are truly device independent, they are guaranteed to maintain their shape
and proportion on any output device.
That may even be what a printer device driver uses to avoid needing a huge chunk of memory for a
bitmap.
Anyway, if you need a BMP, you can create one at any time, at any size, by "playing" a metafile
on to a DC. A DIBSection could again be used to make saving easy.
|
|
|
|
|
Problem Solved !!
And, again, thanks for your help
What i do now is
- first create the memory HDC + HBITMAP,
- pass the hdc to my PrntGfx function that draws,
- THEN do the bitmapinfo/bitmapfile/GetDIBit()/file writing stuff
- (and cleanup, etc)
I have a few misc things to do like make sure the memory bitmap is WHITE like a printout and PrintGfx needs to be able to do ONE page at a time or somethin.
But there is now a WAY OUT of my hell
Thanks so much for kickin me in the right direction!!
...Steve
|
|
|
|
|
Cool That's what I was getting at using a DIBSection. With a DIBSection instead of a HBITMAP
it saves you the GetDIBits step. Otherwise it's the same.
Cheers!
Mark
|
|
|
|
|
More info on the differences between printer DCs and screen DCs...
About Printing[^]
|
|
|
|
|
(my english is not so good)
I'd like to draw a window in a game (like XFire) but I don't have an idea how to do this. I think something like a Hook would be great. Best would be a non-MFC Code (I usualy use normal Win32).
|
|
|
|
|
You say "semi transparent" but what do you mean?
1. A window that is not square?
2. A window with a glass effect ( blended with the background )?
|
|
|
|
|
semi means "half" also, so i understand it as if he asked the alpha=50%
|
|
|
|
|
but he also mentions a hook, which in my interpretation is a shape
|
|
|
|
|
no, the hook is not the shape. he talks about a Windows Hook here (the "hacking" method)
it seems that i was wrong in fact
-- modified at 12:54 Wednesday 7th February, 2007
|
|
|
|
|
possibly, but why would you need to "hack" a window to enable transparency?
|
|
|
|
|
no idea... but let's hope Parallan will read this
|
|
|
|
|
I ment a window that is not square, glass effect needn't to be
And with "hook" I ment, that I can change pixels after the Game has done a render step
|
|
|
|
|
If you need an example: http://media.xfire.com/xfire/xf/themes/XFire3/images/tour/tour_image_4.jpg
|
|
|
|
|
|
Sorry, I think you missunderstood:
This Examples dont work in Games, only in Windows!
I'd like to have something, that I can see while I'm playing a (3D)game
|
|
|
|
|
Parallan wrote: This Examples dont work in Games, only in Windows!
You said in your first post that you were using the win32 api. In fact you don't want to use regular windows but create your own that are semi-transparent ? Am I right ?
If yes, it would be really helpfull to know which libraries you are using (I suppose that you use a 3d engine). There could be support for basic GUI in it.
But anyway, you'll probably need to find a way to draw that yourself. What are you using for the rendering ? DirectX, OpenGL, ... ? (or maybe you don't do anything yourself and let the engine draw everything ?)
|
|
|
|
|
It would be enough, if I could draw pixels in front of the Game (at end of each render my pixels should be drawn).
-- modified at 7:16 Thursday 8th February, 2007
|
|
|
|
|
Like Cedric said, if you are using a graphics library there should already be methods to do what you want built in. If DirectX and OpenGL are too intimidating, try allegro[^] which is very easy to use.
Also, all of the links I gave to you are for creating non rectangular windows, which is what you asked for. The examples are not only for the main window, but for child windows. You need to use the code as a template, modify it and us it to create your own. It is very rare that you will find exactly what you need.
|
|
|
|
|
Does no one have an idea how to do this?
|
|
|
|
|
Using MFC App Wizard for simple dialog app, I want to be able to browse for a folder (seeing the contents if any files match a particular extension), and then be able to load and process each of those files in turn. What's the best way to do this, I think I need to use SHBrowseForFolder, but am not sure how to then proceed by enumerating all files in that folder that have a specific extension so I can process them all until there's none left
t.i.a
L
|
|
|
|
|
After getting the folder selected by the user, you can use the FindFirstFile(...) to start enumerating files, looking for a particular name and/or extension.
Peace!
-=- James Please rate this message - let me know if I helped or not!<HR> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|
|
You can use of DlgDirList after read folder this function replcase contents of a listbox with names of files and folders without any work but use of FindFirstFile/FindNextFile (James R. Twine said to you) is better
|
|
|
|
|
Since you are using MFC, use the CFileFind class.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|