|
Thanks Matthew!
I think both you and Rajkumar are correct.
regards,
George
|
|
|
|
|
hi guys
can i make a control say listctrl transparent,
say i have a list control in my dialog, i want to make the list control transparent so that the background of dialog will be visible through list control
Thanks
Swarup
|
|
|
|
|
|
I am using Visual Studio 6.0. Print preview changes text width on different zoom view. Let me describe in details.(Tested in an SDI application) I want to draw a text "Sample text1 Sample text1 Sample text1" whose font size is 10 and face is Arial.Just below this text I want to draw another text "Sample text2 Sample text2" whose font size is 15 and face is Comic Sans MS. Both are aligned LEFT or RIGHT.It draws fine. Now when I want to see the print preview it shows different text width than what was drawn previously. Now after zoom in again the view changes. In a word I dont get actual print preview. Can you help me plz?
|
|
|
|
|
|
Not Solved Yet. Just Create an SDI Application and insert the following codes in OnDraw()
<br />
CRect rcPos = CRect(10,10,500,40);<br />
CFont font; LOGFONT lf;<br />
ZeroMemory(&lf,sizeof(lf));<br />
lf.lfHeight = 25; lstrcpy(lf.lfFaceName,"Arial");<br />
lf.lfWeight = FW_BOLD; lf.lfCharSet = DEFAULT_CHARSET;<br />
font.CreateFontIndirect(&lf);<br />
pDC->SelectObject(&font);<br />
CString str = "Sample Text1 Sample Text1 Sample Text1"; <br />
pDC->DrawText(str, &rcPos, DT_LEFT|DT_VCENTER|DT_SINGLELINE);<br />
font.DeleteObject();<br />
rcPos.top += 30;<br />
rcPos.bottom += 30;<br />
<br />
lf.lfHeight = 30; lstrcpy(lf.lfFaceName,"Comic Sans MS");<br />
font.CreateFontIndirect(&lf);<br />
pDC->SelectObject(&font);<br />
str = "Sample Text2 Sample Text2";<br />
pDC->DrawText(str, &rcPos, DT_LEFT|DT_VCENTER|DT_SINGLELINE);<br />
font.DeleteObject();<br />
and insert following code to OnPrepareDC()
<br />
pDC->SetMapMode(MM_ANISOTROPIC);<br />
CSize sizeDoc = CSize(1000,1000);<br />
pDC->SetWindowExt(sizeDoc);<br />
CDC dcScreen;<br />
dcScreen.CreateCompatibleDC(0);<br />
int nLogPixelX = dcScreen.GetDeviceCaps(LOGPIXELSX);<br />
int nLogPixelY = dcScreen.GetDeviceCaps(LOGPIXELSY);<br />
int nDevPixelX = pDC->GetDeviceCaps(LOGPIXELSX);<br />
int nDevPixelY = pDC->GetDeviceCaps(LOGPIXELSY);<br />
if (nLogPixelX != nDevPixelX || nLogPixelY != nDevPixelY)<br />
{<br />
sizeDoc.cx = (sizeDoc.cx * nDevPixelX) / nLogPixelX;<br />
sizeDoc.cy = (sizeDoc.cy * nDevPixelY) / nLogPixelY;<br />
}<br />
pDC->SetViewportExt(sizeDoc);<br />
Now run the exe. and see print preview.
|
|
|
|
|
Its not an issue with your code, its an issue with the way print preview is implemented itself. As the screen metrics (resolution/ dpi etc) may/are not an exact match to the target print device, especially when zooming in on the content, print preview has to do an estimation when converting from the requested font size of the target DC to the screen dpi/zoom metric DC used to display the preview.
This causes the generated font size to vary slightly at various zoom levels. To see this when you select a font into a CPreviewDC you should see that is does a lot of extra work converting the font from the outputDC to the previewDC format, its at thispoint that the scaling issues occur.
If you vote me down, my score will only get lower
|
|
|
|
|
Hi all,
I can declare an array dynamically as follows.
int *array_T = new int[1024];
In multi-dimensional arrays why I can't do this.
int *array_T = new int[1024][2];
I appreciate your help all the time...
Eranga
|
|
|
|
|
You need to allocate each element of your array:
int** array_T = new int* [1024];
for(int i=0;i<1024;i++)
array_T[i] = new int[2];
|
|
|
|
|
Thanks for the quick replay. I'll check it...
I appreciate your help all the time...
Eranga
|
|
|
|
|
Eranga Thennakoon wrote: In multi-dimensional arrays why I can't do this.
u can do the following
int (*array_T)[2] = new int[1024][2];
"When allocating a multidimensional array, all dimensions except the first must be constant expressions that evaluate to positive values"
hence
int (*array_T)[2] = new int[size][2];
int *array_T = new int[size1][size2]; is not possible
|
|
|
|
|
i would like to copy the contents of a byte array to a long variable. my code looks like this:
long key = 0;
for (i = 0; i < 8; i++) {
key <<= 8;
key |= (long)(buffer[i]); //<- this line causes the problem
}
however, when i run the program, there is an error message saying "unable to handle exception". what may have cause this problem?
|
|
|
|
|
You could also copy the byte array into your long directly:
long key = 0;
memcpy(buffer,&key,4);
In that case, you need to take care of the byte ordering in your byte array.
modified on Monday, February 11, 2008 4:36 AM
|
|
|
|
|
How is declared buffer?
BTW long data type is only 4 bytes wide.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
CPallini wrote: BTW long data type is only 4 bytes wide.
And I didn't even noticed that . This is a slow monday morning...
|
|
|
|
|
Hello everyone,
I think in practical experience, extern is useful only when we have more than one compile unit (cpp file) and making cross-reference between compile units.
In the MSDN extern sample,
http://msdn2.microsoft.com/en-us/library/0603949d.aspx
It only uses one source file (compile unit) to demonstrate the usage of extern, is it correct and practical?
thanks in advance,
George
|
|
|
|
|
It only shows the its usage. U'rs thinking is absolutely correct.
Come online at:-
jubinc@skype
|
|
|
|
|
Hi Don,
I also think it is correct. But do we achieve special benefits if we use extern in the same compile unit?
regards,
George
|
|
|
|
|
No. The reason for extern is to differentiate between a declaration and a definition:
int num; // Is this a definition or a declaration?
In this case the compiler assumes it’s a definition. If you want to share num between two compilation units this will not do the trick and will result in a linker error – there will be two variables with the same name.
extern int num; // This is a declaration.
Now this referrers to a “num” defined elsewhere.
Steve
|
|
|
|
|
Thanks Steve,
In the sample, even if you do not use why we need to write statement, extern int i? i is global and we can use it anywhere in the same compile unit (cpp file).
regards,
George
|
|
|
|
|
As I said, extern is used to indicate that a construct is a declaration and not a definition. With functions no such mechanism is needed: if the function has a body it’s a definition and if not it’s a declaration:
int void FooBar();
int void FooBar()
{
}
If you want to use the “FooBar” function in another compilation unit (from where it’s defined) you need to make sure to include its declaration. This is usually done by including a header file. It’s an error to define the same function twice in two separate compilation units however and attempting to do so will result in a link error.
Since variables don’t have bodies this technique isn’t usable, thus the extern keyword:
int FooBar;
extern int FooBar;
Steve
|
|
|
|
|
Thanks Steve,
How about this,
extern int i = 100;
a definition or declaration, why?
regards,
George
|
|
|
|
|
From section 3.1.2 of the C++ standard:
“A declaration is a definition unless it declares a function without specifying the function’s body (8.4), it contains the extern specifier (7.1.1) or a linkage-specification (7.5) and neither an initializer nor a function-body, it declares a static data member in a class declaration (9.4), it is a class name declaration (9.1), or it is a typedef declaration (7.1.3), a using-declaration (7.3.3), or a using-directive (7.3.4).”
Steve
|
|
|
|
|
Thanks Steve,
1.
So, extern int i = 100;
should be declaration and matches the rule, " it contains the extern specifier (7.1.1)", right?
2.
What is " linkage-specification (7.5)"?
regards,
George
|
|
|
|
|
George_George wrote: 1.
So, extern int i = 100;
should be declaration and matches the rule, " it contains the extern specifier (7.1.1)", right?
No, because of the "and neither an initializer nor a function-body" clause; the example you gave does have an initializer.
extern int i;
extern int i = 100;
George_George wrote: 2.
What is " linkage-specification (7.5)"?
extern "C" is an example.
Steve
|
|
|
|