|
He wants the XOR mode when drawing.
Christian
I am completely intolerant of stupidity. Stupidity is, of course, anything that doesn't conform to my way of thinking. - Jamie Hale - 29/05/2002
|
|
|
|
|
XOR mode drawing isn't supported in GDI+ because its use was considered a hack since you couldn't control the color that was output from its operation.
The recommended solution is to do your drawing so that you don't need XOR mode; or emulate it.
For instance if you were creating a progress bar control that showed the percentage in the middle (ala most setup programs) you would draw the text twice; once with the clipping set to just the area that is being filled; again with it set to the area not being filled choosing appropriate colors both times.
This is a GOOD thing though; because then font features such as antialising and cleartype will work; where as they won't if you blit to a bitmap then xor the bitmap onto another one.
James
"Java is free - and worth every penny." - Christian Graus
|
|
|
|
|
Hi James,
Do you think that I can use the Region class for this issue? I want to build a drawing application which use mouse to draw a shape. But when I drag the mouse I can't clear the previous shape. Can you show me a solution?
Thanks.
|
|
|
|
|
Check out this link:
http://support.microsoft.com/directory/article.asp?ID=KB;EN-US;Q314945&
This works only with rectangles and lines.
Øyvind
|
|
|
|
|
I am trying to use the new XP ballon-style notification tooltip from C# on a WinForms control. I thought I had a pretty good handle on the interop stuff, but am still having some problems.
I've defined the interop pieces I need as follows:
[ StructLayout( LayoutKind.Sequential )]
public struct EDITBALLOONTIP
{
public int cbStruct;
[MarshalAs(UnmanagedType.LPWStr)]
public string pszTitle;
[MarshalAs(UnmanagedType.LPWStr)]
public string pszText;
public int ttiIcon;
};
public const uint EM_SHOWBALLOONTIP = 0x1500 + 3;
public const uint EM_HIDEBALLOONTIP = 0x1500 + 4;
public const int TTI_NONE = 0;
public const int TTI_INFO = 1;
public const int TTI_WARNING = 2;
public const int TTI_ERROR = 3;
[DllImport
("user32.dll",CharSet=CharSet.Unicode,SetLastError=true)]
private static extern int SendMessage(
IntPtr _WindowHandler,
uint _WM_USER,
int _data,
[In] ref EDITBALLOONTIP _id);
So then I create a textbox and place the following in a button click handler:
EDITBALLOONTIP ebt = new EDITBALLOONTIP();
ebt.cbStruct = Marshal.SizeOf(typeof(EDITBALLOONTIP));
ebt.pszTitle = "TITLE TEXT";
ebt.pszText = "This is the text of the balloon.";
ebt.ttiIcon = TTI_ERROR;
MessageBox.Show(
SendMessage(textBox1.Handle,
EM_SHOWBALLOONTIP,0,ref ebt).ToString());
MessageBox.Show(
Marshal.GetLastWin32Error().ToString());
I've used this basic structure to send some other messages around, but this one gives me errors. The first time I click the button when I run the program, I get error 127 (The specified procedure could not be found.), and every time after that, I get 1421 (Control ID not found.).
Any insights are appreciated!
Joel
|
|
|
|
|
Perhaps a stupid question, but how can I search in the message board?
(The normal search only works for articles)
|
|
|
|
|
|
It disappear for unknown reason.
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
|
|
|
|
|
Hi folks
I'm trying to work out if it's possible to make controls on a form transparent or not in the sense that i would like to be able to 'see through' a label control to partially read the text on other controls behind it.
By setting the Color.Transparent property i seem to pick up the color of the parent control but this doesn't allow me to read anything on the parent control - it just sets my child control to the same color.
I know this can be done with Forms by amending the Opacity property but is there any way this can be applied to controls on forms?
Cheers
|
|
|
|
|
|
Hello all,
Please show me where I can find out a drawing application that built by C# using GDI+. The source code is enclosed certainly.
Thanks.
|
|
|
|
|
there's a C#-scribble in my MSDN-documentation. maybe you also have one...
:wq
|
|
|
|
|
If I write following code:
int i = 1;
object o = i;
object a = o;
Is 'o' a reference to 'i' or
is 'o' a copy of 'i' ???
Is 'a' a reference to 'o' or
is 'a' a copy of 'o' ???
(Sorry for my bad english )
Thanks for every answer!
|
|
|
|
|
jb_dani wrote:
Sorry for my bad english
It's fine.
int i = 1;
object o = i;
Console.WriteLine(o.ToString());
i=10;
Console.WriteLine(o.ToString());
Console.ReadLine();
Output is: "1 \n 1"
The "i" value is copied to object "o", so there is no longer a reference between the two.
HTH
Cheers,
Simon
"Sign up for a chance to be among the first to experience the wrath of the gods.", Microsoft's home page (24/06/2002)
|
|
|
|
|
Thanks, but i a second question (sorry)...
What's with the following code:
Test t1 = new Test();
Test t2 = t1;
What is 't2'? Is it also a copy of t1 or a reference?
Thanks!!!
MFG Daniel.
|
|
|
|
|
I'm not sure what those classes are, but:
class Test1
{
public int _i =-1;
public Test1(int i)
{_i=i;}
public override string ToString()
{return _i.ToString();}
}
Test1 t1 = new Test1(100);
Test1 t2 = t1;
Console.WriteLine(t1.ToString());
t2._i=200;
Console.WriteLine(t2.ToString());
Console.WriteLine(t1.ToString());
Console.ReadLine(); Proves that t2 and t1 point to the same location in mem.
Does that help you?
Cheers,
Simon
"Sign up for a chance to be among the first to experience the wrath of the gods.", Microsoft's home page (24/06/2002)
|
|
|
|
|
I how can i make a full copy of a object, so that when i change the member in object 1, the member in object 2 will not be changed???? So, as a deep copy in c++!!!
MFG Daniel.
|
|
|
|
|
I'm pretty sure there's a copy and a clone method for this type of thing, but I have a feeling that you're going to have to implement it yourself.
I'll have a look though.
modified: do a search for ICloneable.Clone Method in MSDN. The ICloneable interface looks like what you're looking for.
HTH
Cheers,
Simon
"Sign up for a chance to be among the first to experience the wrath of the gods.", Microsoft's home page (24/06/2002)
|
|
|
|
|
To get a deep copy in C# do this:
public static object Clone(object objectToClone)
{
if (objectToClone == null)
{
throw new ArgumentNullException("objectToClone", "Parameter can not be null.");
}
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
formatter.Serialize(stream, objectToClone);
stream.Seek(0, SeekOrigin.Begin);
return formatter.Deserialize(stream);
}
To deep copy an object with this method, use:
MyTest originalObject = new MyTest(a, lot, of, stuff);
MyTest cloneObject = (MyTest)Clone(originalObject);
The best part is that this is generic: extend MyTest with properties and you don't have to change the clone method.
Øyvind
|
|
|
|
|
SimonS wrote:
"Sign up for a chance to be among the first to experience the wrath of the gods.", Microsoft's home page (24/06/2002)
This beats them all.
|
|
|
|
|
O will be an Object that points to a new System.Int32 with the value of i, and if you change the value of O to 2, i will still be 1.
So the short answer is that it is a copy.
/Bo
|
|
|
|
|
And the follwing code:
Test t1 = new Test();
Test t2 = t1;
What is 't2'? Is it also a copy of t1 or a reference?
Thanks!!!
MFG Daniel.
|
|
|
|
|
Both t1 and t2 will be references to the new Test object created. No copy is made - and yes they are "pointers" - even if somebody tells you that C# ´don't have pointers.
/Bo
|
|
|
|
|
have you heard about boxing and unboxing?
i'm not 100% but pretty sure it goes like this:
* i is an int and placed on the stack.
* o is an object and therefore placed on the heap - i is "boxed" and the boxed copy is referenced by o - i believe, o is a COPY of i
* you can check with object.ReferenceEquals(a,o) that a and o point to the same object
as said before - i'm not 100 percent sure about it...(still a beginner to C# and .NET)
:wq
|
|
|
|
|
Oh boy am I tired, but glad I read your post because I was just getting ready to respond with the explanation you gave.
To my knowledge, any time you instansiate an object of a class in C# you are doing so on the heap, however when you use static methods, objects aren't required for this and therefore they process on the stack. Hopefully I am not mumbling here as I have been up for way to long.
HTH
Nick Parker
|
|
|
|