|
I am just looking at our zooming code as it happens ;0)
The way I handle things in my paint program is that I do one thing before anything else every time the mouse moves: I call a function that takes into account the scroll position and zoom factor and stores the mouse position converted to bitmap co-ordinates. Then I always have a member variabl I can use to operate on the bitmap and I know exactly what part of the bitmap the mouse is pointing at. I'd suggest you do the same - if the user zooms, scrolls or moves the mouse, take these things into account and recalculate so that you know where on your 1:1 bitmap they are pointing.
Christian
Secrets of a happy marriage #27:
Never go to bed if you are mad at each other. It's more fun to stay up and fight.
|
|
|
|
|
Christian,
Thanks so much for such information. I think the biggest problem I'm having is trying to figure out exactly where they are pointing. Is there some kind of formula that I can use to determine this information? I can get the zoom level from the Dundas COXSrollWnd class that I'm using. How is the conversion to bitmap coordinates done? Is there a CBitmap method that will do this for me?
Thanks again for all of your help, this has been an enlightening discussion for me to say the least,
Craig
|
|
|
|
|
First of all you need to get the point that comes in, then you need to add the scroll positions. If it is zoomed you need to divide by the factor zoomed, in other words if you're zoomed in by a factor of 2, you need to divide by 2, because 10, 10 in mouse co-ords will point to 5,5 on the bitmap.
Here is my function:
CPoint p = pt;
pt.x = pt.x + GetScrollPosition().x - m_XOffset;
pt.y = pt.y + GetScrollPosition().y - m_YOffset;
if (m_iZoom>0)
{
UINT divide = 1 << m_iZoom ;
pt.x = (long)(((float) pt.x/(float) divide));
pt.y = (long) (((float) pt.y/(float) divide));
}
else if (m_iZoom<0)
{
int multiply = 1 << (m_iZoom*-1);
pt.x *= multiply;
pt.y *= multiply;
}
In my case the zoom factor is not 1,2,3, but doubles every time in either direction, hence the shift operators. m_XOffset and m_YOffset are where the window is maximised and the bitmap is centered. There are lots of casts because I regard warnings as errors.
Christian
Secrets of a happy marriage #27:
Never go to bed if you are mad at each other. It's more fun to stay up and fight.
|
|
|
|
|
That is excellent, thanks so much for your help in this matter, you make it seem so easy after I've been trying so hard for so long.
I will certainly give this a try, I'm sure it will work fine for me.
Thanks again,
Craig
|
|
|
|
|
No worries - always glad to help.
Christian
Secrets of a happy marriage #27:
Never go to bed if you are mad at each other. It's more fun to stay up and fight.
|
|
|
|
|
If I have a web page loaded inside of a mfc program, how can
i make one of the hyper links, in the page, run a dialog
Caleb
|
|
|
|
|
One way would be to trick it. Set the hyperlink in question to some value that has meaning to you. THen override the OnBeforeNavigate method of the web browser control. Parse the URL and redirect it to open a dlg.
a href="opendlg" (would be nice to have
tag support)
OnBeforeNavigate(LPCTSTR lpszURL, ...)
{
if( !strcmp(lpszURL, "opendlg" )
dgl.DoModal()
}
I've used this type of trick before. It might not be the best but it gets you there without having to implement IDocHostHandler and such. You could also do this with script on the page itself.
|
|
|
|
|
Is there a "easy" or "best" way to insert a value into the registry using a MFC Dialog type application.. What I would like to do is..
Have a dialog type app, with a button that allows me to add a value\key to the registry this value would be pre-defined in the source code.. then whith a second button read\verify the registry key exists..
any ideas?
Rob Jones
|
|
|
|
|
Look at RegCreateKey and the other related function.
|
|
|
|
|
|
Hmm, I'm not sure if this is a common problem. I have a .dll that when compiled under Debug mode in VC++ 6.0, runs perfectly. But when I compile a Release version, the .dll can't correctly access the registry, redraw the window (I'm using InvalidateRect()), and will even throw an error when on exit.
So, I'm quite confused as to why this is happening. I don't really understand the difference between Debug and Release, I guess. Does anyone know what sort of compile options could be causing the problems I'm having?
thanks!
marc
m-flury@northwestern.edu
|
|
|
|
|
I have the same problem, and I don't know what to do about it. Accessing the registry, that is. Are you using the OpenRegKeyEx or the function(I forgot its name)?
Baaf.
|
|
|
|
|
I'm using CRegKey...
After reading the article recommended in the second reply, I'm betting my problems is my frequent use of the
assert(someFunction() == someVal);
programming no-no. Hope that helps!
|
|
|
|
|
I'm using CRegKey...
After reading the article recommended in the second reply, I'm betting my problem is my frequent use of the
assert(someFunction() == someVal);
programming no-no. Hope that helps!
|
|
|
|
|
,
hai dear i am working e=with registry, my problem
1. i am able to registry key in debug mode where as in release mode it's not opening it's returning error code . if ur having suggestion kindly update me ASAP
anshu
|
|
|
|
|
ASSERT is ignored in Release versions so it doesn't matter if they're there or not.
Bret Faller
Odyssey Computing, Inc.
|
|
|
|
|
|
Good day,
Has anyone used CDynamicAccessor with OLEDB? If so, I need help inserting data into the recordset using SetData(...). I want to set the value for one column on the specific row. I am using CTable with CDynamicAccessor. I have all the properties needed (IRowsetUpdate/Change, etc.) but everytime I call SetData I get DB_E_ERRORSOCCURRED. Any examples, help is greatly appreciated. Thanks.
Bret Faller
Odyssey Computing, Inc.
|
|
|
|
|
|
I tried deriving a class and adding that support but still no go. I am using an ODBC driver because for some reason the Jet drivers don't support the options I need.
Bret Faller
Odyssey Computing, Inc.
|
|
|
|
|
I am using an ODBC driver because for some reason the Jet drivers don't support the options I need.
Maybe ODBC over Jet doesn't support these options either. Anyway, you need to reduce your problem to some simple case: can you SetData on simple table with 1 integer column? Are you sure you're calling SetStatus for each field in accessor?
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
It might not be the same problem but I ran into this error yesterday. It turned out I had an identity column in the column map. It would return this error when calling setdata.
|
|
|
|
|
Does anyone know how to use DotNet controls in a MFC app?
Thanks, Italo S Weiss
|
|
|
|
|
hi all,
I have a word object I placed with in place activation. whenever escape is pressed it closes. the messages seems to ignore my handlers.
anyone has an idea?
thanks for the help,
Omri
|
|
|
|
|
I wish to use ofstream::seekp() to point and set
there the new EOF, but...
I tried:
{
ofstream o("blah.txt", ios::in | ios::out);
o.seekp(-30L, ios::end);
//set the ptr 30 bytes back from EOF.
//I want to set (the new) EOF HERE!
}
10x.
|
|
|
|