Win32プログラミングをしてみよう(3)
自前作成ウィンドウでハローワールド。こん程度で精一杯胸一杯。ごちそうさまでした。しばらくいいや。
無意味にNT系でしか動かないコードになっています。
#include <windows.h> LRESULT CALLBACK WindowProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lParam){ HDC hDevice; PAINTSTRUCT PaintStruct; switch(uMessage){ case WM_DESTROY: PostQuitMessage(0); break; case WM_CREATE: MessageBoxW(NULL,L"Hello, World!",L"ほげほげ",MB_OK); break; case WM_PAINT: hDevice = BeginPaint(hWindow, &PaintStruct); TextOutW(hDevice, 0, 0, L"Hello, World!", wcslen(L"Hello, World!")); EndPaint(hWindow, &PaintStruct); break; default: return DefWindowProc(hWindow, uMessage, wParam, lParam); } return 0L; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow) { int argc, i; WNDCLASS Class; HWND hWindow; MSG Message; LPWSTR *argv, lpCmdText=L""; argv = CommandLineToArgvW(GetCommandLineW(), &argc); for(i=0;i<argc;++i){ wcscat(lpCmdText, argv[i]); wcscat(lpCmdText, L"\n"); } Class.style = 0; Class.lpfnWndProc = WindowProc; Class.cbClsExtra = 0; Class.cbWndExtra = 0; Class.hInstance = hInstance; Class.hIcon = LoadIcon(NULL, IDI_APPLICATION); Class.hCursor = LoadCursor(NULL, IDC_ARROW); Class.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); Class.lpszMenuName = NULL; Class.lpszClassName = "HogeClass"; RegisterClass(&Class); hWindow = CreateWindowW(L"HogeClass", L"HogeWindow", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); ShowWindow(hWindow, SW_SHOWDEFAULT); UpdateWindow(hWindow); while(GetMessageW(&Message, NULL, 0, 0)){ TranslateMessage(&Message); DispatchMessage(&Message); } return 0; }
ちょっとなるほど、な気分になってきた。WNDCLASSのMenuNameとかClassNameがワイド文字にできないのはどうにかできないんだろうか。