|
This function available in VC++ 7.0. I think Latest platform SDK will solve your problem.
|
|
|
|
|
Do you know what it is called? _ttof? _wtof?
And the living obscurely rejoice at the news of a death, in the knowledge that it's not us, that we are still in the game.
Andrew Greig
|
|
|
|
|
|
Thank you
And the living obscurely rejoice at the news of a death, in the knowledge that it's not us, that we are still in the game.
Andrew Greig
|
|
|
|
|
Hi sorry for the long code snippet...i didnt know where the error could possibly be thus the long extract.;p..anyway the code below attempts to draw 2 axes and label them.However, both x&y axis label appears twice.One set with a smaller font and right escapement, the other set with bigger font and failed escapement(the text is not rotated).
Does anyone know why?I've flipped through books but nothing seemed wrong to me.
CPen axisPen (PS_SOLID, 2, RGB(0,0,0));<br />
CFont axisXFnt,axisYFnt;<br />
CPen *pOldPen;<br />
CFont *pOldFont;<br />
LOGFONT lf;<br />
TEXTMETRIC tm;<br />
int fontSize=8;<br />
<br />
ZeroMemory(&lf, sizeof(lf));<br />
lstrcpy(lf.lfFaceName,"Arial");<br />
lf.lfHeight=fontSize;<br />
axisXFnt.CreateFontIndirect(&lf);<br />
<br />
pDC->GetTextMetrics(&tm);<br />
int charWidth = tm.tmAveCharWidth;<br />
<br />
m_AxisXName="Values";<br />
m_AxisYName="Time";<br />
<br />
pOldPen = pDC->SelectObject(&axisPen);<br />
pDC->MoveTo(m_origin);<br />
pDC->LineTo(m_endPoint);<br />
<br />
pDC->MoveTo(m_origin);<br />
pDC->LineTo(m_endPoint2);<br />
pDC->SelectObject(pOldPen);<br />
<br />
pOldFont = (CFont*) pDC->SelectObject(&axisXFnt);<br />
pDC->SetTextAlign(TA_CENTER|TA_BOTTOM);<br />
pDC->TextOut((graphRect.Width() / 2) - ((m_AxisXName.GetLength() / 3)*charWidth),graphRect.top+15,m_AxisXName);<br />
<br />
lf.lfEscapement=900;<br />
axisYFnt.CreateFontIndirect(&lf);<br />
pDC->SelectObject(&axisYFnt);<br />
pDC->SetTextAlign(TA_BOTTOM|TA_CENTER);<br />
pDC->TextOut(graphRect.left+10,((graphRect.Height() / 2) + ((m_AxisYName.GetLength() / 3)*charWidth)),m_AxisYName);<br />
pDC->SelectObject(pOldFont);
-forgive me, im a newb-
|
|
|
|
|
Some notes:
When rotating a font, you also need to set the lfOrientation = 900 in the LOGFONT structure.
Personally, I never rely on the GDI o correctly position text for me. I use GetTextExtent() and calculate the exact position the text should be displayed and pass the start coordinates in to TextOut().
Drawing twice: Is this being done in an OnDraw() function? If it is you need to call Validate() or use a CPaintDC() oobject which automatically validates the client area after the DC is released.
Roger Allen
Sonork 100.10016
Were you different as a kid? Did you ever say "Ooohhh, shiny red" even once? - Paul Watson 11-February-2003
|
|
|
|
|
thks
I didnt know how to use GetTextExtent().I'll read up on it.
Anyway the codes are contained in a function of a separate class which are called by the OnPaint() function of my CDialog class. Is it counted? When should i call Validate() then?
Anyway do u know the difference between Validate() and InValidate()?
once again,thks
|
|
|
|
|
If its in your on paint and your not using a CPaintDC object then you must call Validate() at the end of the procedure otherewise windows will send you another WM_PAINT message, and then another until the area is validated or is obscured completely by another window. CPaintDC does a validate() call for you automatically in its destructor, but if your using GetDC()/ReleaseDC() in the OnPaint, you need to call it.
Validate() syas to windows, this window is upto date and does not need to be-redrawn
Invalidate() says to windows that this window (or a rectangle of it) needs to be re-drawn. Windows will queue a WM_PAINT message for the window which had an invalidate() call on it.
GetTextExtent() is a function to be called on the DC
CString text = "I want to know my length!";
CSize textSize = pDC->GetTextExtent(text, text.GetLength());
textSize.cx = length of text in pixels for the current output font
textSize.cy = Height of text in pixels for the current output font
With this info you could centre you text using
CRect window;
GetWindowRect(&window);
x = (window.Width() - textSize.cx) / 2;
y = 500;
pDC->TextOut(x, y, text, text.GetLength());
Roger Allen
Sonork 100.10016
Were you different as a kid? Did you ever say "Ooohhh, shiny red" even once? - Paul Watson 11-February-2003
|
|
|
|
|
hey thks lot...i finally know the difference
and yes, i did a GetDC()/ReleaseDC() in my OnPaint() but when i typed
Validate() at the end of it all...and error of "undeclared identifier" was returned?
|
|
|
|
|
i tried Validate(pDC) and this->Validate().
All of them gave me the same error msg(undeclared identifier)...
Should i place it before or after ReleaseDC() anyway?
thks.
|
|
|
|
|
Ooops,
sorry its:
ValidateRect()
Roger Allen
Sonork 100.10016
Were you different as a kid? Did you ever say "Ooohhh, shiny red" even once? - Paul Watson 11-February-2003
|
|
|
|
|
it's ok;)
i called ValidateRect(graphRect) jus before ReleaseDC()...where graphRect is a CRect...is that right?
|
|
|
|
|
Thats should work ik. But just 1 small possible danger. If the update rectangle for the WM_PAINT call (which comes in a PAINTSTRUCT) is slightly larger than your graphRect then this could cause additional WM_PAINT messages to be sent to you. I usually do:
void X::OnPaint()
{
CDC pDC = GetDC();
pDC_>ReleaseDC();
CPaintDC dc;
}
Roger Allen
Sonork 100.10016
Were you different as a kid? Did you ever say "Ooohhh, shiny red" even once? - Paul Watson 11-February-2003
|
|
|
|
|
i put "CPaintDC dc" but an error was returned stating no appropriate default constructor available, so i tried "CPaintDC dc(this)" n it complied successfully but it wiped out all i've drawn earlier.
here's my code...
void CGrapDlg::OnPaint()
{
CWnd* graphFrame = (CWnd*)GetDlgItem(IDC_GRAPH_FRAME);
CDC* pDC = graphFrame->GetDC();
plotGraph.Plot(pDC);
ReleaseDC(pDC);
CPaintDC dc(this);
}
have a nice weekend n thks
|
|
|
|
|
I am developing an API Hooking Module. Here I used the PE files IAT patching technique. The Procedure I used ,is like this:
1> Inject the DLL into the address space of process by CreateRemoteThread.
2> Parse the IAT with the help of Instance then patch the address with my funcion having same prototype.
I tested it on Notepad applicaion.
Here for ShowWindow it works only for Notepad window. For find dialog boxes and other dialogs it won't work..
what is the possible reason? Plase help me ...
|
|
|
|
|
Hi,
I want to Drag Images from 3rd party Applications(ex: irfan view) to my Application(image list control). Can i implement it using COleDropTarget class?.
Thanks in advance,
vikram
|
|
|
|
|
Well you can implement only if irfan view supports COleDropSource and of course COleDataObject.
To test it try dragging on one of famous applications like Adobe or Flash. If they get images then you have it.
-----------------------------
In my dream, I was dorwning my §orrow§
But my §orrow§, they learned to §wim
|
|
|
|
|
hi,
cehck this..
http://www.funducode.com/weeklyupdate/May_5_01/May_5.htm
followed by..
http://www.funducode.com/weeklyupdate/May_12_01/May_12.htm
i hope this function can do the desired work...
all the best and cheers
Himanshu
|
|
|
|
|
Hi,
I want to write an application to record the desktop and play it as avi files. Is there any article here that can help me with this.
Kindly help me..
Thanks for
Vini
|
|
|
|
|
|
|
How can I move the cursor in a Rich Edit Control? If someone chooses a html tag in a menu I want to put the starting and ending tags <bold> and place the caret in the middle for convenience. I can put the tags but I cant find a way to move the cursor in the middle. I'm assuming it's probably the same method for edit and rich edit controls. It will be for a SDI(doc/view) application. Thanks
paully
|
|
|
|
|
If you have to put the caret at a position pos in the control try to use
SetSel(pos, pos) ,
this should move the caret to that position.
|
|
|
|
|
And how do we retrieve the caret position in a CRichEditCtrl ? There is no GetPos or whatever ...
~RaGE();
|
|
|
|
|
int pos1, pos2;
m_myRichEd.GetSel(pos1, pos2);
pos1 and pos2 are passed by reference, if thier is no selection they should be both equal to the current caret postion.
|
|
|
|