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