|
A new line in the text? Use \n , there's others too like \t for tab, \\ for '\', etc. Look these up (or 'escape sequences') in MSDN for more info
Dylan Kenneally
London, UK
|
|
|
|
|
Thanks
I've look at MSDN and you were right.
but when I want to type like this
CString welcome_string
= "Hello\ \n
World";
so that Hello and World are in different line, there was a "newline is constant" error.
Newbies
|
|
|
|
|
CString welcome_string
= "Hello\ \n\
World";
|
|
|
|
|
lucy wrote:
CString welcome_string
= "Hello\ \n\
World";
Thanks again. I've tried that but this came out
warning C4129: ' ' : unrecognized character escape sequence
and the line was still in one line.
Newbies
|
|
|
|
|
oops, sorry, should be
CString welcome_string
= "Hello\n\
World";
|
|
|
|
|
A lot of thanks for your reply BUT the output was
Hello|World
and not
Hello
World
this was my code
void CMyView::OnDraw(CDC* pDC)<br />
{<br />
CString welcome_string <br />
= "Hello\n\<br />
World";<br />
pDC->TextOut(0,0,welcome_string);<br />
}
Newbies
|
|
|
|
|
I'm afraid TextOut couldn't handle the "\n", but MessageBox() can. Try
MessageBox(welcome_string);
and see.
|
|
|
|
|
Thanks
Is this means only messagebox can handle "\n"? How about editbox or listbox ia a dialog?
Newbies
|
|
|
|
|
I'm not sure. You'd better check that out.
|
|
|
|
|
Thanks
Newbies
|
|
|
|
|
As Lucy said, TextOut() can not handle newlines, but DrawText() can. If you want to output multi line text use DrawText() .
HTH
CPUA 0x5041
Sonork 100.11743 Chicken Little
"So it can now be written in stone as a testament to humanities achievments "PJ did Pi at CP"." Colin Davies
Within you lies the power for good - Use it!
|
|
|
|
|
this is easy:
CString t=
"hello \
world";
Pay attention to the backslash, type ENTER after it and go on
|
|
|
|
|
or you can do this
CString t = "Hello"
"World";
without the '\' slash character
|
|
|
|
|
I'm looking for a shading algorithm that would fill a polygon with a simple pattern according to a shade ratio.
Like this:
+ + +
+ +
A simple algo would do. I'm using the bresenham line algorithm to scan my lines and I simply want to plot my pixels according to this rule.
Thanks
Yarp
http://www.senosoft.com/
|
|
|
|
|
try a google search for "Polygon scanline conversion"; that's the 'technical' term for finding the edges of a polygon, given the points. additional hints: "Paul Heckbert" and "Graphics Gems"
-c
Though the cough, hough and hiccough so unsought would plough me through,
enough that I o'er life's dark lough my thorough course pursue.
--Stuart Kidd
|
|
|
|
|
Try with the "raster" keyword as well,
And I swallow a small raisin.
|
|
|
|
|
Hard to find indeed, even with the "raster" key word. The Internet is full of 3D Gouraud shading,... luckily one day I intend to do some 3D programming and I'll probably find my algo that time
It doesn't matter, I'll do it myself.
Thanks
Yarp
http://www.senosoft.com/
|
|
|
|
|
In Chris Maunder datagrid,does anybody know how can I overriden EndEdit() for a cell in my class?
Mazy
"If I go crazy then will you still
Call me Superman
If I’m alive and well, will you be
There holding my hand
I’ll keep you by my side with
My superhuman might
Kryptonite"Kryptonite-3 Doors Down
|
|
|
|
|
why don't you post this question on the grid article?
Though the cough, hough and hiccough so unsought would plough me through,
enough that I o'er life's dark lough my thorough course pursue.
--Stuart Kidd
|
|
|
|
|
More people see it here.I post it there too.
Mazy
"If I go crazy then will you still
Call me Superman
If I’m alive and well, will you be
There holding my hand
I’ll keep you by my side with
My superhuman might
Kryptonite"Kryptonite-3 Doors Down
|
|
|
|
|
I have a Dialog based MFC program, and in CMyDialogDlg::OnCreate I start my worker thread like this:
m_bThreadRun = TRUE;
HANDLE hThread = AfxBeginThread(MyWorkerThread, this);
if ( hThread == NULL )
MessageBox("Cannot start worker thread.");
While in my worker thread, I check for the flag from parent:
UINT MyWorkerThread(LPVOID pParam)
{
CMyDialogDlg * pDlg = (CMyDialogDlg *)pParam;
while ( pDlg->m_bThreadRun)
{
}
TRACE("exit from the worker thread");
return 0;
}
In order to terminate this worker thread, I did this:
CMyDialogDlg::OnClose()
{
m_bThreadRun = FALSE;
CDialog::OnClose();
}
But what troubles me is:
1. The trace line of my worker thread function "exit from the worker thread" was never printed.
2. When the program ended, this will appear in my Visual studio debug window:
etected memory leaks!
Dumping objects ->
thrdcore.cpp(166) : {54} client block at 0x017B4558, subtype 0, 112 bytes long.
a CWinThread object at $017B4558, 112 bytes long
Object dump complete.
what I am missing here? How can I terminate this worker thread gracefully?
Thanks a lot for your help!
|
|
|
|
|
You should WaitForSingleObject after setting m_bThreadRun to FALSE. Also, add 'volatile' modifier to m_bThreadRun.
Tomasz Sowinski -- http://www.shooltz.com
"Yields falsehood when preceded by its quotation" yields falsehood when preceded by its quotation.
|
|
|
|
|
I add the following modifications:
OnCreate()
{
m_hMyThread = AfxBeginThread(...);
}
OnClose()
{
m_bThreadRun = FALSE;
WaitForSingleObject(m_hMyThread, 1000);
}
but WaitForSingleObject will fail and the reason is "The handle is invalid. ". why?
FYI, I have added the volatile specifier to my worker thread checking.
|
|
|
|
|
When the worker thread terminates, the Object (CWinThread) will clean up and deallocate any resources associated with it, including itself. So after termination, the CWinThread variable will be invalid as stated.
To avoid this you will need to tell the class not to automatically delete itself on termination.
try this:
OnClose()
{
m_hMyThread.m_bAutoDelete = FALSE;
m_bThreadRun = FALSE;
WaitForSingleObject(m_hMyThread, 1000);
delete m_hMyThread;
m_hMyThread = NULL;
}
|
|
|
|
|
I see. Thank you very much!
|
|
|
|