




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、.NetWInform 開發(fā)筆記(三)談?wù)勛灾瓶丶ㄗ远x控件)自定義控件的出現(xiàn)有利于用戶更好的實(shí)現(xiàn)自己的想法,可以封裝一些常用的方法,屬性等等 本文詳細(xì)介紹一下自定義控件的實(shí)現(xiàn),感興趣的朋友可以了解下 末日這天寫篇博客吧,既然沒來,那就紀(jì)念一下。這次談?wù)勛灾瓶丶簿褪亲远x控件,先上圖,再說1.擴(kuò)展OpenFileDialog,在OpenFileDialog中添加各種文件(.txt,.jpg,.excel等等)的預(yù)覽功能2重寫ListBox,增加折疊、鼠標(biāo)背影、分類等功能分割線一、擴(kuò)展 OpenFileDialog許多軟件的打開對話框都有預(yù)覽功能,最常見的就是圖片預(yù)覽,用鼠標(biāo)選擇一個(gè)圖片文
2、件后,右側(cè)或者下側(cè)就會有該圖片的縮略圖(photoshop中屬于后者)。在winform編程中,有專門的打開文件對話框的類0penFileDialog,但是他不提供文件預(yù)覽功能,封裝得實(shí)在太好??纯此_那些接口AdciExtensionAutoUpgradeEnabled CheckFileEifetsCheckPathExfct Container ilreateObjRef CustomPlaces.DefaultExt DereferenceLinks Dispose DisposedEqualsFileNameAdciExtensionAutoUpgradeEnabled Check
3、FileEifetsCheckPathExfct Container ilreateObjRef CustomPlaces.DefaultExt DereferenceLinks Dispose DisposedEqualsFileNameFileNamesFileOkFilterFilterindexGetHashCodeV GetLiFetimeSeryiceQ GetType、* GetType/ HelpRequestInitialDirectory2 InitializeLifetimeSericeMultiselectOpenFileReadOnlythechedResetRest
4、oreDirectory.- SafeFileName SafeFileNamesShowDialogShowHelp ShowReadOnly Site SupportMultiDottedExtensions ft lotina 腳本之家 jJ ValidateNames提到擴(kuò)展,很多人可能想到繼承它就可以擴(kuò)展它,可惜OpenFileDialog聲明為sealed,不允許從他繼承。稍 微底層一點(diǎn)的,想到可以通過Win32 API來修改它的顯示方式,只可惜,如你所見,它根本沒提供Handle 屬性,更別說 HandleCreated、HandleDestroyed 等事件了。那么怎么樣子搞呢
5、?其實(shí)答案還是通過 Win32 API,只是我們?nèi)〉盟木浔姆绞揭獜?fù)雜一點(diǎn)而且調(diào)用API的時(shí)機(jī)隱晦了一點(diǎn)。提示:1.Win32 API 操作窗體需要知道窗體的句柄;2不熟悉Win32編程的同學(xué)可以先上網(wǎng)查查資料,特別是不知道SetParent、SetWindowPos等API是干嘛的,我覺得以下的看 不懂。為什么說取得它的句柄復(fù)雜了一點(diǎn)?難道不是用“FindWindow”、“FindWindowEx”、“ EnumChildWindows” 等獲取 OpenFileDialog 的句柄,再用“SetParent、“SetWindowPos等 API 將.net 控件(本例中是 DataGri
6、 dView控件,當(dāng)然可以使其他任何一種)添加到OpenFileDialog中去?沒錯,以上列舉出來的API都是基本 要用到的,“只是用在什么地方、什么時(shí)候用是個(gè)比較麻煩的問題,原因如下:1)我們知道OpenfileDialog顯示的是模式對話框,也就是說,一旦它ShowDialog (),它以下的代碼是不會 再執(zhí)行的,具體原因是什么(我以后的博客會專門講為什么),你現(xiàn)在可以理解為OpenFileDialog()方法會阻 塞調(diào)用線程,既然阻塞了調(diào)用線程,那么我們再無法控制程序了(直到它返回),根本談不上再調(diào)用API獲 取OpenFileDialog的句柄然后去操作它。如果有人會說,我可以另開辟
7、線程去取OpenFileDialog得句柄再 操作它”,恩,我不否定這個(gè)方法,只是我想說,如果你真的按照這個(gè)方法去試,那么肯定會陷入泥潭。因 為你不僅要取它的句柄,你還要監(jiān)視 OpenFIleDialog 的一舉一動,移動、縮放、用戶鼠標(biāo)點(diǎn)擊選擇文件、 更改目錄等,然后再操作.net控件(本例中是DataGridView控件,下同),讓.net控件去適應(yīng)OpenFileDial og的大小等等,你會發(fā)現(xiàn)你忙死了,甚至有的你根本監(jiān)視不了,比如用戶點(diǎn)擊選擇文件、更改目錄。2)就算我們能夠在OpenFIleDialog顯示之后,取得它的句柄,那么什么時(shí)候再調(diào)用其他API呢?比如什么 時(shí)候調(diào)用SetW
8、indowPos,讓.net控件適應(yīng)OpenFileDialog的大小變化?什么時(shí)候知道用戶選擇文件發(fā)生了 變化?所以,API方法什么時(shí)候用?用在什么地方?就是接下來要討論的東西。我不知道各位在使用各種框架的時(shí)候,對“框架”的理解到什么程度,我覺得可以總結(jié)成一句話“跟個(gè)2b 似地注冊一些事件,然后苦逼地去寫好每一個(gè)回調(diào)方法,我們卻不知道為啥要這樣寫”,不是么?既然這樣, 那么我們的API方法只要寫在了正確的回調(diào)方法中,我們就能到達(dá)想要的目的了??紤]幾個(gè)問題:1)OpenFileDialog顯示,我們向其中添加.net控件。我們什么時(shí)候知道它顯示?2)OpenFileDialog大小發(fā)生變化時(shí),
9、我們要更新.net控件以適應(yīng)新的大小。我們什么時(shí)候知道OpenFileDial og的大小發(fā)生了變化?3)OpenFileDialog中用戶選擇的文件發(fā)生了變化,我們需要知道新選擇的文件路徑,用來顯示在.net控件 中。我們怎么知道選擇了什么文件?(這里選擇文件指用戶用鼠標(biāo)在OpenFileDialog中單擊選取不是點(diǎn)擊 “確定”后。)以上所有的問題,其實(shí)在一個(gè)地方都可以知道,那就是監(jiān)聽OpenFileDialog窗體的Windows消息,因?yàn)橐?個(gè)窗體的任何一個(gè)動作都伴隨著一系列的Windows消息(這個(gè)可以用Spy+查看)。既然這樣,那么我們可 以在窗體處理Windows消息的回調(diào)方法中調(diào)
10、用API方法了,也就是窗體的Control.WndProc方法中。之前已 經(jīng)說過了,OpenFileDialog聲明為Sealed,提供的接口少之又少,我們幾乎根本不可能接觸到OpenFileDial og的WndProc,更談不上監(jiān)聽Windows消息,然后調(diào)用API去操作它。這時(shí)候,NativeWindow該出場了, 先來引用一下MSDN上對NativeWindow的解釋:“提供窗口句柄和窗口過程的低級封裝?!闭f了像沒說一樣,其實(shí)就是說,將一個(gè)窗口句柄與NativeWindow對象綁定后,該NativeWindow對象就能 接收到這個(gè)窗體的所有消息。說到 Windows 消息,我想說一下
11、Windows 桌面應(yīng)用程序的運(yùn)行流程,其實(shí) 如果看了我前一篇博客的同學(xué)應(yīng)該有些了解,中基本提到了一些。為了配合本次講解,我再次畫了一張圖上圖中,虛線框可以看做是一個(gè).net中的Control類對象(或者其派生類,下同,控件即窗體、窗體即控件), 正常情況下,Winform程序會按照1-2-3的步驟運(yùn)行,當(dāng)我們將Control類對象的Handle (就是我們常說 的窗口句柄,做了一下封裝)與一個(gè)Nativewindow對象綁定后,程序不再按照1-2-3這樣的順序運(yùn)行了, 他會按照1-2-1-2-2-3這樣運(yùn)行,也就是說,Nativewindow對象可以攔截Control類對象的Windows消
12、 息,我們完全可以在Nativewindow中重寫他的WndProc方法,像處理自己的Windows消息一樣去處理C ontrol類對象的消息。所以,我們就可以在Nativewindow對象的WndProc中調(diào)用我們的API方法。接下來,上代碼(代碼只提供大概思路)1.擴(kuò)展對話框復(fù)制代碼弋碼如下:i#region fieldsprivate const SetWindowPosFlags UFLAGSHIDE =SetWindowPosFlags.SWP_NOACTIVATE |SetWindowPosFlags.SWP_NOOWNERZORDER |SetWindowPosFlags.SWP
13、_NOMOVE |SetWindowPosFlags.SWP_NOSIZE |SetWindowPosFlags.SWP_HIDEWINDOW;#endregionpublic string FileName;#region public methodsu_=_MedianForm median = new MedianForm(open); median.Show(owner);Win32.SetWindowPos(median.Handle, IntPtr.Zero, 0, 0, 0, 0, UFLAGSHIDE); 隱藏中間窗體 DialogResult dialogresult = o
14、pen.ShowDialog(median); 將 median 作為 openfileDialog 的 owner median.Close();:(_FileName = open.FileName;2.監(jiān)聽 Dialog 的 NativeWindow復(fù)制代碼弋碼如下:View Codeclass DialogNativeWindow : NativeWindow,IDisposableIntPtr handle; 待擴(kuò)展 OpenFileDialog 的句柄OpenFileDialog openfiledialog; 待擴(kuò)展 OpenFileDialogDataGridView addC
15、ontrol; 向窗體中添加新的控件bool init = false;:this.handle = handle;this.openfiledialog = openfiledialog;AssignHandle(handle);/設(shè)置控件信息addControl = new DataGridView(); addControl.Width = 600;addControl.Height = 200;:=nu”#region override methods p_ swtch (m.Msg)NativeChild();AddControl();b圖:UpdateSize();break;Ca
16、se_”U#endregion#region event handlers/處理選擇目錄變化事件/.”e)/處理選擇文件變化事件如果是xls文件,將其顯示在datagridview控件中string str = file.ToString();OledbManager manager = new OledbManager();if (manager.Connect(Provider=Microsoft.Jet.OLEDB.4.0; Data Source= + str + 、; Extended Properties=EDataTable tb = manager.SearchTable();
17、addControl.Rows.Clear();addControl.Columns.Clear();object objs = new objecttb.Columns.Count;objsi = rowi;elseadd#endregion#region private methodsprivate void NativeChild():查找 op 中的子控件/添加控件到OpenFileDialog界面Win32.SetParent(addControl.Handle, handle);RECT currentSize = new RECT();Win32.GetClientRect(ha
18、ndle, ref currentSize);addControl.Height = (int)currentSize.Height;addControl.Location = new Point(int)(currentSize.Width - addControl.Width), 0);init = true;private void UpdateLocation(Message m)if (!init) 只初始化 openfileDialog 的大小一次WINDOWPOS pos = (WINDOWPOS)Marshal.PtrToStructure(m.LParam, typeof(W
19、INDOWPOS);if (pos.flags != 0 & (pos.flags & (int)SWP_Flags.SWP_NOSIZE) != (int)SWP_Flags.SWP_NOSIZE)pos.cx += addControl.Width; 修改 OpenfileDialog 的寬度Marshal.StructureToPtr(pos, m.LParam, true);RECT currentSize = new RECT();Win32.GetClientRect(handle, ref currentSize);addControl.Height = (int)current
20、Size.Height;private void UpdateSize()RECT currentSize = new RECT();Win32.GetClientRect(handle, ref currentSize);Win32.SetWindowPos(addControl.Handle, (IntPtr)ZOrderPos.HWND_BOTTOM, 0, 0, (int)addControl.Width, (i nt)currentSize.Height, UFLAGSSIZEEX); 新添加的控件與 openfileDialog 大小一致private bool WindowCal
21、lBack(lntPtr handle, int lparam)StringBuilder wndClass = new StringBuilder(256);Win32.GetClassName(handle, wndClass, wndClass.Capacity);/獲取控件類名 if (wndClass.ToString().StartsWith(#32770) 找到目標(biāo)控件childNative = new ChildControlNativeWindow(handle);childNative.SelectFileChanged += new ChildControlNativeW
22、indow.SelectFileChangedEventHandler(childNative_SelectFileChanged);childNative.SelectPathChanged += new ChildControlNativeWindow.SelectPathChangedEventHandler(childNativ e_SelectPathChanged);return true;return true;#endregion#region enums private const SetWindowPosFlags UFLAGSSIZEEX =SetWindowPosFla
23、gs.SWP_NOACTIVATE |SetWindowPosFlags.SWP_NOOWNERZORDER |SetWindowPosFlags.SWP_ASYNCWINDOWPOS |SetWindowPosFlags.SWP_DEFERERASE;private const SetWindowPosFlags UFLAGSSIZE =SetWindowPosFlags.SWP_NOACTIVATE |SetWindowPosFlags.SWP_NOOWNERZORDER |SetWindowPosFlags.SWP_NOMOVE;private const SetWindowPosFla
24、gs UFLAGSHIDE =SetWindowPosFlags.SWP_NOACTIVATE |SetWindowPosFlags.SWP_NOOWNERZORDER |SetWindowPosFlags.SWP_NOMOVE |SetWindowPosFlags.SWP_NOSIZE |SetWindowPosFlags.SWP_HIDEWINDOW;#endregion#region IDisposable 成員public void Dispose。ReleaseHandle(); 釋放與 openfileDialog 的句柄關(guān)聯(lián)訐(childNative != null) child
25、Native.SelectFileChanged -= new ChildControlNativeWindow.SelectFileChangedEventHandler(childNative_SelectFileChanged);childNative.SelectPathChanged -= new ChildControlNativeWindow.SelectPathChangedEventHandler(childNativ e_SelectPathChanged);#endregion3.監(jiān)聽子控件的 NativeWindow復(fù)制代碼弋碼如下:_: _IntPtr handle;
26、 需要被監(jiān)聽消息的子控件句柄handle)this.handle = handle;一#region override methodsswitch Mcase (int)Msg.WM_NOTIFY:OFNOTIFY ofNotify = (OFNOTIFY)Marshal.PtrToStructure(m.LParam, typeof(OFNOTIFY);訐(ofNotify.hdr.code = (uint)DialogChangeStatus.CDN_SELCHANGE) /openfileDialog 選擇文件發(fā)生變化StringBuilder file = new StringBuil
27、der(256);Win32.SendMessage(Win32.GetParent(handle), (int)DialogChangeProperties.CDM_GETFILEPATH, (int)256, file);訐(SelectFileChanged != null)SelectFileChanged(file); 通知注冊者else if (ofNotify.hdr.code = (uint)DialogChangeStatus.CDN_FOLDERCHANGE) /openfileDialog 選擇目錄發(fā)生變化StringBuilder path = new StringBu
28、ilder(256);Win32.SendMessage(Win32.GetParent(handle), (int)DialogChangeProperties.CDM_GETFOLDERPATH, (int)256,path);訐(SelectPathChanged != null)SelectPathChanged(path); 通知注冊者break;base.WndProc(ref m);#endregion#region delegatepublic delegate void SelectFileChangedEventHandler(StringBuilder file);pub
29、lic delegate void SelectPathChangedEventHandler(StringBuilder path);#endregion#region eventspublic event SelectFileChangedEventHandler SelectFileChanged; 當(dāng) openfileDialog 的選擇文件發(fā)生變化時(shí)發(fā)生public event SelectPathChangedEventHandler SelectPathChanged; 當(dāng) openfileDialog 的選擇目錄發(fā)生變化時(shí)發(fā)生#endregion#region IDisposa
30、ble 成員public void Dispose。i終止與子控件句柄的關(guān)聯(lián)4.中間過渡窗體,用來獲取 OpenFileDialog 的句柄復(fù)制代碼弋碼如下:class MedianForm : FormOpenFileDialog open = null;DialogNativeWindow dialognative;public MedianForm(OpenFileDialog open)this.open = open;StartPosition = FormStartPosition.Manual;Location = new System.Drawing.Point(-1000,
31、-1000); 避免界面閃爍protected override void OnClosing(System.ComponentModel.CancelEventArgs e)if (dialognative != null)dialognative.Dispose(); 釋放資源base.OnClosing(e);protected override void WndProc(ref Message m)訐(m.Msg = (int) Msg.WM_ACTIVATE)dialognative = new DialogNativeWindow(m.LParam, open); m.LParam
32、 為要打開的窗口句柄,開始監(jiān)聽 Op enFileDialog 的 Windows 消息:一5訪問ExceI文件的類復(fù)制代碼弋碼如下:O I eDbConnection conn;/ /連接exce I文件/ / / tryconn = new OleDbConnection(connstr);conn.Open();catch:eturn fa./III查找第一張表中的數(shù)據(jù)III III public DataTable SearchTable()tryD_string sql = select * from Sheet1$;OleDbCommand com = new OleDbComma
33、nd(sql, conn);OleDbDataAdapter adp = new OleDbDataAdapter(com);adp.Fill(tb);eturntb;catch復(fù)制代碼弋碼如下:public static class Win32#region Delegatespublic delegate bool EnumWindowsCallBack(lntPtr hWnd, int IParam);#endregion#region USER32Dlllmport(user32.dll, CharSet = CharSet.Auto)public static extern IntP
34、tr GetParent(lntPtr hWnd);Dlllmport(User32.DII)public static extern int GetDlgCtrllD(lntPtr hWndCtl);DllImport(user32.dll, CharSet = CharSet.Auto, ExactSpelling = true)public static extern int MapWindowPoints(lntPtr hWnd, IntPtr hWndTo, ref POINT pt, int cPoints);DllImport(user32.dll, SetLastError =
35、 true)public static extern bool GetWindowlnfo(lntPtr hwnd, out WINDOWINFO pwi);Dlllmport(User32.DII)public static extern void GetWindowText(lntPtr hWnd, StringBuilder param, int length);Dlllmport(User32.DII)public static extern void GetClassName(lntPtr hWnd, StringBuilder param, int length);Dlllmpor
36、t(user32.DII)public static extern bool EnumChiIdWindows(IntPtr hWndParent, EnumWindowsCallBack IpEnumFunc, int IParam);Dlllmport(user32.DII)public static extern bool EnumWindows(EnumWindowsCallBack IpEnumFunc, int IParam);Dlllmport(User32.dll, CharSet = CharSet.Auto)public static extern bool Release
37、Capture();Dlllmport(user32.dll, CharSet = CharSet.Auto)public static extern IntPtr SetCapture(lntPtr hWnd);DllImport(user32.dll, CharSet = CharSet.Auto)public static extern IntPtr ChildWindowFromPointEx(lntPtr hParent, POINT pt, ChildFromPointFlags flags);DllImport(user32.dll, EntryPoint = FindWindo
38、wExA, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);Dlllmport(user32.dll)public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);DllIm
39、port(user32.dll, CharSet = CharSet.Auto)public static extern int PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);DllImport(user32.dll, CharSet = CharSet.Auto)public static extern int PostMessage(IntPtr hWnd, int msg, int wParam, int lParam);DllImport(user32.dll, CharSet = CharSet.Au
40、to)public static extern int SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);DllImport(user32.dll, CharSet = CharSet.Auto) public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);DllImport(user32.dll, CharSet = CharSet.Auto) public static extern int SendMes
41、sage(IntPtr hWnd, int msg, int wParam, StringBuilder param);Dlllmport(user32.dll, CharSet = CharSet.Auto) public static extern int SendMessage(lntPtr hWnd, int msg, int wParam, char chars);DllImport(user32.dll, CharSet = CharSet.Auto) public static extern IntPtr BeginDeferWindowPos(int nNumWindows);
42、Dlllmport(user32.dll, CharSet = CharSet.Auto) public static extern IntPtr DeferWindowPos(lntPtr hWinPosInfo, IntPtr hWnd, IntPtr hWndInsertAfter, int x,int y, int Width, int Height, SetWindowPosFlags flags);Dlllmport(user32.dll, CharSet = CharSet.Auto) public static extern bool EndDeferWindowPos(lnt
43、Ptr hWinPosInfo);DllImport(user32.dll, CharSet = CharSet.Auto) public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int Width, intHeight, SetWindowPosFlags flags);DllImport(user32.dll) public static extern bool GetWindowRect(IntPtr hwnd, ref RECT rect);DllImport(
44、user32.dll) public static extern bool GetClientRect(IntPtr hwnd, ref RECT rect);#endregion#region SWP_Flags Flags public enum SWP_FlagsSWP_NOSIZE = 0 x0001,SWP_NOMOVE = 0 x0002,SWP_NOACTIVATE = 0 x0010,SWP_FRAMECHANGED = 0 x0020, /* The frame changed: send WM_NCCALCSIZE */SWP_SHOWWINDOW = 0 x0040,SW
45、P_HIDEWINDOW = 0 x0080,SWP_NOOWNERZORDER = 0 x0200, /* Dont do owner Z ordering */SWP_DRAWFRAME = SWP_FRAMECHANGED, SWP_NOREPOSITION = SWP_NOOWNERZORDER #endregion#region DialogChangeStatuspublic enum DialogChangeStatus : longCDN_FIRST = 0 xFFFFFDA7,CDN_INITDONE = (CDN_FIRST - 0 x0000),CDN_SELCHANGE
46、 = (CDN_FIRST - 0 x0001),CDN_FOLDERCHANGE = (CDN_FIRST - 0 x0002),CDN_SHAREVIOLATION = (CDN_FIRST - 0 x0003),CDN_HELP = (CDN_FIRST - 0 x0004),CDN_FILEOK = (CDN_FIRST - 0 x0005),CDN_TYPECHANGE = (CDN_FIRST - 0 x0006),#endregion#region DialogChangeProperties public enum DialogChangePropertiesCDM_FIRST
47、 = (0 x400 + 100),CDM_GETSPEC = (CDM_FIRST + 0 x0000),CDM_GETFILEPATH = (CDM_FIRST + 0 x0001),CDM_GETFOLDERPATH = (CDM_FIRST + 0 x0002),CDM_GETFOLDERIDLIST = (CDM_FIRST + 0 x0003),CDM_SETCONTROLTEXT = (CDM_FIRST + 0 x0004),CDM_HIDECONTROL = (CDM_FIRST + 0 x0005),CDM_SETDEFEXT = (CDM_FIRST + 0 x0006)
48、 #endregion#region ImeNotifypublic enum ImeNotifyIMN_CLOSESTATUSWINDOW = 0 x0001,IMN_OPENSTATUSWINDOW = 0 x0002,IMN_CHANGECANDIDATE = 0 x0003,IMN_CLOSECANDIDATE = 0 x0004,IMN_OPENCANDIDATE = 0 x0005,IMN_SETCONVERSIONMODE = 0 x0006,IMN_SETOPENSTATUS = 0 x0008,IMN_SETCANDIDATEPOS = 0 x0009,IMN_SETCOMP
49、OSITIONFONT = 0 x000A,IMN_SETCOMPOSITIONWINDOW = 0 x000B,IMN_SETSTATUSWINDOWPOS = 0 x000C,IMN_GUIDELINE = 0 x000D,#endregion#region FolderViewModeDefault = 0 x7028,Icon = Default + 1,SmallIcon = Default + 2,List = Default + 3,Details = Default + 4,Thumbnails = Default + 5,Title = Default + 6,#endreg
50、ion#region Enum DialogViewPropertypublic enum DefaultViewTypeList = 0 x702b,Details = 0 x702c,Thumbnails = 0 x702d,#endregion#region ButtonstyleBS_PUSHBUTTON = 0 x00000000,BS_DEFPUSHBUTTON = 0 x00000001,BS_CHECKBOX = 0 x00000002,BS_AUTOCHECKBOX = 0 x00000003,BS_RADIOBUTTON = 0 x00000004,BS_3STATE =
51、0 x00000005,BS_AUTO3STATE = 0 x00000006,BS_GROUPBOX = 0 x00000007,BS_USERBUTTON = 0 x00000008,BS_AUTORADIOBUTTON = 0 x00000009,BS_PUSHBOX = 0 x0000000A,BS_OWNERDRAW = 0 x0000000B,BS_TYPEMASK = 0 x0000000F,BS_LEFTTEXT = 0 x00000020,BS_TEXT = 0 x00000000,BS_ICON = 0 x00000040,BS_BITMAP = 0 x00000080,B
52、S_LEFT = 0 x00000100,BS_RIGHT = 0 x00000200,BS_CENTER = 0 x00000300,BS_TOP = 0 x00000400,BS_BOTTOM = 0 x00000800,BS_VCENTER = 0 x00000C00,BS_PUSHLIKE = 0 x00001000,BS_MULTILINE = 0 x00002000,BS_NOTIFY = 0 x00004000,BS_FLAT = 0 x00008000, _ = 5#endregion#region ZOrderPosHWND_TOP = 0,HWND_B0TT0M = 1,H
53、WND_TOPMOST = -1,HWND_NOTOPMOST = -2#endregion#region Static Control Stylespublic enum StaticControlStyles : long SsSS_CENTER = 0 x00000001,SS_RIGHT = 0 x00000002,SS_ICON = 0 x00000003,SS_BLACKRECT = 0 x00000004,SS_GRAYRECT = 0 x00000005,SS_WHITERECT = 0 x00000006,SS_BLACKFRAME = 0 x00000007,SS_GRAY
54、FRAME = 0 x00000008,SS_WHITEFRAME = 0 x00000009,SS_USERITEM = 0 x0000000A,SS_SIMPLE = 0 x0000000B,SS_LEFTNOWORDWRAP = 0 x0000000C,SS_OWNERDRAW = 0 x0000000D,SS_BITMAP = 0 x0000000E,SS_ENHMETAFILE = 0 x0000000F,SS_ETCHEDHORZ = 0 x00000010,SS_ETCHEDVERT = 0 x00000011,SS_ETCHEDFRAME = 0 x00000012,SS_TY
55、PEMASK = OxOOOOOOIF,SS_REALSIZECONTROL = OxOOOOOO4O,SS_NOPREFIX = OxOOOOOO8O, /* Dont do & character translation */SS_NOTIFY = 0 x00000100,SS_CENTERIMAGE = 0 x00000200,SS_RIGHTJUST = 0 x00000400,SS_REALSIZEIMAGE = 0 x00000800,SS_SUNKEN = 0 x00001000,SS_EDITCONTROL = 0 x00002000,SS_ENDELLIPSIS = 0 x0
56、0004000,SS_PATHELLIPSIS = 0 x00008000,SS_WORDELLIPSIS = OxOOOOCOOO,SS_ELLIPSISMASK = OxOOOOCOOO #endregion#region Combo Box stylespublic enum ComboBoxStyles : long CBS_SIMPLE = 0 x0001,CBS_DROPDOWN = 0 x0002,CBS_DROPDOWNLIST = 0 x0003,CBS_OWNERDRAWFIXED = 0 x0010,CBS_AUTOHSCROLL = 0 x0040,CBS_OEMCON
57、VERT = 0 x0080,CBS_SORT = 0 x0100,CBS_HASSTRINGS = 0 x0200,CBS_NOINTEGRALHEIGHT = 0 x0400,CBS_DISABLENOSCROLL = 0 x0800,CBS_UPPERCASE = 0 x2000,#endregion#region Window Styles WS_OVERLAPPED = 0 x00000000,WS_POPUP = 0 x80000000,WS_CHILD = 0 x40000000,WS_MINIMIZE = 0 x20000000,WS_VISIBLE = 0 x10000000
58、,WS_DISABLED = 0 x08000000,WS_CLIPSIBLINGS = 0 x04000000,WS_CLIPCHILDREN = 0 x02000000,WS_MAXIMIZE = 0 x01000000,WS_CAPTION = 0 x00C00000,WS_BORDER = 0 x00800000,WS_DLGFRAME = 0 x00400000,WS_VSCROLL = 0 x00200000,WS_HSCROLL = 0 x00100000,WS_SYSMENU = 0 x00080000,WS_THICKFRAME = 0 x00040000,WS_GROUP
59、= 0 x00020000,WS_TABSTOP = 0 x00010000,WS_MINIMIZEBOX = 0 x00020000,WS_MAXIMIZEBOX = 0 x00010000,WS_TILED = 0 x00000000,WS_ICONIC = 0 x20000000,WS_SIZEBOX = 0 x00040000,WS_POPUPWINDOW = 0 x80880000,WS_OVERLAPPEDWINDOW = 0 x00CF0000,WS_TILEDWINDOW = 0 x00CF0000,WS_CHILDWINDOW = 0 x40000000#endregion#
60、region Window Extended Stylespublic enum WindowExStylesWS_EX_DLGMODALFRAME = 0 x00000001,WS_EX_NOPARENTNOTIFY = 0 x00000004,WS_EX_ACCEPTFILES = 0 x00000010,WS_EX_TRANSPARENT = 0 x00000020,WS_EX_MDICHILD = 0 x00000040,WS_EX_TOOLWINDOW = 0 x00000080,WS_EX_WINDOWEDGE = 0 x00000100,WS_EX_CLIENTEDGE = 0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZZB Q071-2024 酶底物法微生物智能培養(yǎng)計(jì)數(shù)一體機(jī)
- T-ZJHIA 16-2024 特殊醫(yī)學(xué)用途配方食品臨床營養(yǎng)治療營養(yǎng)篩查數(shù)據(jù)集
- 二零二五年度離婚協(xié)議中夫妻共同財(cái)產(chǎn)清算補(bǔ)充協(xié)議
- 二零二五年度直播帶貨主播合作權(quán)益保障合同
- 2025年度智能制造合作伙伴協(xié)議書
- 二零二五年度木制家具生產(chǎn)廠木工用工協(xié)議書
- 二零二五年度車輛掛靠運(yùn)輸合同車輛運(yùn)輸合同安全保障協(xié)議
- 二零二五年度個(gè)人租賃帶太陽能熱水系統(tǒng)住宅合同
- 二零二五年度餐飲行業(yè)知識產(chǎn)權(quán)保護(hù)協(xié)議
- 二零二五年度兼職攝影師聘用合同模板
- 家校共育之道
- DeepSeek入門寶典培訓(xùn)課件
- 西安2025年陜西西安音樂學(xué)院專職輔導(dǎo)員招聘2人筆試歷年參考題庫附帶答案詳解
- 《作文中間技巧》課件
- 廣東省2025年中考物理仿真模擬卷(深圳)附答案
- 2025屆八省聯(lián)考 新高考適應(yīng)性聯(lián)考英語試題(原卷版)
- 新蘇教版一年級下冊數(shù)學(xué)第1單元第3課時(shí)《8、7加幾》作業(yè)
- 2024年山東電力高等??茖W(xué)校高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 2024年電力交易員(高級工)職業(yè)鑒定理論考試題庫(單選題、多選題、判斷題)
- 《平面廣告賞析》課件
- 【公開課】同一直線上二力的合成+課件+2024-2025學(xué)年+人教版(2024)初中物理八年級下冊+
評論
0/150
提交評論