diff options
author | Lluis Sanchez <lluis@xamarin.com> | 2014-01-29 00:28:20 +0400 |
---|---|---|
committer | Lluis Sanchez <lluis@xamarin.com> | 2014-01-29 00:28:20 +0400 |
commit | bf862f0f9b6a965793164fb9ebe665131ed3f8f5 (patch) | |
tree | 9c96878fedb41af3ab7c65da4e032139d086c8eb /Xwt.Gtk.Windows | |
parent | f1000ef9c1084d665b66a2b48e35ffa1b11f5f48 (diff) |
Implement GetFileIcon for Gtk/Windows
Diffstat (limited to 'Xwt.Gtk.Windows')
-rw-r--r-- | Xwt.Gtk.Windows/Enums.cs | 573 | ||||
-rw-r--r-- | Xwt.Gtk.Windows/GtkWindowsDesktopBackend.cs | 69 | ||||
-rw-r--r-- | Xwt.Gtk.Windows/Structs.cs | 178 | ||||
-rw-r--r-- | Xwt.Gtk.Windows/Win32.cs | 117 | ||||
-rw-r--r-- | Xwt.Gtk.Windows/WindowsPlatformBackend.cs | 6 | ||||
-rw-r--r-- | Xwt.Gtk.Windows/Xwt.Gtk.Windows.csproj | 12 |
6 files changed, 953 insertions, 2 deletions
diff --git a/Xwt.Gtk.Windows/Enums.cs b/Xwt.Gtk.Windows/Enums.cs new file mode 100644 index 00000000..99011ce2 --- /dev/null +++ b/Xwt.Gtk.Windows/Enums.cs @@ -0,0 +1,573 @@ +// Copyright (c) 2006, Gustavo Franco +// Email: gustavo_franco@hotmail.com +// All rights reserved. + +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: + +// Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. + +// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY +// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR +// PURPOSE. IT CAN BE DISTRIBUTED FREE OF CHARGE AS LONG AS THIS HEADER +// REMAINS UNCHANGED. + +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; + +namespace Xwt.Gtk.Windows +{ + #region SWP_Flags + [Flags] + public enum SWP_Flags + { + SWP_NOSIZE = 0x0001, + SWP_NOMOVE = 0x0002, + SWP_NOZORDER = 0x0004, + SWP_NOACTIVATE = 0x0010, + SWP_FRAMECHANGED = 0x0020, /* The frame changed: send WM_NCCALCSIZE */ + SWP_SHOWWINDOW = 0x0040, + SWP_HIDEWINDOW = 0x0080, + SWP_NOOWNERZORDER = 0x0200, /* Don't do owner Z ordering */ + + SWP_DRAWFRAME = SWP_FRAMECHANGED, + SWP_NOREPOSITION = SWP_NOOWNERZORDER + } + #endregion + + #region DialogChangeStatus + public enum DialogChangeStatus : long + { + CDN_FIRST = 0xFFFFFDA7, + CDN_INITDONE = (CDN_FIRST - 0x0000), + CDN_SELCHANGE = (CDN_FIRST - 0x0001), + CDN_FOLDERCHANGE = (CDN_FIRST - 0x0002), + CDN_SHAREVIOLATION = (CDN_FIRST - 0x0003), + CDN_HELP = (CDN_FIRST - 0x0004), + CDN_FILEOK = (CDN_FIRST - 0x0005), + CDN_TYPECHANGE = (CDN_FIRST - 0x0006), + } + #endregion + + #region DialogChangeProperties + public enum DialogChangeProperties + { + CDM_FIRST = (0x400 + 100), + CDM_GETSPEC = (CDM_FIRST + 0x0000), + CDM_GETFILEPATH = (CDM_FIRST + 0x0001), + CDM_GETFOLDERPATH = (CDM_FIRST + 0x0002), + CDM_GETFOLDERIDLIST = (CDM_FIRST + 0x0003), + CDM_SETCONTROLTEXT = (CDM_FIRST + 0x0004), + CDM_HIDECONTROL = (CDM_FIRST + 0x0005), + CDM_SETDEFEXT = (CDM_FIRST + 0x0006) + } + #endregion + + #region ImeNotify + [Author ("Franco, Gustavo")] + public enum ImeNotify + { + IMN_CLOSESTATUSWINDOW = 0x0001, + IMN_OPENSTATUSWINDOW = 0x0002, + IMN_CHANGECANDIDATE = 0x0003, + IMN_CLOSECANDIDATE = 0x0004, + IMN_OPENCANDIDATE = 0x0005, + IMN_SETCONVERSIONMODE = 0x0006, + IMN_SETSENTENCEMODE = 0x0007, + IMN_SETOPENSTATUS = 0x0008, + IMN_SETCANDIDATEPOS = 0x0009, + IMN_SETCOMPOSITIONFONT = 0x000A, + IMN_SETCOMPOSITIONWINDOW = 0x000B, + IMN_SETSTATUSWINDOWPOS = 0x000C, + IMN_GUIDELINE = 0x000D, + IMN_PRIVATE = 0x000E + } + #endregion + + #region FolderViewMode + [Author ("Franco, Gustavo")] + public enum FolderViewMode + { + Default = 0x7028, + Icon = Default + 1, + SmallIcon = Default + 2, + List = Default + 3, + Details = Default + 4, + Thumbnails = Default + 5, + Title = Default + 6, + Thumbstrip = Default + 7, + } + #endregion + + #region Enum DialogViewProperty + [Author ("Franco, Gustavo")] + public enum DefaultViewType + { + Icons = 0x7029, + List = 0x702b, + Details = 0x702c, + Thumbnails = 0x702d, + Tiles = 0x702e, + } + #endregion + + #region ButtonStyle + [Author ("Franco, Gustavo")] + public enum ButtonStyle : long + { + BS_PUSHBUTTON = 0x00000000, + BS_DEFPUSHBUTTON = 0x00000001, + BS_CHECKBOX = 0x00000002, + BS_AUTOCHECKBOX = 0x00000003, + BS_RADIOBUTTON = 0x00000004, + BS_3STATE = 0x00000005, + BS_AUTO3STATE = 0x00000006, + BS_GROUPBOX = 0x00000007, + BS_USERBUTTON = 0x00000008, + BS_AUTORADIOBUTTON = 0x00000009, + BS_PUSHBOX = 0x0000000A, + BS_OWNERDRAW = 0x0000000B, + BS_TYPEMASK = 0x0000000F, + BS_LEFTTEXT = 0x00000020, + BS_TEXT = 0x00000000, + BS_ICON = 0x00000040, + BS_BITMAP = 0x00000080, + BS_LEFT = 0x00000100, + BS_RIGHT = 0x00000200, + BS_CENTER = 0x00000300, + BS_TOP = 0x00000400, + BS_BOTTOM = 0x00000800, + BS_VCENTER = 0x00000C00, + BS_PUSHLIKE = 0x00001000, + BS_MULTILINE = 0x00002000, + BS_NOTIFY = 0x00004000, + BS_FLAT = 0x00008000, + BS_RIGHTBUTTON = BS_LEFTTEXT + } + #endregion + + #region ZOrderPos + [Author ("Franco, Gustavo")] + public enum ZOrderPos + { + HWND_TOP = 0, + HWND_BOTTOM = 1, + HWND_TOPMOST = -1, + HWND_NOTOPMOST = -2 + } + #endregion + + #region Static Control Styles + [Author ("Franco, Gustavo")] + public enum StaticControlStyles : long + { + SS_LEFT = 0x00000000, + SS_CENTER = 0x00000001, + SS_RIGHT = 0x00000002, + SS_ICON = 0x00000003, + SS_BLACKRECT = 0x00000004, + SS_GRAYRECT = 0x00000005, + SS_WHITERECT = 0x00000006, + SS_BLACKFRAME = 0x00000007, + SS_GRAYFRAME = 0x00000008, + SS_WHITEFRAME = 0x00000009, + SS_USERITEM = 0x0000000A, + SS_SIMPLE = 0x0000000B, + SS_LEFTNOWORDWRAP = 0x0000000C, + SS_OWNERDRAW = 0x0000000D, + SS_BITMAP = 0x0000000E, + SS_ENHMETAFILE = 0x0000000F, + SS_ETCHEDHORZ = 0x00000010, + SS_ETCHEDVERT = 0x00000011, + SS_ETCHEDFRAME = 0x00000012, + SS_TYPEMASK = 0x0000001F, + SS_REALSIZECONTROL = 0x00000040, + SS_NOPREFIX = 0x00000080, /* Don't do "&" character translation */ + SS_NOTIFY = 0x00000100, + SS_CENTERIMAGE = 0x00000200, + SS_RIGHTJUST = 0x00000400, + SS_REALSIZEIMAGE = 0x00000800, + SS_SUNKEN = 0x00001000, + SS_EDITCONTROL = 0x00002000, + SS_ENDELLIPSIS = 0x00004000, + SS_PATHELLIPSIS = 0x00008000, + SS_WORDELLIPSIS = 0x0000C000, + SS_ELLIPSISMASK = 0x0000C000 + } + #endregion + + #region Combo Box styles + [Author ("Franco, Gustavo")] + public enum ComboBoxStyles : long + { + CBS_SIMPLE = 0x0001, + CBS_DROPDOWN = 0x0002, + CBS_DROPDOWNLIST = 0x0003, + CBS_OWNERDRAWFIXED = 0x0010, + CBS_OWNERDRAWVARIABLE = 0x0020, + CBS_AUTOHSCROLL = 0x0040, + CBS_OEMCONVERT = 0x0080, + CBS_SORT = 0x0100, + CBS_HASSTRINGS = 0x0200, + CBS_NOINTEGRALHEIGHT = 0x0400, + CBS_DISABLENOSCROLL = 0x0800, + CBS_UPPERCASE = 0x2000, + CBS_LOWERCASE = 0x4000 + } + #endregion + + #region Window Styles + [Author ("Franco, Gustavo")] + public enum WindowStyles : long + { + WS_OVERLAPPED = 0x00000000, + WS_POPUP = 0x80000000, + WS_CHILD = 0x40000000, + WS_MINIMIZE = 0x20000000, + WS_VISIBLE = 0x10000000, + WS_DISABLED = 0x08000000, + WS_CLIPSIBLINGS = 0x04000000, + WS_CLIPCHILDREN = 0x02000000, + WS_MAXIMIZE = 0x01000000, + WS_CAPTION = 0x00C00000, + WS_BORDER = 0x00800000, + WS_DLGFRAME = 0x00400000, + WS_VSCROLL = 0x00200000, + WS_HSCROLL = 0x00100000, + WS_SYSMENU = 0x00080000, + WS_THICKFRAME = 0x00040000, + WS_GROUP = 0x00020000, + WS_TABSTOP = 0x00010000, + WS_MINIMIZEBOX = 0x00020000, + WS_MAXIMIZEBOX = 0x00010000, + WS_TILED = 0x00000000, + WS_ICONIC = 0x20000000, + WS_SIZEBOX = 0x00040000, + WS_POPUPWINDOW = 0x80880000, + WS_OVERLAPPEDWINDOW = 0x00CF0000, + WS_TILEDWINDOW = 0x00CF0000, + WS_CHILDWINDOW = 0x40000000 + } + #endregion + + #region Window Extended Styles + [Author ("Franco, Gustavo")] + [Flags] + public enum WindowExStyles + { + WS_EX_DLGMODALFRAME = 0x00000001, + WS_EX_NOPARENTNOTIFY = 0x00000004, + WS_EX_TOPMOST = 0x00000008, + WS_EX_ACCEPTFILES = 0x00000010, + WS_EX_TRANSPARENT = 0x00000020, + WS_EX_MDICHILD = 0x00000040, + WS_EX_TOOLWINDOW = 0x00000080, + WS_EX_WINDOWEDGE = 0x00000100, + WS_EX_CLIENTEDGE = 0x00000200, + WS_EX_CONTEXTHELP = 0x00000400, + WS_EX_RIGHT = 0x00001000, + WS_EX_LEFT = 0x00000000, + WS_EX_RTLREADING = 0x00002000, + WS_EX_LTRREADING = 0x00000000, + WS_EX_LEFTSCROLLBAR = 0x00004000, + WS_EX_RIGHTSCROLLBAR = 0x00000000, + WS_EX_CONTROLPARENT = 0x00010000, + WS_EX_STATICEDGE = 0x00020000, + WS_EX_APPWINDOW = 0x00040000, + WS_EX_OVERLAPPEDWINDOW = 0x00000300, + WS_EX_PALETTEWINDOW = 0x00000188, + WS_EX_LAYERED = 0x00080000 + } + #endregion + + #region ChildFromPointFlags + [Author ("Franco, Gustavo")] + public enum ChildFromPointFlags + { + CWP_ALL = 0x0000, + CWP_SKIPINVISIBLE = 0x0001, + CWP_SKIPDISABLED = 0x0002, + CWP_SKIPTRANSPARENT = 0x0004 + } + #endregion + + #region HitTest + [Author ("Franco, Gustavo")] + public enum HitTest + { + HTERROR = (-2), + HTTRANSPARENT = (-1), + HTNOWHERE = 0, + HTCLIENT = 1, + HTCAPTION = 2, + HTSYSMENU = 3, + HTGROWBOX = 4, + HTSIZE = HTGROWBOX, + HTMENU = 5, + HTHSCROLL = 6, + HTVSCROLL = 7, + HTMINBUTTON = 8, + HTMAXBUTTON = 9, + HTLEFT = 10, + HTRIGHT = 11, + HTTOP = 12, + HTTOPLEFT = 13, + HTTOPRIGHT = 14, + HTBOTTOM = 15, + HTBOTTOMLEFT = 16, + HTBOTTOMRIGHT = 17, + HTBORDER = 18, + HTREDUCE = HTMINBUTTON, + HTZOOM = HTMAXBUTTON, + HTSIZEFIRST = HTLEFT, + HTSIZELAST = HTBOTTOMRIGHT, + HTOBJECT = 19, + HTCLOSE = 20, + HTHELP = 21 + } + #endregion + + #region Windows Messages + [Author ("Franco, Gustavo")] + public enum Msg + { + WM_NULL = 0x0000, + WM_CREATE = 0x0001, + WM_DESTROY = 0x0002, + WM_MOVE = 0x0003, + WM_SIZE = 0x0005, + WM_ACTIVATE = 0x0006, + WM_SETFOCUS = 0x0007, + WM_KILLFOCUS = 0x0008, + WM_ENABLE = 0x000A, + WM_SETREDRAW = 0x000B, + WM_SETTEXT = 0x000C, + WM_GETTEXT = 0x000D, + WM_GETTEXTLENGTH = 0x000E, + WM_PAINT = 0x000F, + WM_CLOSE = 0x0010, + WM_QUERYENDSESSION = 0x0011, + WM_QUIT = 0x0012, + WM_QUERYOPEN = 0x0013, + WM_ERASEBKGND = 0x0014, + WM_SYSCOLORCHANGE = 0x0015, + WM_ENDSESSION = 0x0016, + WM_SHOWWINDOW = 0x0018, + WM_CTLCOLOR = 0x0019, + WM_WININICHANGE = 0x001A, + WM_SETTINGCHANGE = 0x001A, + WM_DEVMODECHANGE = 0x001B, + WM_ACTIVATEAPP = 0x001C, + WM_FONTCHANGE = 0x001D, + WM_TIMECHANGE = 0x001E, + WM_CANCELMODE = 0x001F, + WM_SETCURSOR = 0x0020, + WM_MOUSEACTIVATE = 0x0021, + WM_CHILDACTIVATE = 0x0022, + WM_QUEUESYNC = 0x0023, + WM_GETMINMAXINFO = 0x0024, + WM_PAINTICON = 0x0026, + WM_ICONERASEBKGND = 0x0027, + WM_NEXTDLGCTL = 0x0028, + WM_SPOOLERSTATUS = 0x002A, + WM_DRAWITEM = 0x002B, + WM_MEASUREITEM = 0x002C, + WM_DELETEITEM = 0x002D, + WM_VKEYTOITEM = 0x002E, + WM_CHARTOITEM = 0x002F, + WM_SETFONT = 0x0030, + WM_GETFONT = 0x0031, + WM_SETHOTKEY = 0x0032, + WM_GETHOTKEY = 0x0033, + WM_QUERYDRAGICON = 0x0037, + WM_COMPAREITEM = 0x0039, + WM_GETOBJECT = 0x003D, + WM_COMPACTING = 0x0041, + WM_COMMNOTIFY = 0x0044, + WM_WINDOWPOSCHANGING = 0x0046, + WM_WINDOWPOSCHANGED = 0x0047, + WM_POWER = 0x0048, + WM_COPYDATA = 0x004A, + WM_CANCELJOURNAL = 0x004B, + WM_NOTIFY = 0x004E, + WM_INPUTLANGCHANGEREQUEST = 0x0050, + WM_INPUTLANGCHANGE = 0x0051, + WM_TCARD = 0x0052, + WM_HELP = 0x0053, + WM_USERCHANGED = 0x0054, + WM_NOTIFYFORMAT = 0x0055, + WM_CONTEXTMENU = 0x007B, + WM_STYLECHANGING = 0x007C, + WM_STYLECHANGED = 0x007D, + WM_DISPLAYCHANGE = 0x007E, + WM_GETICON = 0x007F, + WM_SETICON = 0x0080, + WM_NCCREATE = 0x0081, + WM_NCDESTROY = 0x0082, + WM_NCCALCSIZE = 0x0083, + WM_NCHITTEST = 0x0084, + WM_NCPAINT = 0x0085, + WM_NCACTIVATE = 0x0086, + WM_GETDLGCODE = 0x0087, + WM_SYNCPAINT = 0x0088, + WM_NCMOUSEMOVE = 0x00A0, + WM_NCLBUTTONDOWN = 0x00A1, + WM_NCLBUTTONUP = 0x00A2, + WM_NCLBUTTONDBLCLK = 0x00A3, + WM_NCRBUTTONDOWN = 0x00A4, + WM_NCRBUTTONUP = 0x00A5, + WM_NCRBUTTONDBLCLK = 0x00A6, + WM_NCMBUTTONDOWN = 0x00A7, + WM_NCMBUTTONUP = 0x00A8, + WM_NCMBUTTONDBLCLK = 0x00A9, + WM_NCXBUTTONDOWN = 0x00AB, + WM_NCXBUTTONUP = 0x00AC, + WM_NCXBUTTONDBLCLK = 0x00AD, + WM_KEYDOWN = 0x0100, + WM_KEYUP = 0x0101, + WM_CHAR = 0x0102, + WM_DEADCHAR = 0x0103, + WM_SYSKEYDOWN = 0x0104, + WM_SYSKEYUP = 0x0105, + WM_SYSCHAR = 0x0106, + WM_SYSDEADCHAR = 0x0107, + WM_KEYLAST = 0x0108, + WM_IME_STARTCOMPOSITION = 0x010D, + WM_IME_ENDCOMPOSITION = 0x010E, + WM_IME_COMPOSITION = 0x010F, + WM_IME_KEYLAST = 0x010F, + WM_INITDIALOG = 0x0110, + WM_COMMAND = 0x0111, + WM_SYSCOMMAND = 0x0112, + WM_TIMER = 0x0113, + WM_HSCROLL = 0x0114, + WM_VSCROLL = 0x0115, + WM_INITMENU = 0x0116, + WM_INITMENUPOPUP = 0x0117, + WM_MENUSELECT = 0x011F, + WM_MENUCHAR = 0x0120, + WM_ENTERIDLE = 0x0121, + WM_MENURBUTTONUP = 0x0122, + WM_MENUDRAG = 0x0123, + WM_MENUGETOBJECT = 0x0124, + WM_UNINITMENUPOPUP = 0x0125, + WM_MENUCOMMAND = 0x0126, + WM_CTLCOLORMSGBOX = 0x0132, + WM_CTLCOLOREDIT = 0x0133, + WM_CTLCOLORLISTBOX = 0x0134, + WM_CTLCOLORBTN = 0x0135, + WM_CTLCOLORDLG = 0x0136, + WM_CTLCOLORSCROLLBAR = 0x0137, + WM_CTLCOLORSTATIC = 0x0138, + WM_MOUSEMOVE = 0x0200, + WM_LBUTTONDOWN = 0x0201, + WM_LBUTTONUP = 0x0202, + WM_LBUTTONDBLCLK = 0x0203, + WM_RBUTTONDOWN = 0x0204, + WM_RBUTTONUP = 0x0205, + WM_RBUTTONDBLCLK = 0x0206, + WM_MBUTTONDOWN = 0x0207, + WM_MBUTTONUP = 0x0208, + WM_MBUTTONDBLCLK = 0x0209, + WM_MOUSEWHEEL = 0x020A, + WM_XBUTTONDOWN = 0x020B, + WM_XBUTTONUP = 0x020C, + WM_XBUTTONDBLCLK = 0x020D, + WM_PARENTNOTIFY = 0x0210, + WM_ENTERMENULOOP = 0x0211, + WM_EXITMENULOOP = 0x0212, + WM_NEXTMENU = 0x0213, + WM_SIZING = 0x0214, + WM_CAPTURECHANGED = 0x0215, + WM_MOVING = 0x0216, + WM_DEVICECHANGE = 0x0219, + WM_MDICREATE = 0x0220, + WM_MDIDESTROY = 0x0221, + WM_MDIACTIVATE = 0x0222, + WM_MDIRESTORE = 0x0223, + WM_MDINEXT = 0x0224, + WM_MDIMAXIMIZE = 0x0225, + WM_MDITILE = 0x0226, + WM_MDICASCADE = 0x0227, + WM_MDIICONARRANGE = 0x0228, + WM_MDIGETACTIVE = 0x0229, + WM_MDISETMENU = 0x0230, + WM_ENTERSIZEMOVE = 0x0231, + WM_EXITSIZEMOVE = 0x0232, + WM_DROPFILES = 0x0233, + WM_MDIREFRESHMENU = 0x0234, + WM_IME_SETCONTEXT = 0x0281, + WM_IME_NOTIFY = 0x0282, + WM_IME_CONTROL = 0x0283, + WM_IME_COMPOSITIONFULL = 0x0284, + WM_IME_SELECT = 0x0285, + WM_IME_CHAR = 0x0286, + WM_IME_REQUEST = 0x0288, + WM_IME_KEYDOWN = 0x0290, + WM_IME_KEYUP = 0x0291, + WM_MOUSEHOVER = 0x02A1, + WM_MOUSELEAVE = 0x02A3, + WM_CUT = 0x0300, + WM_COPY = 0x0301, + WM_PASTE = 0x0302, + WM_CLEAR = 0x0303, + WM_UNDO = 0x0304, + WM_RENDERFORMAT = 0x0305, + WM_RENDERALLFORMATS = 0x0306, + WM_DESTROYCLIPBOARD = 0x0307, + WM_DRAWCLIPBOARD = 0x0308, + WM_PAINTCLIPBOARD = 0x0309, + WM_VSCROLLCLIPBOARD = 0x030A, + WM_SIZECLIPBOARD = 0x030B, + WM_ASKCBFORMATNAME = 0x030C, + WM_CHANGECBCHAIN = 0x030D, + WM_HSCROLLCLIPBOARD = 0x030E, + WM_QUERYNEWPALETTE = 0x030F, + WM_PALETTEISCHANGING = 0x0310, + WM_PALETTECHANGED = 0x0311, + WM_HOTKEY = 0x0312, + WM_PRINT = 0x0317, + WM_PRINTCLIENT = 0x0318, + WM_THEME_CHANGED = 0x031A, + WM_HANDHELDFIRST = 0x0358, + WM_HANDHELDLAST = 0x035F, + WM_AFXFIRST = 0x0360, + WM_AFXLAST = 0x037F, + WM_PENWINFIRST = 0x0380, + WM_PENWINLAST = 0x038F, + WM_APP = 0x8000, + WM_USER = 0x0400, + WM_REFLECT = WM_USER + 0x1c00 + } + #endregion + + #region SetWindowPosFlags + [Author ("Franco, Gustavo")] + [Flags] + public enum SetWindowPosFlags + { + SWP_NOSIZE = 0x0001, + SWP_NOMOVE = 0x0002, + SWP_NOZORDER = 0x0004, + SWP_NOREDRAW = 0x0008, + SWP_NOACTIVATE = 0x0010, + SWP_FRAMECHANGED = 0x0020, + SWP_SHOWWINDOW = 0x0040, + SWP_HIDEWINDOW = 0x0080, + SWP_NOCOPYBITS = 0x0100, + SWP_NOOWNERZORDER = 0x0200, + SWP_NOSENDCHANGING = 0x0400, + SWP_DRAWFRAME = 0x0020, + SWP_NOREPOSITION = 0x0200, + SWP_DEFERERASE = 0x2000, + SWP_ASYNCWINDOWPOS = 0x4000 + } + #endregion +} diff --git a/Xwt.Gtk.Windows/GtkWindowsDesktopBackend.cs b/Xwt.Gtk.Windows/GtkWindowsDesktopBackend.cs new file mode 100644 index 00000000..a4ac5ca0 --- /dev/null +++ b/Xwt.Gtk.Windows/GtkWindowsDesktopBackend.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Xwt.GtkBackend; +using System.Runtime.InteropServices; +using System.Drawing; +using System.IO; +using System.Drawing.Imaging; + +namespace Xwt.Gtk.Windows +{ + class GtkWindowsDesktopBackend: GtkDesktopBackend + { + Dictionary<string, Gdk.Pixbuf> icons = new Dictionary<string, Gdk.Pixbuf> (); + + public override object GetFileIcon (string filename) + { + var normal = GetIcon (filename, 0); + if (normal == null) + return null; + + var frames = new List<Gdk.Pixbuf> (); + frames.Add (normal); + + var small = GetIcon (filename, Win32.SHGFI_SMALLICON); + if (small != null && !frames.Contains (small)) + frames.Add (small); + + var shell = GetIcon (filename, Win32.SHGFI_SHELLICONSIZE); + if (shell != null && !frames.Contains (shell)) + frames.Add (shell); + + var large = GetIcon (filename, Win32.SHGFI_LARGEICON); + if (large != null && !frames.Contains (large)) + frames.Add (large); + + return new GtkImage (frames); + } + + Gdk.Pixbuf GetIcon (string filename, uint size) + { + SHFILEINFO shinfo = new SHFILEINFO (); + Win32.SHGetFileInfoW (filename, Win32.FILE_ATTRIBUTES_NORMAL, ref shinfo, (uint)Marshal.SizeOf (shinfo), Win32.SHGFI_USEFILEATTRIBUTES | Win32.SHGFI_ICON | Win32.SHGFI_ICONLOCATION | Win32.SHGFI_TYPENAME | size); + if (shinfo.iIcon == 0) { + Win32.DestroyIcon (shinfo.hIcon); + return null; + } + var icon = Icon.FromHandle (shinfo.hIcon); + string key = shinfo.iIcon + " - " + shinfo.szDisplayName + " - " + icon.Width; + + Gdk.Pixbuf pix; + if (!icons.TryGetValue (key, out pix)) { + pix = CreateFromResource (icon.ToBitmap ()); + icons[key] = pix; + } + Win32.DestroyIcon (shinfo.hIcon); + return pix; + } + + public Gdk.Pixbuf CreateFromResource (Bitmap bitmap) + { + MemoryStream ms = new MemoryStream (); + bitmap.Save (ms, ImageFormat.Png); + ms.Position = 0; + return new Gdk.Pixbuf (ms); + } + } +} diff --git a/Xwt.Gtk.Windows/Structs.cs b/Xwt.Gtk.Windows/Structs.cs new file mode 100644 index 00000000..5111a9c0 --- /dev/null +++ b/Xwt.Gtk.Windows/Structs.cs @@ -0,0 +1,178 @@ +// Copyright (c) 2006, Gustavo Franco +// Email: gustavo_franco@hotmail.com +// All rights reserved. + +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: + +// Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. + +// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY +// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR +// PURPOSE. IT CAN BE DISTRIBUTED FREE OF CHARGE AS LONG AS THIS HEADER +// REMAINS UNCHANGED. + +using System; +using System.Text; +using System.Drawing; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +namespace Xwt.Gtk.Windows +{ + #region WINDOWINFO + [Author ("Franco, Gustavo")] + [StructLayout (LayoutKind.Sequential)] + public struct WINDOWINFO + { + public UInt32 cbSize; + public RECT rcWindow; + public RECT rcClient; + public UInt32 dwStyle; + public UInt32 dwExStyle; + public UInt32 dwWindowStatus; + public UInt32 cxWindowBorders; + public UInt32 cyWindowBorders; + public UInt16 atomWindowType; + public UInt16 wCreatorVersion; + } + #endregion + + #region POINT + [Author ("Franco, Gustavo")] + [StructLayout (LayoutKind.Sequential)] + public struct POINT + { + public int x; + public int y; + + #region Constructors + public POINT (int x, int y) + { + this.x = x; + this.y = y; + } + + public POINT (Point point) + { + x = (int) point.X; + y = (int) point.Y; + } + #endregion + } + #endregion + + #region RECT + [Author ("Franco, Gustavo")] + [StructLayout (LayoutKind.Sequential)] + public struct RECT + { + public uint left; + public uint top; + public uint right; + public uint bottom; + + #region Properties + public POINT Location + { + get { return new POINT ((int)left, (int)top); } + set + { + right -= (left - (uint)value.x); + bottom -= (bottom - (uint)value.y); + left = (uint)value.x; + top = (uint)value.y; + } + } + + public uint Width + { + get { return right - left; } + set { right = left + value; } + } + + public uint Height + { + get { return bottom - top; } + set { bottom = top + value; } + } + #endregion + + #region Overrides + public override string ToString () + { + return left + ":" + top + ":" + right + ":" + bottom; + } + #endregion + } + #endregion + + #region WINDOWPOS + [Author ("Franco, Gustavo")] + [StructLayout (LayoutKind.Sequential)] + public struct WINDOWPOS + { + public IntPtr hwnd; + public IntPtr hwndAfter; + public int x; + public int y; + public int cx; + public int cy; + public uint flags; + + #region Overrides + public override string ToString () + { + return x + ":" + y + ":" + cx + ":" + cy + ":" + ((SWP_Flags)flags).ToString (); + } + #endregion + } + #endregion + + #region NCCALCSIZE_PARAMS + public struct NCCALCSIZE_PARAMS + { + public RECT rgrc1; + public RECT rgrc2; + public RECT rgrc3; + public IntPtr lppos; + } + #endregion + + #region + public struct NMHDR + { + public IntPtr hwndFrom; + public IntPtr idFrom; + public uint code; + } + #endregion + + #region OFNOTIFY + [Author ("Franco, Gustavo")] + [StructLayout (LayoutKind.Sequential)] + public struct OFNOTIFY + { + public NMHDR hdr; + public IntPtr OPENFILENAME; + public IntPtr fileNameShareViolation; + } + #endregion + + [StructLayout (LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct SHFILEINFO + { + public IntPtr hIcon; + public int iIcon; + public uint dwAttributes; + [MarshalAs (UnmanagedType.ByValTStr, SizeConst = 260)] + public string szDisplayName; + [MarshalAs (UnmanagedType.ByValTStr, SizeConst = 80)] + public string szTypeName; + }; +} diff --git a/Xwt.Gtk.Windows/Win32.cs b/Xwt.Gtk.Windows/Win32.cs new file mode 100644 index 00000000..919b2280 --- /dev/null +++ b/Xwt.Gtk.Windows/Win32.cs @@ -0,0 +1,117 @@ +// Copyright (c) 2006, Gustavo Franco +// Email: gustavo_franco@hotmail.com +// All rights reserved. + +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: + +// Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. + +// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY +// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR +// PURPOSE. IT CAN BE DISTRIBUTED FREE OF CHARGE AS LONG AS THIS HEADER +// REMAINS UNCHANGED. + +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; + +namespace Xwt.Gtk.Windows +{ + [Author ("Franco, Gustavo")] + public static class Win32 + { + public const uint SHGFI_ICON = 0x100; + public const uint SHGFI_LARGEICON = 0x0; // 'Large icon + public const uint SHGFI_SMALLICON = 0x1; // 'Small icon + public const uint SHGFI_SHELLICONSIZE = 0x4; // 'Shell icon + public const uint SHGFI_ICONLOCATION = 0x1000; + public const uint SHGFI_TYPENAME = 0x400; + public const uint SHGFI_USEFILEATTRIBUTES = 0x10; + public const uint FILE_ATTRIBUTES_NORMAL = 0x80; + internal const string USER32 = "user32.dll"; + internal const string SHELL32 = "shell32.dll"; + + #region Delegates + public delegate bool EnumWindowsCallBack (IntPtr hWnd, int lParam); + #endregion + + #region USER32 + [DllImport (Win32.USER32, CharSet = CharSet.Auto)] + public static extern IntPtr GetParent (IntPtr hWnd); + [DllImport (Win32.USER32)] + public static extern int GetDlgCtrlID (IntPtr hWndCtl); + [DllImport (Win32.USER32, CharSet = CharSet.Auto, ExactSpelling = true)] + public static extern int MapWindowPoints (IntPtr hWnd, IntPtr hWndTo, ref POINT pt, int cPoints); + [DllImport (Win32.USER32, SetLastError = true)] + public static extern bool GetWindowInfo (IntPtr hwnd, out WINDOWINFO pwi); + [DllImport (Win32.USER32)] + public static extern void GetWindowText (IntPtr hWnd, StringBuilder param, int length); + [DllImport (Win32.USER32)] + public static extern void GetClassName (IntPtr hWnd, StringBuilder param, int length); + [DllImport (Win32.USER32)] + public static extern bool EnumChildWindows (IntPtr hWndParent, EnumWindowsCallBack lpEnumFunc, int lParam); + [DllImport (Win32.USER32)] + public static extern bool EnumWindows (EnumWindowsCallBack lpEnumFunc, int lParam); + [DllImport (Win32.USER32, CharSet = CharSet.Auto)] + public static extern bool ReleaseCapture (); + [DllImport (Win32.USER32, CharSet = CharSet.Auto)] + public static extern IntPtr SetCapture (IntPtr hWnd); + [DllImport (Win32.USER32, CharSet = CharSet.Auto)] + public static extern IntPtr ChildWindowFromPointEx (IntPtr hParent, POINT pt, ChildFromPointFlags flags); + [DllImport (Win32.USER32, EntryPoint = "FindWindowExA", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] + public static extern IntPtr FindWindowEx (IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); + [DllImport (Win32.USER32)] + public static extern IntPtr SetParent (IntPtr hWndChild, IntPtr hWndNewParent); + [DllImport (Win32.USER32, CharSet = CharSet.Auto)] + public static extern int PostMessage (IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); + [DllImport (Win32.USER32, CharSet = CharSet.Auto)] + public static extern int PostMessage (IntPtr hWnd, int msg, int wParam, int lParam); + [DllImport (Win32.USER32, CharSet = CharSet.Auto)] + public static extern int SendMessage (IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); + [DllImport (Win32.USER32, CharSet = CharSet.Auto)] + public static extern int SendMessage (IntPtr hWnd, int msg, int wParam, int lParam); + [DllImport (Win32.USER32, CharSet = CharSet.Auto)] + public static extern int SendMessage (IntPtr hWnd, int msg, int wParam, StringBuilder param); + [DllImport (Win32.USER32, CharSet = CharSet.Auto)] + public static extern int SendMessage (IntPtr hWnd, int msg, int wParam, char[] chars); + [DllImport (Win32.USER32, CharSet = CharSet.Auto)] + public static extern IntPtr BeginDeferWindowPos (int nNumWindows); + [DllImport (Win32.USER32, CharSet = CharSet.Auto)] + public static extern IntPtr DeferWindowPos (IntPtr hWinPosInfo, IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int Width, int Height, SetWindowPosFlags flags); + [DllImport (Win32.USER32, CharSet = CharSet.Auto)] + public static extern bool EndDeferWindowPos (IntPtr hWinPosInfo); + [DllImport (Win32.USER32, CharSet = CharSet.Auto)] + public static extern bool SetWindowPos (IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int Width, int Height, SetWindowPosFlags flags); + [DllImport (Win32.USER32)] + public static extern bool GetWindowRect (IntPtr hwnd, ref RECT rect); + [DllImport (Win32.USER32)] + public static extern bool GetClientRect (IntPtr hwnd, ref RECT rect); + [DllImport (Win32.USER32)] + public static extern bool DestroyIcon ([In] IntPtr hIcon); + [DllImport (Win32.SHELL32, CharSet = CharSet.Unicode)] + public static extern IntPtr SHGetFileInfoW ([In] string pszPath, uint dwFileAttributes, [In, Out] ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags); + #endregion + } + + [AttributeUsage (AttributeTargets.Class | + AttributeTargets.Enum | + AttributeTargets.Interface | + AttributeTargets.Struct, + AllowMultiple = true)] + [Author ("Franco, Gustavo")] + internal class AuthorAttribute : Attribute + { + #region Constructors + public AuthorAttribute (string authorName) + { + } + #endregion + } +} diff --git a/Xwt.Gtk.Windows/WindowsPlatformBackend.cs b/Xwt.Gtk.Windows/WindowsPlatformBackend.cs index 8880252c..454f0d9f 100644 --- a/Xwt.Gtk.Windows/WindowsPlatformBackend.cs +++ b/Xwt.Gtk.Windows/WindowsPlatformBackend.cs @@ -25,11 +25,17 @@ // THE SOFTWARE. using System; using Xwt.GtkBackend; +using Xwt.Backends; namespace Xwt.Gtk.Windows { public class WindowsPlatformBackend: GtkPlatformBackend { + public override void Initialize (Backends.ToolkitEngineBackend toolit) + { + base.Initialize (toolit); + toolit.RegisterBackend<DesktopBackend, GtkWindowsDesktopBackend> (); + } } } diff --git a/Xwt.Gtk.Windows/Xwt.Gtk.Windows.csproj b/Xwt.Gtk.Windows/Xwt.Gtk.Windows.csproj index aa4c1456..36f4884c 100644 --- a/Xwt.Gtk.Windows/Xwt.Gtk.Windows.csproj +++ b/Xwt.Gtk.Windows/Xwt.Gtk.Windows.csproj @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> @@ -8,7 +8,7 @@ <ProjectGuid>{252117CA-0ABB-4F36-BFC8-DE23A8089BB9}</ProjectGuid> <OutputType>Library</OutputType> <RootNamespace>Xwt.Gtk.Windows</RootNamespace> - <AssemblyName>Xwt.GtkWin32</AssemblyName> + <AssemblyName>Xwt.Gtk.Windows</AssemblyName> <SignAssembly>true</SignAssembly> <AssemblyOriginatorKeyFile>..\xwt.snk</AssemblyOriginatorKeyFile> </PropertyGroup> @@ -31,10 +31,18 @@ <ConsolePause>false</ConsolePause> </PropertyGroup> <ItemGroup> + <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f, processorArchitecture=MSIL" /> + <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f, processorArchitecture=MSIL" /> + <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f, processorArchitecture=MSIL" /> <Reference Include="System" /> + <Reference Include="System.Drawing" /> </ItemGroup> <ItemGroup> + <Compile Include="Enums.cs" /> + <Compile Include="GtkWindowsDesktopBackend.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="Structs.cs" /> + <Compile Include="Win32.cs" /> <Compile Include="WindowsPlatformBackend.cs" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> |