|
Hi,
I need to change the font size of CStatic ctrl.
How can do this ?
Thanks.
|
|
|
|
|
You can use of CreateFont and then use of SetFont And also see Nibu babu thomas answer to super_ttd (Strange Font bolding)
|
|
|
|
|
Look for LOGFONT-->lfHeight while creating font for static window.
|
|
|
|
|
See here.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Hi all,
I have made a worker thread like this
UINT workerThread(LPVOID pParam)
{
return 0;
}
i want to pass a CString parameter to my thread
how to do it n how to do AfxBeginThread for passing CString parameter.......
thanxs in advance
|
|
|
|
|
why not just calling like this :
CString str = _T("hello CP");
workerThread(&str);
from within the function, if you know you'll always get a CString, then use it like that :
UINT workerThread(LPVOID lpParam) {
CString str = *(static_cast<CString*>(lpParam));
return 0;
}
|
|
|
|
|
toxcct wrote: CString str = _T("hello CP"); workerThread(&str);
str is a local object right? Passing local objects to thread function is a bad practice and leads to disaster.
|
|
|
|
|
Nibu babu thomas wrote: str is a local object right?
not necessarily... i wrote it like that to show that it was defined first, but you're right, it wasn't clear enough
|
|
|
|
|
As your earler response suggests, you may race on the CString going out of scope before the worker thread starts and can use it.
This would have to be an instance of CString that would not go out of scope so quickly (static, member, global, dynamically allocated, etc. - whatever works best given the requirements).
Peace!
-=- James Please rate this message - let me know if I helped or not!<HR> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|
|
You can to it if you dynamically allocate the CString object and then free it in the worker thread. Be careful doing this if you are doing things like per-thread custom memory allocation routines, or if you pass the pointer across DLL or COM boundaries and then try to deallocate it - the DLL or COM object implementation may not use the same allocation/deallocation routines you are.
Something like the following should work (may contain errors, and has no error handling...):
CString *pString = new CString( _T( "Why Do You Need A CString?" ) );
AfxBeginThread( workerThread, (LPVOID)pString, ..... );
{
CString *pString = (CString*)pParam;
delete pString;
}
Peace!
-=- James Please rate this message - let me know if I helped or not!<HR> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|
|
thanxs to all
my problem got solved ..
but can anybody tell me if i have to pass two parameters one CString n One int then how will i do it....
|
|
|
|
|
&nhsp;&nhsp; Create a struct for all of the data you need, and pass a pointer to the struct across to the worker thread.
&nhsp;&nhsp; Peace!
-=- James Please rate this message - let me know if I helped or not!<HR> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|
|
thanku for ur reply..
i have created a structure having
CString and int values like this
struct test
{
CString str;
int item;
};
created its object like this
test *obj;
obj = new test;
and in that object passed the values
like
obj->str = "neha";
obj->item = 1;
After that i have started thread like this
Ping = AfxBeginThread(PingThread,obj);
in thread i have retrieved first Cstring value like this
cstrHost = *(static_cast<cstring*>(pParam));
but in my integer value i m getting garbage value..
int_val = *(static_cast<int*>(pParam));
How to correct it.....
|
|
|
|
|
test *pStruct = (test*)pParam;
cstrHost = pStruct -> str;
int_val = pStruct -> item; Just like with candy, you have to first get to the outer portion (i.e. the wrapper) in order to get to the good stuff inside.
Peace!
-=- James Please rate this message - let me know if I helped or not!<HR> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|
|
Hi all,
I've just tried to bold the font in a particular static in one of my dialogs.
for this i have done this :
I Have 2 statics left aligned, containing exactly the same string (the upper one is for comparison purpose).
The static I modify has a control variable of type CStatic on it.
here is the code i put in the dialog's OnInitDialog() :
HDC hdc = (HDC)(*m_myStatic.GetDC());
TEXTMETRIC tm;
::GetTextMetrics(hdc, &tm);
int n = ::GetTextFace(hdc, 0, NULL);
TCHAR* pszFontName = new TCHAR[n];
::GetTextFace(hdc, n, pszFontName);
CFont nf;
nf.CreateFont(tm.tmHeight,
tm.tmAveCharWidth,
0,
0,
tm.tmWeight,
FALSE,
tm.tmUnderlined,
tm.tmStruckOut,
tm.tmCharSet,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
tm.tmPitchAndFamily,
pszFontName);
delete[] pszFontName;
m_myStatic.SetFont(&nf);
as you can see, i merely duplicate the original font without bolding it, but what a surprise, the static is bold anyway
can anyone explain me why the font (Tahoma) is acting like this ?
|
|
|
|
|
super_ttd wrote: CFont nf; nf.CreateFont(tm.tmHeight, tm.tmAveCharWidth, 0, 0, tm.tmWeight, FALSE, tm.tmUnderlined, tm.tmStruckOut, tm.tmCharSet, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, tm.tmPitchAndFamily, pszFontName);
You are creating a local CFont object. Hence the CFont object get's destroyed. This is the reason for this wierd behavior, might be since the font object got destroyed it's using DEFAULT_GUI_FONT.
From MSDN:
Specifically, do not destroy the specified CFont object until after the CWnd control has been destroyed.
Windows does not copy the font specified in a SetFont() call.
If the font is destroyed before the control is destroyed, unpredictable results can occur. "new" the font object and see the difference...
And by the way you don't have to write this much code for modifying an existing font object...
Here is the code snippet that does this...
CFont* pFont = m_cstc.GetFont();
LOGFONT lfLogFont = { 0 };
pFont->GetLogFont( &lfLogFont );
lfLogFont.lfWeight = FW_BOLD;
CFont pNewFont = new CFont;
pNewFont->CreateFontIndirect( &lfLogFont );
m_cstc.SetFont( pNewFont );
|
|
|
|
|
super_ttd wrote: can anyone explain me why the font (Tahoma) is acting like this ?
Don't make things any more complicated than necessary. See here.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
hi David, Thanks for answering.
but you know, i refered this exact post to initiate my test, and i found that the answers to this guy were far from being complete... see, i couldn't figure out myself the right way with your 3 replies there.
but thanks to Babu, I think I'm on the road again
|
|
|
|
|
super_ttd wrote: thanks to Babu
Nibu babu thomas.
|
|
|
|
|
hi,
i have created a active x control, after registering it i have included that ocx in my dialog based application.wen i right click the ocx control i get its properties in the design mode.Wen we click the property page icon of that control we get a dialog box containing general tab which constitutes the space for import folder and help folder how to use that property page???
zari
|
|
|
|
|
Hi I need to calculate the no of timers running in my aplication at any instants of time.I am only using timers initialize by SetTimer() function.
thanx in advance,
Birajendu
birajendu
CyberG India
Delhi
India
|
|
|
|
|
birajendu wrote: I am only using timers initialize by SetTimer() function.
Ok, so only respond to those in your handler function. Send the rest on to the default handler.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Hi
i want to create a project in visual studio 6 that contains multipe C source files and header files
but i cant understand how a file can access a function or a variable declared in the other file ?
and i want to know if its right to add #includes for the standard libraries in all files ?
thanks
|
|
|
|
|
Ayman Mashal wrote: but i cant understand how a file can access a function or a variable declared in the other file ?
What you need to do is provide a function prototype of your function that will be declared in your header file. Then the function body will be in the cpp file.
In the cpp file in which you would like to use this function, simply include the header file. If the function is defined somewhere in a cpp file, then the linker will do its job .
Ayman Mashal wrote: and i want to know if its right to add #includes for the standard libraries in all files ?
A good practice is to include only the files you need in your file.
|
|
|
|
|
Ayman Mashal wrote: i cant understand how a file can access a function or a variable declared in the other file ?
For functions, Cedric Moonen has answered you. For variables, look at the keyword extern for doing this.
Ayman Mashal wrote: i want to know if its right to add #includes for the standard libraries in all files ?
It is perfectly safe to #include the libraries in all the files, until they are guarded with #ifndef , #define and #endif to prevent it from being included multiple times.
Nobody can give you wiser advice than yourself. - Cicero
ப்ரம்மா
|
|
|
|