[Mono-list] Patch to Sys.Win.Forms/Sys.Drawing 1/2
Alexandre Pigolkine
pigolkine@gmx.de
20 Feb 2003 00:20:43 +0100
Index: Button.cs
===================================================================
RCS file: /mono/mcs/class/System.Windows.Forms/System.Windows.Forms/Button.cs,v
retrieving revision 1.11
diff -u -r1.11 Button.cs
--- Button.cs 10 Feb 2003 06:28:51 -0000 1.11
+++ Button.cs 19 Feb 2003 23:03:13 -0000
@@ -11,6 +11,7 @@
//
using System.Drawing;
+using System.Runtime.InteropServices;
namespace System.Windows.Forms {
@@ -261,12 +262,13 @@
switch (m.Msg) {
case Msg.WM_DRAWITEM: {
DRAWITEMSTRUCT dis = new DRAWITEMSTRUCT();
- Win32.CopyMemory(ref dis, m.LParam, 48);
+ dis = (DRAWITEMSTRUCT)Marshal.PtrToStructure(m.LParam, dis.GetType());
Rectangle rect = new Rectangle(dis.rcItem.left, dis.rcItem.top, dis.rcItem.right - dis.rcItem.left, dis.rcItem.bottom - dis.rcItem.top);
DrawItemEventArgs args = new DrawItemEventArgs(Graphics.FromHdc(dis.hDC), Font,
rect, dis.itemID, (DrawItemState)dis.itemState);
OnDrawItem( args);
- Win32.CopyMemory(m.LParam, ref dis, 48);
+ //Marshal.StructureToPtr(dis, m.LParam, false);
+ m.Result = (IntPtr)1;
}
break;
default:
Index: ChangeLog
===================================================================
RCS file: /mono/mcs/class/System.Windows.Forms/System.Windows.Forms/ChangeLog,v
retrieving revision 1.82
diff -u -r1.82 ChangeLog
--- ChangeLog 14 Feb 2003 02:17:26 -0000 1.82
+++ ChangeLog 19 Feb 2003 23:03:13 -0000
@@ -1,3 +1,14 @@
+ 2003-02-19 Alexandre Pigolkine <pigolkine@gmx.de>
+ * Button.cs
+ * CheckedListBox.cs
+ * ComboBox.cs
+ * Control.cs
+ * ControlPaint.cs
+ * Form.cs
+ * ListBox.cs
+ * win32functions.cs
+ implementation added
+
2003-02-11 Alexandre Pigolkine <pigolkine@gmx.de>
* ButtonBase.cs
* ComboBox.cs
@@ -1297,6 +1308,7 @@
* RichTextBoxSelectionAttribute.cs
* RichTextBoxSelectionTypes.cs
* RichTextBoxStreamType.cs
+
* RichTextBoxWordPunctuations.cs
* RightToLeft.cs
* SaveFileDialog.cs
@@ -1960,6 +1972,7 @@
* Stubbed and commented out
* NativeWindow.cs, MonthCalendar.HitTestInfo.cs, MouseEventArgs.cs,
* have bad extra byte from old skeleton, need new corrected version.
+
* MonthCalendar.HitTestInfo.cs needs to be incorporated into MonthCalendar.
2002-5-27 DennisHayes <dennish@raytek.com>
Index: CheckedListBox.cs
===================================================================
RCS file: /mono/mcs/class/System.Windows.Forms/System.Windows.Forms/CheckedListBox.cs,v
retrieving revision 1.13
diff -u -r1.13 CheckedListBox.cs
--- CheckedListBox.cs 6 Feb 2003 03:44:35 -0000 1.13
+++ CheckedListBox.cs 19 Feb 2003 23:03:14 -0000
@@ -23,6 +23,7 @@
// private fields
private bool checkOnClick;
private bool threeDCheckBoxes;
+ private CheckedListBox.ObjectCollection Items_;
// --- Constructor ---
@@ -30,6 +31,8 @@
{
checkOnClick = false;
threeDCheckBoxes = true;
+ Items_ = new CheckedListBox.ObjectCollection(this);
+ DrawMode_ = DrawMode.Normal;
}
// --- CheckedListBox Properties ---
@@ -57,37 +60,23 @@
[MonoTODO]
protected override CreateParams CreateParams {
get {
- CreateParams createParams = new CreateParams ();
- window = new ControlNativeWindow (this);
-
- createParams.Caption = Text;
- createParams.ClassName = "CHECKEDLISTBOX";
- createParams.X = Left;
- createParams.Y = Top;
- createParams.Width = Width;
- createParams.Height = Height;
- createParams.ClassStyle = 0;
- createParams.ExStyle = 0;
- createParams.Param = 0;
- // createParams.Parent = Parent.Handle;
- createParams.Style = (int) (
- WindowStyles.WS_CHILD |
- WindowStyles.WS_VISIBLE |
- WindowStyles.WS_CLIPSIBLINGS);
- window.CreateHandle (createParams);
- return createParams;
+ if( Parent != null) {
+ CreateParams createParams = base.CreateParams;
+ // set ownerDraw flag to be able to paint check-boxes
+ createParams.Style |= (int)ListBoxStyles.LBS_OWNERDRAWFIXED;
+ return createParams;
+ }
+ return null;
}
}
[MonoTODO]
public override DrawMode DrawMode {
get {
- //FIXME
- return base.DrawMode;
+ return DrawMode.Normal;
}
set {
- //FIXME
- base.DrawMode = value;
+ // always DrawMode.Normal
}
}
@@ -106,7 +95,7 @@
[MonoTODO]
public CheckedListBox.ObjectCollection Items {
get {
- throw new NotImplementedException ();
+ return Items_;
}
}
@@ -188,8 +177,11 @@
[MonoTODO]
protected override void OnDrawItem(DrawItemEventArgs e)
{
- //FIXME
- base.OnDrawItem(e);
+ Rectangle checkRect = new Rectangle( e.Bounds.Left, e.Bounds.Top, e.Bounds.Height, e.Bounds.Height);
+ Rectangle textRect = new Rectangle( checkRect.Right, e.Bounds.Top, e.Bounds.Width - checkRect.Width, e.Bounds.Height);
+ ControlPaint.DrawCheckBox(e.Graphics, checkRect, ButtonState.Normal);
+ e.Graphics.DrawString(Items_[e.Index].ToString(), Font, SystemBrushes.ControlText, textRect.X, textRect.Y);
+ //base.OnDrawItem(e);
}
[MonoTODO]
@@ -204,6 +196,11 @@
{
//FIXME
base.OnHandleCreated(e);
+ if( Items_ != null) {
+ foreach( object item in Items_) {
+ Win32.SendMessage(Handle, (int)ListBoxMessages.LB_ADDSTRING, 0, item.ToString());
+ }
+ }
}
// only supports .NET framework, thus is not stubbed out
@@ -265,9 +262,6 @@
/// - public new event DrawItemEventHandler DrawItem;
/// - public new event MeasureItemEventHandler MeasureItem;
public event ItemCheckEventHandler ItemCheck;
-
-
-
/// sub-class: CheckedListBox.CheckedIndexCollection
/// <summary>
Index: ComboBox.cs
===================================================================
RCS file: /mono/mcs/class/System.Windows.Forms/System.Windows.Forms/ComboBox.cs,v
retrieving revision 1.19
diff -u -r1.19 ComboBox.cs
--- ComboBox.cs 14 Feb 2003 02:17:26 -0000 1.19
+++ ComboBox.cs 19 Feb 2003 23:03:14 -0000
@@ -11,6 +11,7 @@
using System.ComponentModel;
using System.Collections;
using System.Drawing;
+using System.Runtime.InteropServices;
namespace System.Windows.Forms {
@@ -37,6 +38,7 @@
int selecedStart;
private ComboBox.ObjectCollection Items_ = null;
int itemHeight_;
+ int maxDropDownItems;
bool updateing; // true when begin update has been called. do not paint when true;
// --- Constructor ---
@@ -58,8 +60,10 @@
text = "";
Items_ = new ComboBox.ObjectCollection(this);
itemHeight_ = 13;
-
+ maxDropDownItems = 8;
SubClassWndProc_ = true;
+
+ Size = DefaultSize;
}
// --- Properties ---
@@ -91,6 +95,12 @@
}
}
+ internal int getDropDownHeight() {
+ // FIXME: use PreferredHeight instead of DefaultSize.Height ?
+ // FIXME: those calculations probably wrong
+ return DefaultSize.Height + (maxDropDownItems + 1) * itemHeight_ - (itemHeight_ / 2);
+ }
+
[MonoTODO]
protected override CreateParams CreateParams {
get {
@@ -105,8 +115,12 @@
createParams.X = Left;
createParams.Y = Top;
createParams.Width = Width;
- // FIXME: Create combo box with 5 elements in drop down list box
- createParams.Height = Height * 5;
+ if( DropDownStyle == ComboBoxStyle.Simple) {
+ createParams.Height = Height;
+ }
+ else {
+ createParams.Height = getDropDownHeight();
+ }
createParams.ClassStyle = 0;
createParams.ExStyle = (int)( WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_NOPARENTNOTIFY);
createParams.Param = 0;
@@ -141,10 +155,12 @@
if( !integralHeight) {
createParams.Style |= (int)ComboBoxStyles.CBS_NOINTEGRALHEIGHT;
}
+/*
+ * Keep Control unsorted, but sort data in Items (ArrayList)
if( sorted) {
createParams.Style |= (int)ComboBoxStyles.CBS_SORT;
}
-
+*/
return createParams;
}
return null;
@@ -156,7 +172,25 @@
return new Size(121,21);//correct size
}
}
+/*
+ public new Size Size {
+ //FIXME: should we return client size or someother size???
+ get {
+ return base.Size;
+ }
+ set {
+ if( dropDownStyle == ComboBoxStyle.Simple) {
+ Size sz = value;
+ sz.Height += maxDropDownItems * itemHeight_;
+ base.Size = sz;
+ }
+ else {
+ base.Size = value;
+ }
+ }
+ }
+*/
public DrawMode DrawMode {
get {
return drawMode;
@@ -268,10 +302,15 @@
[MonoTODO]
public int MaxDropDownItems {
get {
- throw new NotImplementedException ();
+ return maxDropDownItems;
}
set {
- //FIXME:
+ if( maxDropDownItems != value) {
+ maxDropDownItems = value;
+ if( DropDownStyle != ComboBoxStyle.Simple) {
+ Height = getDropDownHeight();
+ }
+ }
}
}
@@ -371,16 +410,13 @@
sorted = value;
if( IsHandleCreated) {
if( sorted) {
- Win32.UpdateWindowStyle(Handle, 0, (int)ComboBoxStyles.CBS_SORT);
object[] items = new object[Items.Count];
Items.CopyTo(items, 0);
Items.Clear();
Items.AddRange(items);
}
- else {
- Win32.UpdateWindowStyle(Handle, (int)ComboBoxStyles.CBS_SORT, 0);
- }
}
+ selectedIndex = -1;
}
}
}
@@ -395,15 +431,13 @@
}
}
-
-
-
/// --- Methods ---
/// internal .NET framework supporting methods, not stubbed out:
internal void populateControl( ICollection items) {
if( IsHandleCreated && items != null) {
foreach( object obj in items) {
+ // CHECKME : shall we check for null here or in Add/Insert functions
if( obj != null) {
Win32.SendMessage(Handle, (int)ComboBoxMessages.CB_ADDSTRING, 0, getDisplayMemberOfObj(obj));
}
@@ -514,7 +548,9 @@
[MonoTODO]
protected virtual void OnDropDownStyleChanged(EventArgs e)
{
- //FIXME:
+ if( DropDownStyleChanged != null) {
+ DropDownStyleChanged(this, e);
+ }
}
[MonoTODO]
@@ -615,7 +651,24 @@
protected override void SetBoundsCore(int x,int y,int width,int height,BoundsSpecified specified)
{
//FIXME:
+ // If DropDownStyle == ComboBoxStyle.Simple, the heigth is a real window height - no control over it
+ // else,
+ // if Handle created - specify complete height, ComboBox-control will adjust window rectangle
+ // else - set the height to Default.
+ if(DropDownStyle != ComboBoxStyle.Simple) {
+ if( IsHandleCreated) {
+ height = getDropDownHeight();
+ }
+ else {
+ height = DefaultSize.Height;
+ }
+ }
base.SetBoundsCore(x,y,width,height,specified);
+ // FIXME: this is needed, otherwise painting is not correct
+ if( dropDownStyle == ComboBoxStyle.Simple ) {
+ Win32.InvalidateRect(Handle, IntPtr.Zero, 0);
+ Win32.UpdateWindow(Handle);
+ }
}
// for IList interface
@@ -639,24 +692,26 @@
switch (m.Msg) {
case Msg.WM_MEASUREITEM: {
MEASUREITEMSTRUCT mis = new MEASUREITEMSTRUCT();
- Win32.CopyMemory(ref mis, m.LParam, 24);
+ mis = (MEASUREITEMSTRUCT)Marshal.PtrToStructure(m.LParam, mis.GetType());
MeasureItemEventArgs args = new MeasureItemEventArgs(CreateGraphics(),mis.itemID);
args.ItemHeight = mis.itemHeight;
args.ItemWidth = mis.itemWidth;
OnMeasureItem( args);
mis.itemHeight = args.ItemHeight;
mis.itemWidth = args.ItemWidth;
- Win32.CopyMemory(m.LParam, ref mis, 24);
+ Marshal.StructureToPtr(mis, m.LParam, false);
+ m.Result = (IntPtr)1;
}
break;
case Msg.WM_DRAWITEM: {
DRAWITEMSTRUCT dis = new DRAWITEMSTRUCT();
- Win32.CopyMemory(ref dis, m.LParam, 48);
+ dis = (DRAWITEMSTRUCT)Marshal.PtrToStructure(m.LParam, dis.GetType());
Rectangle rect = new Rectangle(dis.rcItem.left, dis.rcItem.top, dis.rcItem.right - dis.rcItem.left, dis.rcItem.bottom - dis.rcItem.top);
DrawItemEventArgs args = new DrawItemEventArgs(Graphics.FromHdc(dis.hDC), Font,
rect, dis.itemID, (DrawItemState)dis.itemState);
OnDrawItem( args);
- Win32.CopyMemory(m.LParam, ref dis, 48);
+ //Marshal.StructureToPtr(dis, m.LParam, false);
+ m.Result = (IntPtr)1;
}
break;
/*
@@ -771,22 +826,49 @@
[MonoTODO] get { return collection_.IsSynchronized; }
}
+ class ComboItemComparer : IComparer {
+ private ComboBox owner_ = null;
+ public ComboItemComparer(ComboBox owner) {
+ owner_ = owner;
+ }
+
+ public int Compare(object x, object y) {
+ return owner_.getDisplayMemberOfObj(x).CompareTo(owner_.getDisplayMemberOfObj(y));
+ }
+ }
+
/// --- methods ---
/// --- ObjectCollection Methods ---
/// Note: IList methods are stubbed out, otherwise IList interface cannot be implemented
[MonoTODO]
- public int Add(object item)
- {
- int result = collection_.Add(item);
- owner_.populateControl(new object[] {item});
- return result;
+ public int Add(object item) {
+ // FIXME: not optimal
+ int idx = collection_.Add(item);
+ if( owner_.Sorted) {
+ ComboItemComparer cic = new ComboItemComparer(owner_);
+ collection_.Sort(cic);
+ idx = collection_.BinarySearch(item,cic);
+ if( owner_.IsHandleCreated) {
+ Win32.SendMessage(owner_.Handle, (int)ComboBoxMessages.CB_INSERTSTRING, idx, owner_.getDisplayMemberOfObj(item));
+ }
+ }
+ else {
+ if( owner_.IsHandleCreated) {
+ Win32.SendMessage(owner_.Handle, (int)ComboBoxMessages.CB_ADDSTRING, 0, owner_.getDisplayMemberOfObj(item));
+ }
+ }
+ return idx;
}
[MonoTODO]
public void AddRange(object[] items)
{
- collection_.AddRange(items);
- owner_.populateControl(items);
+ // FIXME: not optimal
+ foreach(object item in items) {
+ Add(item);
+ }
+// owner_.populateControl(items);
+// collection_.AddRange(items);
}
[MonoTODO]
Index: Control.cs
===================================================================
RCS file: /mono/mcs/class/System.Windows.Forms/System.Windows.Forms/Control.cs,v
retrieving revision 1.26
diff -u -r1.26 Control.cs
--- Control.cs 14 Feb 2003 02:17:26 -0000 1.26
+++ Control.cs 19 Feb 2003 23:03:15 -0000
@@ -81,6 +81,7 @@
bool visible;
object tag;
protected bool mouseIsInside_;
+ bool recreatingHandle;
// BeginInvoke() etc. helpers
static int InvokeMessage = Win32.RegisterWindowMessage("mono_control_invoke_helper");
@@ -189,6 +190,7 @@
visible = true;
parent = null;
mouseIsInside_ = false;
+ recreatingHandle = false;
// Do not create Handle here, only in CreateHandle
// CreateHandle();//sets window handle. FIXME: No it does not
}
@@ -354,12 +356,7 @@
} else return bounds;
}
set {
- if (IsHandleCreated)
- Win32.SetWindowPos (
- //Handle, (IntPtr) 0, value.X, value.Y,
- Handle, SetWindowPosZOrder.HWND_TOPMOST, value.X, value.Y,
- value.Width, value.Height, 0);
- else bounds = value;
+ SetBounds(value.Left, value.Top, value.Width, value.Height);
}
}
@@ -487,8 +484,7 @@
else {
Win32.AdjustWindowRect( ref rc, styleIfNoWindow, menuIfNoWindow ? 1 : 0);
}
- Width = rc.right - rc.left;
- Height = rc.bottom - rc.top;
+ Size = new Size(rc.right - rc.left, rc.bottom - rc.top);
}
public bool ContainsFocus {
@@ -755,10 +751,11 @@
return bounds.Height;
}
set {
- bounds.Height = value;
+ //bounds.Height = value;
if (IsHandleCreated) {
// FIXME: SetWindowPos
}
+ SetBounds(bounds.X, bounds.Y, bounds.Width, value, BoundsSpecified.Height);
}
}
@@ -807,11 +804,10 @@
} else return bounds.X;
}
set {
- bounds.X = value;
-
if (IsHandleCreated) {
// FIXME: SetWindowPos
}
+ SetBounds(value, bounds.Y, bounds.Width, bounds.Height, BoundsSpecified.X);
}
}
@@ -822,13 +818,10 @@
return new Point (Top, Left);
}
set {
- bounds.X = value.X;
- bounds.Y = value.Y;
-
if (IsHandleCreated) {
// FIXME: SetWindowPos
}
-
+ SetBounds(value.X, value.Y, bounds.Width, bounds.Height, BoundsSpecified.Location);
}
}
@@ -918,7 +911,7 @@
[MonoTODO]
public bool RecreatingHandle {
get {
- throw new NotImplementedException ();
+ return recreatingHandle;
}
}
@@ -1004,15 +997,16 @@
}
set {
if( IsHandleCreated) {
+/*
Win32.SetWindowPos(Handle, SetWindowPosZOrder.HWND_TOP, 0, 0, value.Width, value.Height,
SetWindowPosFlags.SWP_NOMOVE | SetWindowPosFlags.SWP_NOMOVE |
SetWindowPosFlags.SWP_NOZORDER);// Activating might be a good idea?? | SetWindowPosFlags.SWP_NOACTIVATE);
+*/
}
-
- Width = value.Width;
- Height = value.Height;
- }
+ SetBounds(bounds.X, bounds.Y, value.Width, value.Height, BoundsSpecified.Size);
+ }
}
+
internal int tabindex;//for debug/test only. remove
[MonoTODO]
public int TabIndex {
@@ -1078,12 +1072,11 @@
} else return bounds.Top;
}
set {
- bounds.Y = value;
-
if (IsHandleCreated) {
// FIXME: SetWindowPos
}
- }
+ SetBounds(bounds.X, value, bounds.Width, bounds.Height, BoundsSpecified.Y);
+ }
}
[MonoTODO]
@@ -1117,11 +1110,11 @@
return bounds.Width;
}
set {
- bounds.Width = value;
if (IsHandleCreated) {
// FIXME: SetWindowPos
}
- }
+ SetBounds(bounds.X, bounds.Y, value, bounds.Height, BoundsSpecified.Width);
+ }
}
/// --- methods ---
@@ -1656,7 +1649,7 @@
protected virtual void OnMouseEnter (EventArgs e)
{
- System.Console.WriteLine("OnMouseEnter");
+ //System.Console.WriteLine("OnMouseEnter");
if (MouseEnter != null)
MouseEnter (this, e);
}
@@ -1669,7 +1662,7 @@
protected virtual void OnMouseLeave (EventArgs e)
{
- System.Console.WriteLine("OnMouseLeave");
+ //System.Console.WriteLine("OnMouseLeave");
mouseIsInside_ = false;
if (MouseLeave != null)
@@ -1978,25 +1971,41 @@
// are big enough to warrant recreating the HWND
protected void RecreateHandle()
{
+ recreatingHandle = true;
if( IsHandleCreated) {
DestroyHandle ();
CreateHandle ();
}
- }
+ recreatingHandle = false;
+ }
//Compact Framework
[MonoTODO]
public Rectangle RectangleToClient (Rectangle r)
{
- throw new NotImplementedException ();
+ // FIXME: What to return if Handle is not created yet ?
+ RECT rect = new RECT();
+ rect.left = r.Left;
+ rect.top = r.Top;
+ rect.right = r.Right;
+ rect.bottom = r.Bottom;
+ Win32.ScreenToClient(Handle,ref rect);
+ return new Rectangle( rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top);
}
//Compact Framework
[MonoTODO]
public Rectangle RectangleToScreen (Rectangle r)
{
- throw new NotImplementedException ();
- }
+ // FIXME: What to return if Handle is not created yet ?
+ RECT rect = new RECT();
+ rect.left = r.Left;
+ rect.top = r.Top;
+ rect.right = r.Right;
+ rect.bottom = r.Bottom;
+ Win32.ClientToScreen(Handle,ref rect);
+ return new Rectangle( rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top);
+ }
[MonoTODO]
protected static bool ReflectMessage (IntPtr hWnd, ref Message m) {
@@ -2161,22 +2170,45 @@
[MonoTODO]
public void SetBounds (int x, int y, int width, int height)
{
- //FIXME:
+ SetBounds(x, y, width, height, BoundsSpecified.All);
}
[MonoTODO]
- public void SetBounds (int x, int y, int width, int height,
- BoundsSpecified specified)
+ public void SetBounds (int x, int y, int width, int height, BoundsSpecified specified)
{
- //FIXME:
+ SetBoundsCore( x, y, width, height, specified);
}
[MonoTODO]
- protected virtual void SetBoundsCore (
- int x, int y, int width, int height,
- BoundsSpecified specified)
+ protected virtual void SetBoundsCore ( int x, int y, int width, int height, BoundsSpecified specified)
{
- //FIXME:
+ if( IsHandleCreated) {
+// SetWindowPosFlags flags = SetWindowPosFlags.SWP_NOOWNERZORDER | SetWindowPosFlags.SWP_NOZORDER |
+// SetWindowPosFlags.SWP_FRAMECHANGED | SetWindowPosFlags.SWP_DRAWFRAME;
+ SetWindowPosFlags flags = SetWindowPosFlags.SWP_NOZORDER |
+ SetWindowPosFlags.SWP_FRAMECHANGED | SetWindowPosFlags.SWP_DRAWFRAME;
+ Win32.SetWindowPos( Handle, SetWindowPosZOrder.HWND_NOTOPMOST, x, y, width, height, flags);
+ RECT rect = new RECT();
+ Win32.GetWindowRect (Handle, ref rect);
+ if( Parent != null) {
+ Win32.ScreenToClient(Parent.Handle, ref rect);
+ }
+ bounds = new Rectangle (rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top);
+ }
+ else {
+ if( (specified & BoundsSpecified.X) != 0) {
+ bounds.X = x;
+ }
+ if( (specified & BoundsSpecified.Y) != 0) {
+ bounds.Y = y;
+ }
+ if( (specified & BoundsSpecified.Width) != 0) {
+ bounds.Width = width;
+ }
+ if( (specified & BoundsSpecified.Height) != 0) {
+ bounds.Height = height;
+ }
+ }
}
[MonoTODO]
Index: ControlPaint.cs
===================================================================
RCS file: /mono/mcs/class/System.Windows.Forms/System.Windows.Forms/ControlPaint.cs,v
retrieving revision 1.13
diff -u -r1.13 ControlPaint.cs
--- ControlPaint.cs 10 Feb 2003 06:28:51 -0000 1.13
+++ ControlPaint.cs 19 Feb 2003 23:03:15 -0000
@@ -285,21 +285,28 @@
}
[MonoTODO]
- public static void DrawCheckBox(
- Graphics graphics,
- Rectangle rectangle) {
- //FIXME:
+ public static void DrawCheckBox( Graphics graphics, Rectangle rectangle, ButtonState state) {
+ // FIXME: (sometimes) DrawFrameControl paints control not in "desired" position ( DC coordinates transformed or something like this)
+ // so, we paint to the bitmap ( fresh DC, (0,0)) and then DrawImage to requested position
+ Bitmap bmp = new Bitmap(rectangle.Width+1, rectangle.Height+1,graphics);
+ Graphics g = Graphics.FromImage(bmp);
+ // FIXME: fill new context with some color here?
+ IntPtr hdc = g.GetHdc();
+ RECT rc = new RECT();
+ rc.left = 0;
+ rc.top = 0;
+ rc.right = rectangle.Width;
+ rc.bottom = rectangle.Height;
+ int res = Win32.DrawFrameControl( hdc, ref rc, (uint)DrawFrameControl.DFC_BUTTON, (uint)DrawFrameControl.DFCS_BUTTONCHECK);
+ g.ReleaseHdc(hdc);
+ g.Dispose();
+ graphics.DrawImage(bmp, rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
+ bmp.Dispose();
}
[MonoTODO]
- public static void DrawCheckBox(
- Graphics graphics,
- int x,
- int y,
- int width,
- int height,
- ButtonState state) {
- //FIXME:
+ public static void DrawCheckBox(Graphics graphics, int x, int y, int width, int height, ButtonState state) {
+ DrawCheckBox(graphics, new Rectangle(x, y, width, height), state);
}
[MonoTODO]
Index: Form.cs
===================================================================
RCS file: /mono/mcs/class/System.Windows.Forms/System.Windows.Forms/Form.cs,v
retrieving revision 1.26
diff -u -r1.26 Form.cs
--- Form.cs 6 Feb 2003 03:45:10 -0000 1.26
+++ Form.cs 19 Feb 2003 23:03:15 -0000
@@ -304,7 +304,8 @@
// //long myStyle = Win32.GetWindowLongA( Handle, Win32.GWL_STYLE);
// //myStyle |= (long)Win32.WS_OVERLAPPEDWINDOW;
// //Win32.SetWindowLongA( Handle, Win32.GWL_STYLE, myStyle);
- Win32.SetMenu( Handle, mainMenu_.Handle);
+ int res = Win32.SetMenu( Handle, mainMenu_.Handle);
+ Console.WriteLine ("Form.assignMenu. result {0}", res);
}
else {
Win32.SetMenu( Handle, IntPtr.Zero);
@@ -656,7 +657,7 @@
protected override void OnHandleCreated (EventArgs e)
{
base.OnHandleCreated (e);
- Console.WriteLine ("OnHandleCreated");
+ Console.WriteLine ("Form.OnHandleCreated");
assignMenu();
}
Index: ListBox.cs
===================================================================
RCS file: /mono/mcs/class/System.Windows.Forms/System.Windows.Forms/ListBox.cs,v
retrieving revision 1.20
diff -u -r1.20 ListBox.cs
--- ListBox.cs 6 Feb 2003 03:45:10 -0000 1.20
+++ ListBox.cs 19 Feb 2003 23:03:16 -0000
@@ -9,6 +9,7 @@
//
using System.Collections;
using System.Drawing;
+using System.Runtime.InteropServices;
namespace System.Windows.Forms {
@@ -33,6 +34,7 @@
protected ListBox.ObjectCollection Items_ = null;
protected DrawMode DrawMode_ = DrawMode.Normal;
protected bool UseTabStops_ = false;
+ protected bool MultiColumn_ = false;
//
// --- Public Fields
@@ -67,6 +69,19 @@
base.BackgroundImage = value;
}
}
+
+ public bool MultiColumn {
+ get {
+ return MultiColumn_;
+ }
+ set {
+ if( MultiColumn_ != value) {
+ MultiColumn_ = value;
+ RecreateHandle();
+ }
+ }
+ }
+
[MonoTODO]
public override RightToLeft RightToLeft {
get {
@@ -324,6 +339,12 @@
createParams.Style |= (int)ListBoxStyles.LBS_OWNERDRAWVARIABLE;
break;
}
+ if( MultiColumn_) {
+ createParams.Style |= (int)ListBoxStyles.LBS_MULTICOLUMN | (int)WindowStyles.WS_HSCROLL;
+ }
+ else {
+ createParams.Style |= (int)WindowStyles.WS_VSCROLL;
+ }
// CHECKME : this call is commented because (IMHO) Control.CreateHandle supposed to do this
// and this function is CreateParams, not CreateHandle
// window.CreateHandle (createParams);
@@ -403,6 +424,11 @@
protected override void OnHandleCreated(EventArgs e) {
//FIXME:
base.OnHandleCreated(e);
+ if( Items_ != null) {
+ foreach( object item in Items_) {
+ Win32.SendMessage(Handle, (int)ListBoxMessages.LB_ADDSTRING, 0, item.ToString());
+ }
+ }
}
[MonoTODO]
protected override void OnHandleDestroyed(EventArgs e) {
@@ -461,24 +487,26 @@
switch (m.Msg) {
case Msg.WM_MEASUREITEM: {
MEASUREITEMSTRUCT mis = new MEASUREITEMSTRUCT();
- Win32.CopyMemory(ref mis, m.LParam, 24);
+ mis = (MEASUREITEMSTRUCT)Marshal.PtrToStructure(m.LParam, mis.GetType());
MeasureItemEventArgs args = new MeasureItemEventArgs(CreateGraphics(),mis.itemID);
args.ItemHeight = mis.itemHeight;
args.ItemWidth = mis.itemWidth;
OnMeasureItem( args);
mis.itemHeight = args.ItemHeight;
mis.itemWidth = args.ItemWidth;
- Win32.CopyMemory(m.LParam, ref mis, 24);
+ Marshal.StructureToPtr(mis, m.LParam, false);
+ m.Result = (IntPtr)1;
}
break;
case Msg.WM_DRAWITEM: {
DRAWITEMSTRUCT dis = new DRAWITEMSTRUCT();
- Win32.CopyMemory(ref dis, m.LParam, 48);
+ dis = (DRAWITEMSTRUCT)Marshal.PtrToStructure(m.LParam, dis.GetType());
Rectangle rect = new Rectangle(dis.rcItem.left, dis.rcItem.top, dis.rcItem.right - dis.rcItem.left, dis.rcItem.bottom - dis.rcItem.top);
DrawItemEventArgs args = new DrawItemEventArgs(Graphics.FromHdc(dis.hDC), Font,
rect, dis.itemID, (DrawItemState)dis.itemState);
OnDrawItem( args);
- Win32.CopyMemory(m.LParam, ref dis, 48);
+ //Marshal.StructureToPtr(dis, m.LParam, false);
+ m.Result = (IntPtr)1;
}
break;
default:
@@ -696,6 +724,9 @@
int result = -1;
if( item != null) {
result = items_.Add(item);
+ if( owner_.IsHandleCreated) {
+ Win32.SendMessage(owner_.Handle, (int)ListBoxMessages.LB_ADDSTRING, 0, item.ToString());
+ }
}
return result;
}
Index: NativeWindow.cs
===================================================================
RCS file: /mono/mcs/class/System.Windows.Forms/System.Windows.Forms/NativeWindow.cs,v
retrieving revision 1.19
diff -u -r1.19 NativeWindow.cs
--- NativeWindow.cs 14 Feb 2003 02:17:53 -0000 1.19
+++ NativeWindow.cs 19 Feb 2003 23:03:16 -0000
@@ -110,6 +110,7 @@
if( (cp.Style & (int)WindowStyles.WS_CHILD) != 0) {
Win32.SetWindowLong(windowHandle, GetWindowLongFlag.GWL_ID, (int)windowHandle);
}
+ System.Console.WriteLine("Created window {0}, class {1}", windowHandle,cp.ClassName);
}
//debug
else {
@@ -177,14 +178,16 @@
{
}
+ static int messageLevel = 0;
static private IntPtr WndProc (
- IntPtr hWnd, Msg msg, IntPtr wParam, IntPtr lParam)
+ IntPtr hWnd, Msg msg, IntPtr wParam, IntPtr lParam)
{
+ Console.WriteLine("WndProc{0} enter {1}", messageLevel++, msg);
Message message = new Message ();
NativeWindow window = null;
// CHECKME: This try/catch is implemented to keep Message Handlers "Exception safe"
try {
- // windowCollection is a collection of all the
+ // windowCollection is a collection of all the
// NativeWindow(s) that have been created.
// Dispatch the current message to the approriate
// window.
@@ -194,10 +197,10 @@
message.WParam = wParam;
message.LParam = lParam;
message.Result = (IntPtr) 0;
-
+
if (msg == Msg.WM_CREATE)
Console.WriteLine ("WM_CREATE (static)");
-
+
if (window != null) {
if (msg == Msg.WM_CREATE) {
Console.WriteLine ("WM_CREATE (static != null)");
@@ -215,9 +218,10 @@
if( window != null)
window.OnThreadException(ex);
}
+ Console.WriteLine("WndProc{0} exit {1}",--messageLevel, msg);
return message.Result;
}
-
+
internal static Win32.WndProc GetWindowProc() {
if( wp == null){
wp = new Win32.WndProc (WndProc);
Index: win32functions.cs
===================================================================
RCS file: /mono/mcs/class/System.Windows.Forms/System.Windows.Forms/win32functions.cs,v
retrieving revision 1.10
diff -u -r1.10 win32functions.cs
--- win32functions.cs 10 Feb 2003 06:28:51 -0000 1.10
+++ win32functions.cs 19 Feb 2003 23:03:16 -0000
@@ -40,7 +40,7 @@
/// <summary>
/// Windows API Functions
/// </summary>
- public class Win32
+ public class Win32
{
#region Constructors
// No need to construct this object
@@ -77,19 +77,6 @@
[DllImport("kernel32.dll")]
internal static extern void OutputDebugString(string message);
- [DllImport("kernel32.dll")]
- internal static extern MEASUREITEMSTRUCT MulDiv(IntPtr ptr, int AlwaysOne, int AlwaysOneDiv);
- [DllImport("kernel32.dll")]
- internal static extern void CopyMemory(IntPtr ptr, ref MEASUREITEMSTRUCT mis, int Size);
- [DllImport("kernel32.dll")]
- internal static extern void CopyMemory(ref MEASUREITEMSTRUCT mis, IntPtr ptr, int Size);
- [DllImport("kernel32.dll")]
- internal static extern void CopyMemory(IntPtr ptr, ref DRAWITEMSTRUCT mis, int Size);
- [DllImport("kernel32.dll")]
- internal static extern void CopyMemory(ref DRAWITEMSTRUCT mis, IntPtr ptr, int Size);
- [DllImport("kernel32.dll")]
- internal static extern void CopyMemory(ref PAINTSTRUCT ps, IntPtr ptr, int Size);
-
[DllImport ("kernel32.dll", CallingConvention = CallingConvention.StdCall,
CharSet = CharSet.Auto)]
internal extern static uint GetLastError ();
@@ -133,47 +120,47 @@
static internal extern int SetMapMode(IntPtr hDC, int fnMapMode);
[DllImport("gdi32.dll")]
static internal extern int GetObjectType(IntPtr handle);
- [DllImport("gdi32")]
+ [DllImport("gdi32.dll")]
internal static extern IntPtr CreateDIBSection(IntPtr hdc, ref BITMAPINFO_FLAT bmi,
int iUsage, ref int ppvBits, IntPtr hSection, int dwOffset);
- [DllImport("gdi32")]
+ [DllImport("gdi32.dll")]
internal static extern int GetDIBits(IntPtr hDC, IntPtr hbm, int StartScan, int ScanLines, int lpBits, BITMAPINFOHEADER bmi, int usage);
- [DllImport("gdi32")]
+ [DllImport("gdi32.dll")]
internal static extern int GetDIBits(IntPtr hdc, IntPtr hbm, int StartScan, int ScanLines, int lpBits, ref BITMAPINFO_FLAT bmi, int usage);
- [DllImport("gdi32")]
+ [DllImport("gdi32.dll")]
internal static extern IntPtr GetPaletteEntries(IntPtr hpal, int iStartIndex, int nEntries, byte[] lppe);
- [DllImport("gdi32")]
+ [DllImport("gdi32.dll")]
internal static extern IntPtr GetSystemPaletteEntries(IntPtr hdc, int iStartIndex, int nEntries, byte[] lppe);
- [DllImport("gdi32")]
+ [DllImport("gdi32.dll")]
internal static extern int SetDCBrushColor(IntPtr hdc, int crColor);
- [DllImport("gdi32")]
+ [DllImport("gdi32.dll")]
internal static extern IntPtr CreateSolidBrush(int crColor);
- [DllImport("gdi32")]
+ [DllImport("gdi32.dll")]
internal static extern int SetBkMode(IntPtr hDC, BackgroundMode mode);
- [DllImport("gdi32")]
+ [DllImport("gdi32.dll")]
internal static extern int SetViewportOrgEx(IntPtr hdc, int x, int y, int param);
- [DllImport("gdi32")]
- internal static extern int SetTextColor(IntPtr hDC, int colorRef);
- [DllImport("gdi32")]
+ [DllImport("gdi32.dll")]
+ internal static extern int SetTextColor(IntPtr hDC, int colorRef);
+ [DllImport("gdi32.dll")]
internal static extern int SetStretchBltMode(IntPtr hDC, StrechModeFlags StrechMode);
- [DllImport("gdi32")]
+ [DllImport("gdi32.dll")]
internal static extern int SetPixel(IntPtr hDC, int x, int y, int color);
- [DllImport("gdi32")]
+ [DllImport("gdi32.dll")]
internal static extern IntPtr CreatePen(PenStyle penStyle, int width, int color);
- [DllImport("gdi32")]
+ [DllImport("gdi32.dll")]
internal static extern int GetClipRgn(IntPtr hDC, ref IntPtr region);
- [DllImport("gdi32")]
+ [DllImport("gdi32.dll")]
internal static extern IntPtr CreateRectRgn(int nLeftRect, int TopRect, int nRightRect, int nBottomRect);
- [DllImport("gdi32")]
+ [DllImport("gdi32.dll")]
internal static extern int GetRgnBox(IntPtr hRegion, ref RECT rc);
- [DllImport("gdi32")]
+ [DllImport("gdi32.dll")]
internal static extern IntPtr GetStockObject(GSO_ objectType);
- [DllImport("gdi32")]
+ [DllImport("gdi32.dll")]
internal static extern int ExtTextOut(IntPtr hdc, int x, int y,
- ExtTextOutFlags options, ref RECT rc, int str, int strLen, IntPtr distances);
- [DllImport("gdi32")]
+ ExtTextOutFlags options, ref RECT rc, int str, int strLen, IntPtr distances);
+ [DllImport("gdi32.dll")]
internal static extern int ExtTextOut(IntPtr hdc, int x, int y,
- ExtTextOutFlags options, ref RECT rc, string str, int strLen, IntPtr distances);
+ ExtTextOutFlags options, ref RECT rc, string str, int strLen, IntPtr distances);
[DllImport ("gdi32.dll",
CallingConvention = CallingConvention.StdCall,
@@ -185,7 +172,7 @@
CharSet = CharSet.Auto)]
internal static extern uint SetBkColor (IntPtr hdc, uint crColor);
- internal static int RGB(Color color)
+ internal static int RGB(Color color)
{
return color.R | (color.G << 8) | (color.B << 16);
}
@@ -195,7 +182,7 @@
#region Uxtheme.dll functions
[DllImport("uxtheme.dll")]
static public extern int SetWindowTheme(IntPtr hWnd, StringBuilder AppID, StringBuilder ClassID);
- static public void DisableWindowsXPTheme(IntPtr hWnd)
+ static public void DisableWindowsXPTheme(IntPtr hWnd)
{
// Disable using the Window XP Theme for the Window handle
// passed as a parameter
@@ -205,7 +192,7 @@
}
#endregion
- #region User32.dll functions
+ #region user32.dll functions
[DllImport("user32.dll", CharSet=CharSet.Auto)]
static internal extern IntPtr GetDesktopWindow();
[DllImport("user32.dll", CharSet=CharSet.Auto)]
@@ -222,45 +209,45 @@
static internal extern IntPtr SetClipboardData( int Format, IntPtr hData);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
static internal extern bool GetMenuItemRect(IntPtr hWnd, IntPtr hMenu, int Item, ref RECT rc);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
internal static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
internal static extern int SendMessage(IntPtr hWnd, Msg msg, int wParam, int lParam);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
internal static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
internal static extern void SendMessage(IntPtr hWnd, int msg, int wParam, ref RECT lParam);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
internal static extern int SendMessage(IntPtr hWnd, int msg, int wParam, ref POINT lParam);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
internal static extern int SendMessage(IntPtr hWnd, int msg, int wParam, string lParam);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
internal static extern int SendMessage(IntPtr hWnd, Msg msg, int wParam, string lParam);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
internal static extern void SendMessage(IntPtr hWnd, ToolBarMessages msg, int wParam, ref TBBUTTON lParam);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
internal static extern void SendMessage(IntPtr hWnd, ToolBarMessages msg, int wParam, ref TBBUTTONINFO lParam);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
internal static extern int SendMessage(IntPtr hWnd, RebarMessages msg, int wParam, ref REBARBANDINFO lParam);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
internal static extern void SendMessage(IntPtr hWnd, TreeViewMessages msg, int wParam, ref TVITEM lParam);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
internal static extern void SendMessage(IntPtr hWnd, TreeViewMessages msg, int wParam, ref TVINSERTSTRUCT lParam);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
internal static extern void SendMessage(IntPtr hWnd, TreeViewMessages msg, int wParam, ref TVSORTCB lParam);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
internal static extern int SendMessage(IntPtr hWnd, TreeViewMessages msg, int wParam, ref TVHITTESTINFO hti);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
internal static extern void SendMessage(IntPtr hWnd, ListViewMessages msg, int wParam, ref LVITEM lParam);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
internal static extern void SendMessage(IntPtr hWnd, HeaderControlMessages msg, int wParam, ref HDITEM lParam);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
internal static extern void SendMessage(IntPtr hWnd, HeaderControlMessages msg, int wParam, ref HD_HITTESTINFO hti);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
internal static extern int SendMessage(IntPtr hWnd, HeaderControlMessages msg, int wParam, int lParam);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="PostMessageA")]
internal static extern IntPtr PostMessage(IntPtr hWnd, int msg, int wParam, int lParam);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto,EntryPoint="PostMessageA")]
internal static extern IntPtr PostMessage(IntPtr hWnd, Msg msg, int wParam, int lParam);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
internal static extern IntPtr SetWindowsHookEx(WindowsHookCodes hookid, HookProc pfnhook, IntPtr hinst, int threadid);
@@ -273,83 +260,119 @@
[DllImport("user32.dll", CharSet=CharSet.Auto)]
internal extern static IntPtr GetDlgItem(IntPtr hDlg, int nControlID);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
- internal extern static int InvalidateRect(IntPtr hWnd, ref RECT rc, int bErase);
+ internal extern static int InvalidateRect(IntPtr hWnd, ref RECT rc, int bErase);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
internal extern static int InvalidateRect(IntPtr hWnd, IntPtr rc, int bErase);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto)]
internal static extern bool WaitMessage();
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto,EntryPoint="PeekMessageA")]
internal static extern bool PeekMessage(ref MESSAGE msg, int hWnd, int wFilterMin, int wFilterMax, PeekMessageFlags flags);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto,EntryPoint="GetMessageA")]
internal static extern bool GetMessage(ref MESSAGE msg, int hWnd, int wFilterMin, int wFilterMax);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto)]
internal static extern bool TranslateMessage(ref MESSAGE msg);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto,EntryPoint="DispatchMessageA")]
internal static extern bool DispatchMessage(ref MESSAGE msg);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto,EntryPoint="LoadCursorA")]
internal static extern IntPtr LoadCursor(IntPtr hInstance, CursorType cursor);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto)]
internal static extern IntPtr SetCursor(IntPtr hCursor);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto)]
internal static extern IntPtr BeginPaint(IntPtr hWnd, ref PAINTSTRUCT ps);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto)]
internal static extern bool EndPaint(IntPtr hWnd, ref PAINTSTRUCT ps);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto)]
internal static extern bool UpdateLayeredWindow(IntPtr hwnd, IntPtr hdcDst, ref POINT pptDst, ref SIZE psize,
IntPtr hdcSrc, ref POINT pprSrc, Int32 crKey, ref BLENDFUNCTION pblend, UpdateLayeredWindowFlags dwFlags);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto)]
internal static extern bool ClientToScreen(IntPtr hWnd, ref POINT pt);
+
+ internal static bool ClientToScreen(IntPtr hWnd, ref RECT rect) {
+ POINT pt1 = new POINT();
+ pt1.x = rect.left;
+ pt1.y = rect.top;
+ POINT pt2 = new POINT();
+ pt2.x = rect.right;
+ pt2.y = rect.bottom;
+ bool result = Win32.ClientToScreen(hWnd, ref pt1);
+ result &= Win32.ClientToScreen(hWnd, ref pt2);
+ rect.left = pt1.x;
+ rect.top = pt1.y;
+ rect.right = pt2.x;
+ rect.bottom = pt2.y;
+ return result;
+ }
+
+
+ [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ internal static extern bool ScreenToClient(IntPtr hWnd, ref POINT pt);
+
+ internal static bool ScreenToClient(IntPtr hWnd, ref RECT rect) {
+ POINT pt1 = new POINT();
+ pt1.x = rect.left;
+ pt1.y = rect.top;
+ POINT pt2 = new POINT();
+ pt2.x = rect.right;
+ pt2.y = rect.bottom;
+ bool result = Win32.ScreenToClient(hWnd, ref pt1);
+ result &= Win32.ScreenToClient(hWnd, ref pt2);
+ rect.left = pt1.x;
+ rect.top = pt1.y;
+ rect.right = pt2.x;
+ rect.bottom = pt2.y;
+ return result;
+ }
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto)]
internal static extern bool TrackMouseEvent(ref TRACKMOUSEEVENT tme);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto)]
internal static extern bool SetWindowRgn(IntPtr hWnd, IntPtr hRgn, bool redraw);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto)]
internal static extern short GetKeyState(int virtKey);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto)]
internal static extern bool MoveWindow(IntPtr hWnd, int x, int y, int width, int height, bool repaint);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto)]
internal static extern int GetClassName(IntPtr hWnd, StringBuilder ClassName, int nMaxCount);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto,EntryPoint="SetWindowLongA")]
internal static extern int SetWindowLong(IntPtr hWnd, GetWindowLongFlag flag, int dwNewLong);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto,EntryPoint="SetWindowLongA")]
internal static extern IntPtr SetWindowLong(IntPtr hWnd, GetWindowLongFlag flag, WinProc winProc);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto,EntryPoint="SetWindowLongA")]
internal static extern IntPtr SetWindowLong(IntPtr hWnd, GetWindowLongFlag flag, WndProc winProc);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto)]
internal static extern IntPtr GetDCEx(IntPtr hWnd, IntPtr hRegion, int flags);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto)]
internal static extern IntPtr GetWindowDC(IntPtr hWnd);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto)]
internal static extern int FillRect(IntPtr hDC, ref RECT rect, IntPtr hBrush);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SetWindowTextA")]
internal static extern int SetWindowText(IntPtr hWnd, string text);
- [DllImport("User32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="GetWindowTextA")]
internal static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int maxCount);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
static internal extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
@@ -395,25 +418,25 @@
[DllImport("user32.dll", CharSet=CharSet.Auto)]
static internal extern int GetScrollBarInfo(IntPtr hWnd, SystemObject id, ref SCROLLBARINFO sbi);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto,EntryPoint="GetWindowLongA")]
static internal extern IntPtr GetWindowLong(IntPtr hWnd, GetWindowLongFlag flag);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
static internal extern int SetProp(IntPtr hWnd, IntPtr atom, IntPtr hData);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto,EntryPoint="CallWindowProcA")]
static internal extern int CallWindowProc(IntPtr hOldProc, IntPtr hWnd, int message, int wParam, int lParam);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
static internal extern int EndMenu();
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
- static internal extern int DefWindowProc(IntPtr hWnd, int message, int wParam, int lParam);
+ [DllImport("user32.dll", CharSet=CharSet.Auto,EntryPoint="DefWindowProcA")]
+ static internal extern int DefWindowProc(IntPtr hWnd, int message, int wParam, int lParam);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
- static internal extern IntPtr LoadCursor(IntPtr hInstance, LC_ standardCursor);
+ [DllImport("user32.dll", CharSet=CharSet.Auto,EntryPoint="LoadCursorA")]
+ static internal extern IntPtr LoadCursor(IntPtr hInstance, LC_ standardCursor);
- [DllImport("user32.dll", CharSet=CharSet.Auto)]
+ [DllImport("user32.dll", CharSet=CharSet.Auto, EntryPoint="RegisterWindowMessageA")]
static internal extern int RegisterWindowMessage( string message_name);
[DllImport ("user32.dll", CallingConvention = CallingConvention.StdCall,
@@ -455,27 +478,27 @@
#region Shell32.dll functions
- [DllImport("Shell32.dll", CharSet=CharSet.Auto)]
- internal static extern IntPtr SHGetFileInfo(string drivePath, int fileAttributes,
+ [DllImport("shell32.dll", CharSet=CharSet.Auto)]
+ internal static extern IntPtr SHGetFileInfo(string drivePath, int fileAttributes,
out SHFILEINFO fileInfo, int countBytesFileInfo, ShellFileInfoFlags flags);
- [DllImport("Shell32.dll", CharSet=CharSet.Auto)]
- internal static extern IntPtr SHGetFileInfo(IntPtr idl, int fileAttributes,
+ [DllImport("shell32.dll", CharSet=CharSet.Auto)]
+ internal static extern IntPtr SHGetFileInfo(IntPtr idl, int fileAttributes,
out SHFILEINFO fileInfo, int countBytesFileInfo, ShellFileInfoFlags flags);
- [DllImport("Shell32.dll", CharSet=CharSet.Auto)]
+ [DllImport("shell32.dll", CharSet=CharSet.Auto)]
internal static extern int SHGetSpecialFolderLocation(IntPtr hwndOwner, ShellSpecialFolder folder, out IntPtr idl);
- [DllImport("Shell32.dll", CharSet=CharSet.Auto)]
+ [DllImport("shell32.dll", CharSet=CharSet.Auto)]
internal static extern int SHGetMalloc(out IMalloc alloc);
- [DllImport("Shell32.dll", CharSet=CharSet.Auto)]
+ [DllImport("shell32.dll", CharSet=CharSet.Auto)]
internal static extern int SHGetDesktopFolder(out IShellFolder folder);
-
- [DllImport("Shell32.dll", CharSet=CharSet.Auto)]
+
+ [DllImport("shell32.dll", CharSet=CharSet.Auto)]
internal static extern int SHGetPathFromIDList(IntPtr idl, StringBuilder path);
- internal static void SHFreeMalloc(IntPtr handle)
+ internal static void SHFreeMalloc(IntPtr handle)
{
IMalloc alloc = null;
try
@@ -487,14 +510,14 @@
IUnknown iUnknown = (IUnknown)alloc;
iUnknown.Release();
}
- catch (Exception e)
+ catch (Exception e)
{
// In case the Garbage collector is trying to free
// this memory from its own thread
Debug.WriteLine(e.Message);
}
}
-
+
#endregion
#region Common Controls functions
@@ -552,11 +575,11 @@
[DllImport("comctl32.dll")]
internal static extern int ImageList_SetDragCursorImage(IntPtr himlDrag, int iDrag, int dxHotspot, int dyHotspot);
-
+
internal static int ImageList_DrawEx(IntPtr hImageList, int imageIndex, IntPtr hDCDest, int x, int y, int dx, int dy,
- ImageListDrawColor backColor, ImageListDrawColor foreColor, ImageListDrawFlags flags)
+ ImageListDrawColor backColor, ImageListDrawColor foreColor, ImageListDrawFlags flags)
{
- uint bColor = (uint)ImageListDrawColors.CLR_NONE;
+ uint bColor = (uint)ImageListDrawColors.CLR_NONE;
if ( backColor == ImageListDrawColor.Default )
bColor = (uint)ImageListDrawColors.CLR_DEFAULT;
@@ -569,7 +592,7 @@
}
- static internal bool IsCommonCtrl6()
+ static internal bool IsCommonCtrl6()
{
DLLVERSIONINFO dllVersion = new DLLVERSIONINFO();
// We are assummng here that anything greater or equal than 6
@@ -582,67 +605,67 @@
#endregion
#region Win32 Macro-Like helpers
- internal static int X_LPARAM(int lParam)
+ internal static int X_LPARAM(int lParam)
{
return (lParam & 0xffff);
}
- internal static int Y_LPARAM(int lParam)
+ internal static int Y_LPARAM(int lParam)
{
return (lParam >> 16);
}
- internal static Point GetPointFromLPARAM(int lParam)
+ internal static Point GetPointFromLPARAM(int lParam)
{
return new Point(X_LPARAM(lParam), Y_LPARAM(lParam));
}
- internal static int LOW_ORDER(int param)
+ internal static int LOW_ORDER(int param)
{
return (param & 0xffff);
}
- internal static int HIGH_ORDER(int param)
+ internal static int HIGH_ORDER(int param)
{
return (param >> 16);
}
- internal static int INDEXTOOVERLAYMASK(int index)
+ internal static int INDEXTOOVERLAYMASK(int index)
{
return (int)((uint)index << 8);
}
- internal static int OVERLAYMASKTOINDEX(int index)
+ internal static int OVERLAYMASKTOINDEX(int index)
{
- return (int)((uint)index >> 8);
+ return (int)((uint)index >> 8);
}
- internal static int INDEXTOSTATEIMAGEMASK(int i)
+ internal static int INDEXTOSTATEIMAGEMASK(int i)
{
return (int)((uint)i << 12);
}
- internal static int STATEIMAGEMASKTOINDEX(int i)
+ internal static int STATEIMAGEMASKTOINDEX(int i)
{
- return (int)((uint)i >> 12);
+ return (int)((uint)i >> 12);
}
- internal static short HRESULT_CODE(int hr)
+ internal static short HRESULT_CODE(int hr)
{
- return (short)(hr & 0xFFFF);
+ return (short)(hr & 0xFFFF);
}
- internal static bool SUCCEEDED(int status)
+ internal static bool SUCCEEDED(int status)
{
return (status >= 0);
}
- internal static bool FAILED(int status)
+ internal static bool FAILED(int status)
{
return (status < 0);
}
- internal static int MAKEINTRESOURCE(int res)
+ internal static int MAKEINTRESOURCE(int res)
{
return 0x0000FFFF & res;
}
@@ -661,7 +684,7 @@
//correct?
[DllImport ("user32.dll",
CallingConvention = CallingConvention.StdCall,
- CharSet = CharSet.Auto)]
+ CharSet = CharSet.Auto,EntryPoint="SendMessageA")]
internal static extern uint SendMessage(
IntPtr hWnd, uint Msg,
IntPtr wParam, IntPtr lParam);
@@ -722,7 +745,7 @@
CallingConvention.StdCall, CharSet = CharSet.Auto)]
internal static extern int TranslateMessage (ref MSG msg);
- [DllImport ("user32.dll", CallingConvention =
+ [DllImport ("user32.dll", CallingConvention =
CallingConvention.StdCall, CharSet = CharSet.Auto)]
internal static extern int DispatchMessageA (ref MSG msg);
@@ -756,7 +779,7 @@
[DllImport ("user32.dll",
CallingConvention = CallingConvention.StdCall,
- CharSet = CharSet.Auto)]
+ CharSet = CharSet.Ansi)]
internal static extern int MessageBoxA (
IntPtr hWnd, string pText, string pCaption, uint uType);
@@ -772,7 +795,7 @@
internal static extern IntPtr GetParent (IntPtr hWnd);
[DllImport ("user32.dll",
- CallingConvention = CallingConvention.StdCall,
+ CallingConvention = CallingConvention.StdCall,
CharSet = CharSet.Auto)]
internal static extern bool SetWindowTextA (
IntPtr hWnd, string lpString);
@@ -812,7 +835,7 @@
CharSet = CharSet.Auto)]
internal static extern bool IsMenu (IntPtr hWnd);
-
+
[DllImport ("user32.dll",
CallingConvention = CallingConvention.StdCall,
CharSet = CharSet.Auto)]