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
↑このプログラムはただ、ウインドウを表示するだけのショボイプログラムだ。
が、こいつをベースにして、ありとあらゆるウインドウズアプリケーションを作ることができる。
さて、解説をしよう。
はじめに行うのがウインドウクラスの設定だ。
こいつは自分の作りたいウインドウの素性を明らかにするものだ。
RegisterClassEx関数を使ってそれをOSに教える。
WNDCLASSEX構造体が面倒。
次がウインドウの作成。
CreateWindowExで作ったウインドウをShowWindowで表示。
引数多すぎて嫌になる。
最後がメッセージループだ。
これは作ったウインドウ上にきたイベントメッセージを、GetMessage関数で収集して、DispatchMessage関数でウインドウプロシージャに送る。
ここは定形。以上。
最終更新:2010年01月20日 18:30