|
How to Rotate the Enhanced MetaFile Without using SetWorldTransform?
|
|
|
|
|
are you really going to ask this question every day?
-c
Be very, very careful what you put into that head, because you will never, ever get it out. --Thomas Cardinal Wolsey
|
|
|
|
|
TRy to understand myprob
I want the use in my app.Because I was posted several times
Don't angry on me
Sorry for the distrubence
|
|
|
|
|
First off, You need to use GDI+...
rect is a RectF containing the position of where to draw the metafile.
RotationXY is the rotation around the center of that rectange (in hundeths of a degree I think).
PointF destinationPoints[3];
PointF Origin;
destinationPoints[0].X = (float)rect->GetLeft();
destinationPoints[0].Y = (float)rect->GetTop();
destinationPoints[1].X = (float)rect->GetRight();
destinationPoints[1].Y = (float)rect->GetTop();
destinationPoints[2].X = (float)rect->GetLeft();
destinationPoints[2].Y = (float)rect->GetBottom();
destinationPoints[3].X = (float)rect->GetRight();
destinationPoints[3].Y = (float)rect->GetBottom();
Origin.X = (rect->GetLeft()) + ((rect->Width)/2.0f);
Origin.Y = (rect->GetTop()) + ((rect->Height)/2.0f);
RotatePoints( destinationPoints, Origin, RotationXY, 3 );
graphics.DrawImage(&metafile, destinationPoints, 3);
and here is the RotatePoints function...
RotatePoints(PointF *point, PointF origin, T_DWORD RotationXY, int count)
{
double x, y, rad, crad, srad;
#define PI (3.1415926535)
rad = RotationXY;
rad = (rad * 2.0 * 3.1415926535)/36000.0;
crad = cos( rad );
srad = sin( rad );
while( count > 0)
{
x = point->X - origin.X;
y = point->Y - origin.Y;
point->X = (float)(origin.X + ((x * crad) - (y * srad)));
point->Y = (float)(origin.Y + ((x * srad) + (y * crad)));
count--;
point++;
}
}
Blade[DMS]
|
|
|
|
|
Thanks for the reply,
I was unable use the GDI+.Pl give if another solution to this.
|
|
|
|
|
I'm afraid that is the only solution I have found which does not involve stepping through the metafile and modifying each record manually.
Blade[DMS]
|
|
|
|
|
Thank u for reply
I am trying modify of each record manually.If u r found pl help
Once again thanks for the reply
|
|
|
|
|
Hi!
Help me please. What is the value of DC_BUTTONS flag which is used for DrawCaption() func.
Regards,
Yura.
|
|
|
|
|
|
hello,
I can detect event on web page separately (KeyUp,Keydown,MouseMove,LbuttonDown...)
but i can't detect KEYDOWN + LBUTTONDOWN + MOUSEMOVE at the same time.
You know how can i do this?
THX
|
|
|
|
|
There's no function which informs you about all that events at once.
Thus one solution could be holding (static?) member variables for every state you're interested in. So when KeyDown occurs you set your variable to TRUE, on KeyUp to FALSE and so on. Then, on every event you catch, you test the state of your variables and react in a appropriate manner.
Otherwise you could test the state of keys / mouse buttons you're interested in inside your MouseMove handler.
If you don't need to catch the events inside the HTML page but for windows you can either use the standard WM_KEYUP of your window .... or set a hook to get information for all events of your current session.
|
|
|
|
|
ok i have already try the first solution, but it's works for 2 event not for 3.
i set my variable "m_ShiftPress " to TRUE when i detect KEYDOWN and i test its state when i detect LBUTTONDOWN and its works, and i set my variable "m_ShiftAndLButtonDown " to TRUE , but if i want to test its state in MOUSEMOVE event it's fail.
<code>BOOL CBrowserMDIView::PreTranslateMessage(MSG* pMsg)
{
if ( pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_SHIFT )
{
m_ShiftPress = TRUE;
}
if (pMsg->message == WM_LBUTTONDOWN )
{
if (m_ShiftPress == TRUE)
{
m_ShiftAndLButtonDown = TRUE;
}
}
if (pMsg->message == WM_MOUSEMOVE )
{
if (m_ShiftAndLButtonDown == TRUE)
{
AfxMessageBox("GOOD");
}
}</code>
The message "GOOD" appears only when i release the mouse left button.
With the standar OnLbuttonDown,OnKeyDown.... i detect never event.
there isn't another solution?
|
|
|
|
|
Really strange problem ....
but it just occured to me that the solution I told you is much to circuitous.
When receiving WM_MOUSEMOVE you can detect the state of both your shift key and the mouse button by evaluating wParam.
If wParam & MK_LBUTTON & MK_SHIFT is true, all preconditions you required are fullfilled.
|
|
|
|
|
Thx Schlaubi !
but i try your solution and that not works.
i think it detect MOUSEMOVE before detect LBUTTONDOWN and so LBUTTONDOWN is never called...
|
|
|
|
|
jeremysay wrote:
i think it detect MOUSEMOVE before detect LBUTTONDOWN and so LBUTTONDOWN is never c
You should know whether you first press the button or move the mouse. But in fact you should write your code suitable for all situations.
It could help having a look at all mouse and keyboard events supported. Especially what parameters are passed when the event gets fired.
But if you first press your button and then move the mouse it should in any cases pass MK_LBUTTON as wParam
|
|
|
|
|
Schlaubi wrote:
it should in any cases pass MK_LBUTTON as wParam
yes it should but no....
I want to detect SHIFT+LBUTTONDOWN+MOUSEMOVE to move window without CAPTION.
if you have a solution to do this without detect all this event ?!
Thx again Schlaubi for your help
|
|
|
|
|
Well, perhaps this[^] article helps you.
|
|
|
|
|
YEEEEEEEEEES
<big>SendMessage(WM_NCLBUTTONDOWN,HTCAPTION);</big>
THX for your article that is the solution !! i went to code a lot of code to move my window without caption,but with this solution i need only 2 lines !!
THX THX !!
|
|
|
|
|
I'm glad to hear that
You should have told me earlier what you intended to do....;)
I went on a course. Learning to love yourself. I came top. - Jane
|
|
|
|
|
Schlaubi wrote:
You should have told me earlier what you intended to do....
Yes of course i'm stupid
I would never have thought that it was so easy !
|
|
|
|
|
He, I have a problem and not the solution !
After starting my computer (under Win2000), I would like run automaticaly my App (C++), and after the user will not access to OS (explorer, tasks manager, ...) except if the user enter the good password on App. Do you have an Idea ?
Please !
MyEden
|
|
|
|
|
Dear all;),
I have being using DAO to connect to oracle 8i DB, but
I try to pass a sqlstatememet = "select * from table where datefield = to_date ('2002-01-23','yyyy-mm-dd')" in the
code
CDaodatabase database;
CDaoRecordset recset(&database);
recset.Open(AFX_DAO_USE-DEFAULT, sqlstatememet);
I always get this problem error message
"Undefined function 'to_date' in expression"
Anyone pls help!!!!
|
|
|
|
|
Hi !!!
I read somewhere that it is possible for an app to use an ActiveX located on a remote computer.
I tried to do that with an App which works fine when the ActiveX is local, then, I removed the local ActiveX and installed it on a remote computer, connected with my computer through a normal TCP/IP connection (with a hub, no switch or routers). It doesn't work : my app doesn't find the ActiveX.
I guess I have to tell my app where the ActiveX is, but I have no idea how to do that.
Anyone could help me ?
Thanks in advance !
Jerome
|
|
|
|
|
COM+(MTS) is the easiest way. Otherwise you have to read a lot on configuration and registry settings for remote COM.
|
|
|
|
|
Read up on DCOM. There are several good articles here on CP.
Jason Henderson "You must be the change you wish to see in the world." - Gandhi
articles profile
|
|
|
|