認識 CreateWindow 函數:
CreateWindow( lpClassName: PChar; {窗口類的名字} lpWindowName: PChar; {窗口標題} dwStyle: DWORD; {窗口樣式, 參加下表} X,Y: Integer; {位置; 默認的X,Y可以指定為: Integer(CW_USEDEFAULT)} nWidth,nHeight: Integer;{大小; 默認的寬度、高度可以指定為: Integer(CW_USEDEFAULT)}} hWndParent: HWND; {父窗口句柄} hMenu: HMENU; {主菜單句柄} hInstance: HINST; {模塊實例句柄, 也就是當前 exe 的句柄} lpParam: Pointer {附加參數, 創建多文檔界面時才用到, 一般設為 nil} ): HWND; {返回所創建的窗口的句柄} //dwStyle 窗口樣式參數可選值: WS_OVERLAPPED = 0; {重疊式窗口, 應帶標題欄和邊框} WS_POPUP = DWORD($80000000); {彈出式窗口, 不能與 WS_CHILD 一起使用} WS_CHILD = $40000000; {子窗口, 不能與 WS_POPUP 一起使用} WS_MINIMIZE = $20000000; {最小化窗口} WS_VISIBLE = $10000000; {初始時可見} WS_DISABLED = $8000000; {禁止輸入} WS_CLIPSIBLINGS = $4000000; {裁剪子窗口, 也就是子窗口重繪不影響重疊的其他子窗口, 應與 WS_CHILD 一起使用} WS_CLIPCHILDREN = $2000000; {在父窗口中繪圖時繞開子窗口區域, 創建父窗口是使用} WS_MAXIMIZE = $1000000; {最大化窗口} WS_CAPTION = $C00000; {有標題欄} WS_BORDER = $800000; {有細線邊框} WS_DLGFRAME = $400000; {對話框窗口} WS_VSCROLL = $200000; {有垂直滾動條} WS_HSCROLL = $100000; {有水平滾動條} WS_SYSMENU = $80000; {帶系統標題欄, 須同時指定 WS_CAPTION} WS_THICKFRAME = $40000; {帶寬邊框, 寬邊框用於改變窗口大小} WS_GROUP = $20000; {能用方向鍵轉移焦點} WS_TABSTOP = $10000; {能用 TAB 轉移焦點} WS_MINIMIZEBOX = $20000; {有最小化按鈕} WS_MAXIMIZEBOX = $10000; {有最大化按鈕} WS_TILED = WS_OVERLAPPED; WS_ICONIC = WS_MINIMIZE; WS_SIZEBOX = WS_THICKFRAME; WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED or WS_CAPTION or WS_SYSMENU or WS_THICKFRAME or WS_MINIMIZEBOX or WS_MAXIMIZEBOX); WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW; WS_POPUPWINDOW = (WS_POPUP or WS_BORDER or WS_SYSMENU); WS_CHILDWINDOW = (WS_CHILD); //另外還有一些擴展樣式: WS_EX_DLGMODALFRAME = 1; {指定雙邊界窗口; 藉此指定 WS_CAPTION 創建標題欄} WS_EX_NOPARENTNOTIFY = 4; {在窗口創建或取消時不向父窗口發送 WM_PARENTNOTIFY 消息} WS_EX_TOPMOST = 8; {在所有非最頂層窗口的上面} WS_EX_ACCEPTFILES = $10; {可接受拖放文件} WS_EX_TRANSPARENT = $20; {透明樣式, 在同屬窗口已重畫時該窗口才可重畫} WS_EX_MDICHILD = $40; {創建一個 MDI 子窗口} WS_EX_TOOLWINDOW = $80; {工具窗口} WS_EX_WINDOWEDGE = $100; {帶立體的邊框} WS_EX_CLIENTEDGE = $200; {帶陰影的邊界} WS_EX_CONTEXTHELP = $400; {標題包含一個問號標志, 不能與 WS_MAXIMIZEBOX 和 WS_MINIMIZEBOX 同時使用} WS_EX_RIGHT = $1000; {窗口具有右對齊屬性} WS_EX_LEFT = 0; {窗口具有左對齊屬性, WS_EX_LEFT 是缺省設置} WS_EX_RTLREADING = $2000; {窗口文本從右到左} WS_EX_LTRREADING = 0; {窗口文本從左到右, WS_EX_LTRREADING 是缺省設置} WS_EX_LEFTSCROLLBAR = $4000; {垂直滾動條在左邊界, 只用於特殊語言環境} WS_EX_RIGHTSCROLLBAR = 0; {垂直滾動條在右邊界, WS_EX_RIGHTSCROLLBAR 是缺省設置} WS_EX_CONTROLPARENT = $10000; {允許用戶使用 Tab 鍵在窗口的子窗口間搜索} WS_EX_STATICEDGE = $20000; {窗口不可用時創建一個三維邊界} WS_EX_APPWINDOW = $40000; {當窗口可見時, 將一個頂層窗口放置到任務條上} WS_EX_OVERLAPPEDWINDOW = (WS_EX_WINDOWEDGE or WS_EX_CLIENTEDGE); {立體邊框並帶陰影} WS_EX_PALETTEWINDOW = (WS_EX_WINDOWEDGE or WS_EX_TOOLWINDOW or WS_EX_TOPMOST); {立體邊框、工具條窗口樣式、在頂層} WS_EX_LAYERED = $00080000; {分層或透明窗口, 該樣式可使用混合特效} WS_EX_NOINHERITLAYOUT = $00100000; {子窗口不繼承父窗口的布局} WS_EX_LAYOUTRTL = $00400000; {從右到左的布局} WS_EX_COMPOSITED = $02000000; {用雙緩沖從下到上繪制窗口的所有子孫} WS_EX_NOACTIVATE = $08000000; {處於頂層但不激活}
分析:
首先要用 CreateWindow 創建窗口, 才能用 ShowWindow 顯示窗口; 因為 ShowWindow 需要 CreateWindow 返回的句柄.
在 CreateWindow 的參數中, 位置與大小與窗口標題無須多說;
父窗口與菜單, 暫時都不需要, 先可置為 0;
程序實例的句柄, Delphi 已經為我們准備好了: HInstance; (參見原來的說明)
窗口樣式在前面的例子中我們使用了: WS_OVERLAPPEDWINDOW, 它代表幾種特點的組合, 表示了常規窗口.
CreateWindow 還有一個重要參數(第一個參數 lpClassName): 窗口類的名字.
Windows 要求我們要登記並注冊一個窗口類以后, 才可以用 CreateWindow 建立窗口!
另附控件樣式參考:
ES_LEFT = 0; {左對齊} ES_CENTER = 1; {居中} ES_RIGHT = 2; {右對齊} ES_MULTILINE = 4; {多行} ES_UPPERCASE = 8; {全大寫} ES_LOWERCASE = $10; {全小寫} ES_PASSWORD = $20; {掩碼字符} ES_AUTOVSCROLL = $40; {自動垂直滾動} ES_AUTOHSCROLL = $80; {自動水平滾動} ES_NOHIDESEL = $100; {始終顯示選中部分} ES_OEMCONVERT = $400; {允許 ANSI 和 OEM 互相轉換} ES_READONLY = $800; {只讀} ES_WANTRETURN = $1000; {可接受回車換行} ES_NUMBER = $2000; {只接受數字輸入}