Win32プログラミングしてみよう(2)
前回やったのはメッセージボックス表示させるだけWindowsプログラム。Windowsなんだし、ウィンドウを作ってみた。
何もしないウィンドウを表示するだけのプログラム。
window.c
#include <windows.h> LRESULT CALLBACK WindowProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lParam){ switch(uMessage){ case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWindow, uMessage, wParam, lParam); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow) { int argc, i; WNDCLASS Class; HWND hWindow; LPMSG lpMessage; LPWSTR *argv, lpCmdText=L""; LPSTR ClassName="MainClass"; 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_WINLOGO); Class.hCursor = LoadCursor(NULL, IDC_ARROW); Class.hbrBackground = (HBRUSH)(COLOR_WINDOWTEXT+1); Class.lpszMenuName = NULL; Class.lpszClassName = ClassName; RegisterClass(&Class); hWindow = CreateWindow(ClassName, "MainWindow", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); ShowWindow(hWindow, SW_SHOWDEFAULT); UpdateWindow(hWindow); while(GetMessageW(lpMessage, NULL, 0, 0)){ TranslateMessage(lpMessage); DispatchMessage(lpMessage); } return 0; }
うーん。コード量が一気にうげー。
cl window.c user32.lib shell32.lib
でコンパイル。いいかげんIDEからやった方が楽かなあ。でもまだこの段階だったら、一々「プロジェクトの新規作成、あっちクリックこっちクリックほげほげ」なんてやるよりテキストエディタで適当に書いて、cl.exeから適当にコンパイルしてた方が楽な気がする。IDEとかまともに使ったことないからよくわからないけど。