Windowsプログラミング[2]-フォーム生成を学習するプロセス2
6279 ワード
かつて1つの最も簡単なWindowsプログラムをしたことがあります:1つのDelphiコンソールプログラムを新設して、以下のコードを貼って、実行することができます.
同様に、ShellAPIユニットの下にあるShellAboutを使用してウィンドウを呼び出すこともできます.
Forms.TFOrmクラスを使うという考えを一旦捨てて、すべてを最初から、つまりWindows APIから始めましょう.
考えられるコードは次のとおりです.
ウィンドウを表示するには、まずCreateWindowでウィンドウを作成します.ShowWindowにはCreateWindowが返すハンドルが必要だからです.
CreateWindowのパラメータでは、位置とサイズとウィンドウのタイトルは言うまでもありません.
親ウィンドウとメニューは、しばらくは必要ありません.まず0に設定できます.
プログラムの例のハンドル、Delphiはすでに私たちのために準備しました:HInstance;(
元の説明を参照 )
ウィンドウスタイルは前の例で使用しました:WS_OVERLPPEDWINDOWは、いくつかの特徴の組み合わせを代表し、通常のウィンドウを表している.
CreateWindowにはもう一つの重要なパラメータ(最初のパラメータlpClassName):ウィンドウクラスの名前があります.
Windowsでは、CreateWindowでウィンドウを作成するには、ウィンドウクラスを登録して登録する必要があります.
コントロールスタイルの参照を添付します.
program Project1;
uses Windows;
begin
MessageBox(0,PChar('Ok!'),PChar('Title'),0);
end.
コード分析:システム関数MessageBoxはメッセージウィンドウを生成することができる.この関数はWindowsユニットから来ているので、uses Windowsが必要です.同様に、ShellAPIユニットの下にあるShellAboutを使用してウィンドウを呼び出すこともできます.
program Project1;
uses ShellAPI;
begin
ShellAbout(0, ' Delphi ', 'Copyright: ', 0);
end.
しかし、これはすべてWindowsの固定モードと固定機能のウィンドウで、もし普通のウィンドウを作成したら?Forms.TFOrmクラスを使うという考えを一旦捨てて、すべてを最初から、つまりWindows APIから始めましょう.
考えられるコードは次のとおりです.
program Project1;
begin
// CreateWindow
// ShowWindow
end.
ShowWindow関数を認識する:
ShowWindow(
hWnd: HWND; { }
nCmdShow: Integer { , }
): BOOL;
//uCmdShow :
SW_HIDE = 0; { , }
SW_SHOWNORMAL = 1; { , }
SW_NORMAL = 1; { SW_SHOWNORMAL}
SW_SHOWMINIMIZED = 2; { , }
SW_SHOWMAXIMIZED = 3; { , }
SW_MAXIMIZE = 3; { SW_SHOWMAXIMIZED}
SW_SHOWNOACTIVATE = 4; { , }
SW_SHOW = 5; { SW_SHOWNORMAL}
SW_MINIMIZE = 6; { , }
SW_SHOWMINNOACTIVE = 7; { SW_MINIMIZE}
SW_SHOWNA = 8; { SW_SHOWNOACTIVATE}
SW_RESTORE = 9; { SW_SHOWNORMAL}
SW_SHOWDEFAULT = 10; { SW_SHOWNORMAL}
SW_MAX = 10; { SW_SHOWNORMAL}
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にはCreateWindowが返すハンドルが必要だからです.
CreateWindowのパラメータでは、位置とサイズとウィンドウのタイトルは言うまでもありません.
親ウィンドウとメニューは、しばらくは必要ありません.まず0に設定できます.
プログラムの例のハンドル、Delphiはすでに私たちのために準備しました:HInstance;(
元の説明を参照 )
ウィンドウスタイルは前の例で使用しました:WS_OVERLPPEDWINDOWは、いくつかの特徴の組み合わせを代表し、通常のウィンドウを表している.
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; { }