「とりあえず一般的なウインドウを作ってみたいんですけど。」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
#誰かかいてくれるとうれしいな。
ABでウインドウを表示する方法にも幾つかあって、定番のRADを使う方法が一般的だと思う。
RADを使うと、裏で、ウインドウを作ったり、メニューやいろんなコントロールを付けてくれる。
これを今回は手書きでやってみよう。
まずはプログラムの提示。
'ウインドウクラスの作成
Const classname = "AB-WINDOWCLASS"
Main()
ExitProcess(0)
Sub Main()
Dim wc As WNDCLASSEX
Dim hwnd As HWND
Dim msg As MSG
'ウインドウクラスの設定
With wc
.cbSize = SizeOf(WNDCLASSEX)
.style=CS_HREDRAW or CS_VREDRAW
.lpfnWndProc = AddressOf(wndproc)
.hInstance=GetModuleHandle(0)
.hIcon=LoadIcon(NULL,MAKEINTRESOURCE(IDI_APPLICATION))
.hIconSm=LoadIcon(NULL,MAKEINTRESOURCE(IDI_WINLOGO))
.hCursor=LoadCursor(NULL,MAKEINTRESOURCE(IDC_ARROW))
.lpszClassName=classname
.hbrBackground=GetStockObject(WHITE_BRUSH)
End With
RegisterClassEx(wc)
'ウインドウを作る
hwnd = CreateWindowEx(0, classname ,"平井公彦プロジェクト",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT ,CW_USEDEFAULT ,CW_USEDEFAULT ,CW_USEDEFAULT ,
0,0,GetModuleHandle(0),NULL)
If hwnd = 0 Then Exit Sub
ShowWindow(hwnd, SW_SHOW)
UpdateWindow(hwnd)
'メッセージループ
While GetMessage(msg,0,0,0) > 0
TranslateMessage( msg)
DispatchMessage(msg)
Wend
End Sub
'ウインドウプロシジャー
Function wndproc(hwnd As HWND, msg As DWord, wp As Dword, lp As DWord) As DWord
Select Case msg
Case WM_DESTROY
PostQuitMessage(0)
Case Else
wndproc = DefWindowProc(hwnd,msg,wp,lp)
Exit Function
End Select
End Function
↑このプログラムはただ、ウインドウを表示するだけのショボイプログラムだ。
が、こいつをベースにして、ありとあらゆるウインドウズアプリケーションを作ることができる。
さて、解説をしよう。
はじめに行うのが&bold(){ウインドウクラス}の設定だ。
こいつは自分の作りたいウインドウの素性を明らかにするものだ。
RegisterClassEx関数を使ってそれをOSに教える。
WNDCLASSEX構造体が&bold(){面倒}。
次がウインドウの作成。
CreateWindowExで作ったウインドウをShowWindowで&bold(){表示}。
引数多すぎて&bold(){嫌になる}。
最後が&bold(){メッセージループ}だ。
これは作ったウインドウ上にきたイベントメッセージを、GetMessage関数で収集して、DispatchMessage関数でウインドウプロシージャに送る。
ここは&bold(){定形}。以上。