【ステップ2−1 プロジェクトの新規作成】 | 解説 |
![]() |
左の図1のようにして、 「ファイル」メニューから新規作成を選ぶ。 すると下の図2のようなウインドウが現れる はずだ。 |
図1 新規作成。 |
【ステップ2−2 プロジェクトの種類を選択】 | 解説 |
![]() |
このウインドウで、 "Win32 Application"を選択する。 プロジェクト名はとりあえず、 mission1 としておこう。 確認できたら、 「OK」ボタンをクリック。 |
図2 プロジェクト種類の指定。 |
【ステップ2−3 自動生成するアプリケーションのタイプを選択】 | 解説 |
![]() |
ここで、VisualC++ に用意してもらうアプリケーションの タイプを選択する。 どれを選んでも大きな差は無いが、 「空のプロジェクト」より簡単で、 「標準的なHelloWorld!」アプリケーションより単純な 「単純なWin32 アプリケーション」を選んでおく。 |
図3 アプリケーションのタイプの指定。 |
【ステップ2−4 最終確認】 | 解説 |
![]() |
これから生成されるアプリケーションについての 解説がなされるが、ここでする事は特に無い。 これから生成されるアプリケーションは、 説明どおり、起動すると、直後に終了するというだけの アプリケーションである。 つまるところ、 それ以外の部分は自分で作れ!という事である。 とりあえず OK ボタンを押しておこう。 |
図4 データベースの設定。 |
【ステップ3−1 ソースファイルの表示@】 | 解説 |
![]() |
VisualC++の画面の中に、左のような部分があると思う。 この部分をワークスペースというが、ここから作業を開始する。 まず、下@の部分(FileViewタブ)をクリックする。 そうすると、左のようなリスト形式の表示となる。 次に、Amission1 ファイルの左側の + マークをクリック。 次に、BSource Files の左側の + マークをクリック。 最後にその中のmission1.cpp をダブルクリックしてください。 |
図4 ワークスペース。 |
【ステップ3−2 ソースファイルの表示A】 | 解説 |
![]() |
すると、左のようなプログラムが表示される。 WinMain という関数は、ANSI C でいう所のmain 関数 にあたるのだが、なるほどこれは何もしていない。 プログラム全体をまるごと、リスト2の様に書き換える。 |
リスト1 変更前。 |
【リスト2 変更後】
#include "stdafx.h" LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = (WNDPROC)WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_APPLICATION)); wcex.hCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = NULL; wcex.lpszClassName = "mission1"; wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION); RegisterClassEx(&wcex); HWND hWnd; hWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,wcex.lpszClassName,"Mission1", WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX, CW_USEDEFAULT,0,640,480,NULL,NULL,hInstance,NULL); if( !hWnd ) return FALSE; RECT bounds,client; GetWindowRect(hWnd,&bounds); GetClientRect(hWnd,&client); MoveWindow(hWnd,bounds.left,bounds.top, 640 * 2 - client.right, 480 * 2 - client.bottom, false ); ShowWindow( hWnd, nCmdShow ); UpdateWindow( hWnd ); MSG msg; while(true){ if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE)){ if(msg.message == WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); }else{ } } return 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; }
これは解説が必要だろう。解説は、こちら