[[StartPage]]

* Windows Program の骨子 [#a12d9a67]
まず、非常に簡単な Window program を作ってみよう。
以下のファイルを myapp01.cpp として保存するものとする。

 #include <windows.h>
 #include <tchar.h>
 
 #define MY_WINCLASS _T("MyAppWin")
 #define MY_APPTITLE _T("My Application")
 
 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
 int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
 int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
 	LPSTR lpCmdLine, int nCmdShow)
 {
 	// Register the Window Class
 	if(hPrevInstance == 0)
 	{
 		WNDCLASSEX wcex;
 		wcex.cbSize = sizeof(WNDCLASSEX);
 		wcex.style = CS_HREDRAW | CS_VREDRAW;
 		wcex.lpfnWndProc = WndProc;
 		wcex.cbClsExtra = 0;
 		wcex.cbWndExtra = 0;
 		wcex.hInstance = hInstance;
 		wcex.hIcon = LoadIcon(0, IDI_APPLICATION);
 		wcex.hCursor = LoadCursor(0, IDC_ARROW);
 		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
 		wcex.lpszMenuName = 0;
 		wcex.lpszClassName = MY_WINCLASS;
 		wcex.hIconSm = LoadIcon(0, IDI_APPLICATION);
 		RegisterClassEx(&wcex);
 	}
 	
 	// Create Window
 	HWND hWnd = CreateWindow(MY_WINCLASS, MY_APPTITLE, WS_OVERLAPPEDWINDOW,
 		CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 0, 0, hInstance, 0);
 	if(!hWnd)
 		return 0;
 	ShowWindow(hWnd, nCmdShow);
 	UpdateWindow(hWnd);
 	
 	// Message Loop
 	MSG msg;
 	while(GetMessage(&msg, 0, 0, 0))
 	{
 		TranslateMessage(&msg);
 		DispatchMessage(&msg);
 	}
 	return (int)msg.wParam;
 }
 
 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 {
 	switch(message)
 	{
 	case WM_DESTROY:
 		PostQuitMessage(0);
 		break;
 	default:
 		return DefWindowProc(hWnd, message, wParam, lParam);
 	}
 	return 0;
 }

これを MinGW でコンパイルしてリンクするには、
 g++ -mwindows myapp01.cpp

とすればよい。Windows の場合は、これで a.exe ができる。これを実行してみると、
#ref("myapp.png");
のような Window が開く。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS