今回はお馴染みの「ボタンウィンドウ」を学習します。作るプログラムは、下のようにボタンが表示されていて、ボタンをクリックするとメッセージボックスが出るというものです。
↓クリックすると |
↓そして |
ではプログラムを見てみましょう。 背景が黄色の部分が新しい部分です。
'lesson2-1-3 ' 変数の宣言 Dim lpWcx As WNDCLASSEX Dim hBrush As HBRUSH Dim hMainWnd As HWNDDim hButtonWnd As HWNDDim lpMsg As MSG' ブラシの作成 hBrush = CreateSolidBrush(GetSysColor(COLOR_3DFACE)) ' 変数lpWcxの初期化 FillMemory(VarPtr(lpWcx), Len(lpWcx), 0) ' クラスデータの設定 With lpWcx .lpszClassName = "NORMAL" .lpfnWndProc = AddressOf(MainWndProc) .hIcon = LoadIcon(NULL,IDI_APPLICATION) .hIconSm = LoadIcon(NULL,IDI_WINLOGO) .hCursor = LoadCursor(NULL,IDC_ARROW) .cbSize = SizeOf(WNDCLASSEX) .style = CS_DBLCLKS or CS_HREDRAW or CS_VREDRAW .hInstance = GetModuleHandle(0) .hbrBackground = hBrush End With' ウィンドウクラスの登録 RegisterClassEx(lpWcx) ' ウィンドウの作成 hMainWnd =_ CreateWindowEx( NULL, "NORMAL", "スタティック(ラベル)ウィンドウ", WS_OVERLAPPEDWINDOW or WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 300, 200, NULL, NULL, GetModuleHandle(0), NULL )hButtonWnd =_ CreateWindowEx( NULL, "BUTTON", "押しちゃダメ", WS_CHILD or WS_VISIBLE, 30, 30, 230, 100, hMainWnd, 0, GetModuleHandle(0), NULL )' メッセージループ While GetMessage(lpMsg, 0, 0, 0) > 0 TranslateMessage(lpMsg) DispatchMessage(lpMsg) Wend ' 終了 DeleteObject(hBrush) End' コールバック関数 Function MainWndProc(hWnd As HWND, wMsg As DWord, wParam As DWord, lParam As DWord) As Long Select Case wMsgCase WM_COMMAND If lParam = hButtonWnd Then MessageBox(NULL, "押しちゃダメって書いたのに……", "", MB_OK) SendMessage(hButtonWnd, WM_SETTEXT, 0, "もう絶対押せません。") EnableWindow(hButtonWnd, FALSE) End IfCase WM_CLOSE DestroyWindow(hWnd) Case WM_DESTROY PostQuitMessage(0) Case Else MainWndProc = DefWindowProc(hWnd, wMsg, wParam, lParam) Exit Function End Select MainWndProc = 0 End Function