CreateWindow 函數


認識 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; {只接受數字輸入}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM