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関数でウインドウプロシージャに送る。
ここは定形。以上。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2010年01月20日 18:30