|
Hello.
As I need to rotate a bitmap before displaying it I'm trying to access the actuel pixels of the bitmap, the bitmap is in my resources.
I'm using the following code to load the bitmap and get a pointer to the data:
HGLOBAL gBmp;
HRSRC resBmp;
BITMAPINFO *bmpInf;
char *bmp_ptr;
resBmp = FindResource(ProgID, MAKEINTRESOURCE(IDB_BILD_TREK), RT_BITMAP);
gBmp = LoadResource(ProgID, resBmp);
bmpInf = (BITMAPINFO*)LockResource(gBmp);
bmp_ptr = (char *)(bmpInf + bmpInf->bmiHeader.biSize + bmpInf->bmiHeader.biClrUsed * sizeof(RGBQUAD));
Now the BITMAPINFO is okay, biWidth and biHeight at least specify the correct dimensions.
But with some test code I can see that the drawn image is all wrong:
for (int y=0, x;y
|
|
|
|
|
Hi,
I can't comment on Load/Find/LockResource and bitmaps, but think that you should consider using ::LoadImage with LR_CREATEDIBSECTION flag. This gives you direct access to bitmap bits - you'll be able to rotate quickly.
Search for CDibSection on CodeProject if you want to use ready-made wrapper.
Cheers,
Tomasz Sowinski -- http://www.shooltz.com.pl
|
|
|
|
|
Does anyone know if Whistler sends a WM_UNICHAR message to
send Unicode characters to an ANSI app.
I've compiled everything with this in, but do not seem to be receiving the message
|
|
|
|
|
When using Dialog based application you can't choose what file type the files is to be!
How do I do this in dialog based!
And how does my app know if I storing or loading in dialog?
/*
BETA
*/
|
|
|
|
|
Dialog based applications do not use documents/views, so choosing file types and reading/writing is left to you. What exactly is the problem? Passing correct filter to CFileDialog?
Tomasz Sowinski -- http://www.shooltz.com.pl
|
|
|
|
|
Hey all,
First off i'll try and give you as much background wihtout dragging on too much. I wanted to create a custom I/O control for one of my applications. Basically it looks like an altimeter. It has an analog dial, an led section and a buttons section. Still with me? So i wrote a CPanel Class that allows the end user to either create an input or an output control by using some functions to change its behavior.
Now I need six of these bad boys on the screen at once. This control is graphic intensive(lots of bitmaps) and it sucks GDI resources down by a sizeable amount but we are still in the green. Now when i use the Create(..) functions to get 6 of these on the screen, at first it looks like i get them however, just playing with the control elements tells you otherwise. I get 3 of my controls that function normally and then I get 3 "ghost images" of my control. These ghost images are basically like a bitmap of what the control should be but they are not active. They dont respond to any input, they dont show up in the tab order..they are essentially not there.
This is driving me nuts...any ideas?
All six panels are sharing the same resources.CPanel is comprised of 3 other dialogs. CLedPanel, CDisplay1 and CDisplay2. CDisplay1 and CDisplay2 are switched based on what mode oyu are in. Ony one will be displayed at a time.
I know this is a shot in the dark but i had to try
thanks for any input you may have
"DWORD my man!"
|
|
|
|
|
I'd use Spy++ first to look at 'ghost images'. Are they real windows? Style bits set correctly? Do they receive any messages? etc.
Tomasz Sowinski -- http://www.shooltz.com.pl
|
|
|
|
|
Tomasz,
I've already tried that but it has led me nowhere. If you use spy++ on it there is nothing there. It recieves no messages, has no window, etc. The creation for each of the six windows is the same except for the coordinates and a different id. I do not understand why it would stop working after the 3rd instance of that CPanel class.
I stepped through the Creation of the window and everyhting seems normal.It is a window and has a valid handle. Its just when the windows finally get painted there is nothing there.
I am really lost here.....but thank you.
Nice screensaver BTW
Regards,
Eric
"DWORD my man!"
|
|
|
|
|
I need a handler that knows when the mouse is over the button, so it can perform a statement.
Thank you for your Help
Santiago Suarez
|
|
|
|
|
Maybe try to use classwizard to associate WM_MOUSEMOVE with metod:
void OnMouseMove(...)
|
|
|
|
|
I did what you told me but it performs the statement is in the window not in the button, which is what i need.
Please help me clarify this problem.
SSR
|
|
|
|
|
hi,
i get the following error when i use LineDDA ,
C:\WINDOWS\Desktop\Edge\EdgeView.cpp(105) : error C2440: 'type cast' : cannot convert from '' to 'void (__stdcall *)(int,int,long)'
None of the functions with this name in scope match the target type
void CEdgeView::OnDraw(CDC* pDC)
{
CEdgeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//ptr is declared in my codes, but i didn't paste it here
::LineDDA(m_PCenter.x, m_PCenter.y, ptr->Coord.x, ptr->Coord.y,
(LINEDDAPROC)LineDDAProc, (long)pDoc);
}
void CEdgeView::LineDDAProc(int X, int Y, LPARAM lpData)
{
CDC* pDC;
pDC = (CDC*) lpData;
pDC->SetPixel(CPoint(X,Y), RGB(0,0,255));
}
does anyone know how can i fix the error?
Thanks
Ehsan
Ehsan Behboudi
|
|
|
|
|
The callback can't be a non-static class member. It should look like this:
void CALLBACK MyLineDDAProc(int X, int Y, LPARAM lpData)
{
CDC* pDC = (CDC*) lpData;
pDC->SetPixel(CPoint(X,Y), RGB(0,0,255));
}
Tomasz Sowinski -- http://www.shooltz.com.pl
|
|
|
|
|
It also must be static in the header.
|
|
|
|
|
Does anyone have a REALLY fast grayscaling algorithm in their toolbox? (Monochrome to grayscale) I've got one that works well enough when displaying a single grayscaled thumbnail, but we are now displaying several at a time in two separate views and speed has become a critical factor. I'm working on improving the one I've got, but thought if anyone out there has one they would share, or point me towards where I can find one, it would save me some work. Thanks.
|
|
|
|
|
Use Miscellany/Adverise section for that. This forum is not a place for promoting commercial programs.
Tomasz Sowinski -- http://www.shooltz.com.pl
|
|
|
|
|
ihave an h - file with all my struct definitions. unfortunatly i need to include it in several other header files because these structs are used as arguments in the functions. now i always get an error because the compiler claims the structs to be defined more then one time.
is there any way to avoid this by defining a max recursion depth or similar ? thanks
|
|
|
|
|
You should use preprocessor symbols to avoid multiple inclusions.
#ifndef __FOO_H
#define __FOO_H
struct Foo
{
};
#endif
Note that each .h file should have its own symbol - for foo.h use __FOO_H, and for bar.h __BAR_H.
Tomasz Sowinski -- http://www.shooltz.com.pl
|
|
|
|
|
yessss it works - finally thanx you saved my day (hehe, i always wanted to what these #ifndef stuff is good for at all)
|
|
|
|
|
Thomasz's suggestion is correct, but I thought I'd mention another - if you use precompiled headers, it can be a good idea to include a file like this ( full of structs you will be using, etc ) in your stdafx file.
Christian
#include "std_disclaimer.h"
People who love sausage and respect the law should never watch either one being made.
The things that come to those who wait are usually the things left by those who got there first.
|
|
|
|
|
Hi,
In your file.h, you should put a condition that if the header file has already been " include " in another file, the compiler will not had it another time. Use the #if !defined and #define instructions. Se the example:
//File : StringTool.h
#if !defined(_STRINGTOOL_) //Normally the name of your file with _ in front and at the end.
#define _STRINGTOOL_
//Between the #define and #endif, put your .h file
#endif // _STRINGTOOL_
Jean-François Roberge
|
|
|
|
|
Hi,
In your file.h, you should put a condition that if the header file has already been " include " in another file, the compiler will not had it another time. Use the #if !defined and #define instructions. Se the example:
//File : StringTool.h
#if !defined(_STRINGTOOL_) //Normally the name of your file with _ in front and at the end.
#define _STRINGTOOL_
//Between the #define and #endif, put your .h file
#endif // _STRINGTOOL_
Jean-François Roberge
|
|
|
|
|
Hi,
In your file.h, you should put a condition that if the header file has already been " include " in another file, the compiler will not had it another time. Use the #if !defined and #define instructions. Se the example:
//File : StringTool.h
#if !defined(_STRINGTOOL_) //Normally the name of your file with _ in front and at the end.
#define _STRINGTOOL_
//Between the #define and #endif, put your .h file
#endif // _STRINGTOOL_
|
|
|
|
|
Hi,
In your file.h, you should put a condition that if the header file has already been " include " in another file, the compiler will not had it another time. Use the #if !defined and #define instructions. Se the example:
//File : StringTool.h
#if !defined(_STRINGTOOL_) //Normally the name of your file with _ in front and at the end.
#define _STRINGTOOL_
//Between the #define and #endif, put your .h file
#endif // _STRINGTOOL_
Jean-François Roberge
|
|
|
|
|
Hi,
In your file.h, you should put a condition that if the header file has already been " include " in another file, the compiler will not had it another time. Use the #if !defined and #define instructions. Se the example:
//File : StringTool.h
#if !defined(_STRINGTOOL_) //Normally the name of your file with _ in front and at the end.
#define _STRINGTOOL_
//Between the #define and #endif, put your .h file
#endif // _STRINGTOOL_
Jean-François Roberge
|
|
|
|