// Sample.cpp : アプリケーション用のエントリ ポイントの定義 // #include "stdafx.h" #include "resource.h" #define MAX_LOADSTRING 100 // グローバル変数: HINSTANCE hInst; // 現在のインスタンス TCHAR szTitle[MAX_LOADSTRING]; // タイトル バー テキスト TCHAR szWindowClass[MAX_LOADSTRING]; // タイトル バー テキスト // このコード モジュールに含まれる関数の前宣言: ATOM MyRegisterClass( HINSTANCE hInstance ); BOOL InitInstance( HINSTANCE, int ); LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); LRESULT CALLBACK About( HWND, UINT, WPARAM, LPARAM ); // テスト用に追加されたコードのプロトタイプ void ProcTest0(long Arg1); void ProcDivMod(); void ProcMemory(); long ProcDummy(long Arg1); // ウィンメイン int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // TODO: この位置にコードを記述してください。 MSG msg; HACCEL hAccelTable; // グローバル ストリングを初期化します LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_SAMPLE, szWindowClass, MAX_LOADSTRING); MyRegisterClass( hInstance ); // アプリケーションの初期化を行います: if( !InitInstance( hInstance, nCmdShow ) ) { return FALSE; } hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_SAMPLE); // メイン メッセージ ループ: while( GetMessage(&msg, NULL, 0, 0) ) { if( !TranslateAccelerator (msg.hwnd, hAccelTable, &msg) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } } // テスト用に追加されたコード (void) ProcTest0(1000); return msg.wParam; } // // 関数: MyRegisterClass() // // 用途: ウィンドウ クラスの登録 // // コメント: // // この関数およびその使用はこのコードを Windows 95 で先に追加された // 'RegisterClassEx' 関数と Win32 システムの互換性を保持したい場合に // のみ必要となります。アプリケーションが、アプリケーションに関連付け // られたスモール アイコンを取得できるよう、この関数を呼び出すことは // 重要です。 // ATOM MyRegisterClass( HINSTANCE hInstance ) { 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(hInstance, (LPCTSTR)IDI_SAMPLE); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = (LPCSTR)IDC_SAMPLE; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); return RegisterClassEx( &wcex ); } // // 関数: InitInstance(HANDLE, int) // // 用途: インスタンス ハンドルの保存とメイン ウィンドウの作成 // // コメント: // // この関数では、インスタンス ハンドルをグローバル変数に保存し、プログラムの // メイン ウィンドウを作成し表示します。 // BOOL InitInstance( HINSTANCE hInstance, int nCmdShow ) { HWND hWnd; hInst = hInstance; // グローバル変数にインスタンス ハンドルを保存します hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if( !hWnd ) { return FALSE; } ShowWindow( hWnd, nCmdShow ); UpdateWindow( hWnd ); return TRUE; } // // 関数: WndProc(HWND, unsigned, WORD, LONG) // // 用途: メイン ウィンドウのメッセージを処理します。 // // WM_COMMAND - アプリケーション メニューの処理 // WM_PAINT - メイン ウィンドウの描画 // WM_DESTROY - 終了メッセージの通知とリターン // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; TCHAR szHello[MAX_LOADSTRING]; LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING); switch( message ) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // メニュー選択の解析: switch( wmId ) { case IDM_ABOUT: DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); break; case IDM_EXIT: DestroyWindow( hWnd ); break; default: return DefWindowProc( hWnd, message, wParam, lParam ); } break; case WM_PAINT: hdc = BeginPaint (hWnd, &ps); // TODO: この位置に描画用のコードを追加してください... RECT rt; GetClientRect( hWnd, &rt ); DrawText( hdc, szHello, strlen(szHello), &rt, DT_CENTER ); EndPaint( hWnd, &ps ); break; case WM_DESTROY: PostQuitMessage( 0 ); break; default: return DefWindowProc( hWnd, message, wParam, lParam ); } return 0; } // バージョン情報ボックス用メッセージ ハンドラ LRESULT CALLBACK About( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { switch( message ) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: if( LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL ) { EndDialog(hDlg, LOWORD(wParam)); return TRUE; } break; } return FALSE; } //////// // テスト用に追加されたコードの実体 void ProcTest0(long Arg1){ (void) ProcDivMod(); (void) ProcMemory(); (void) ProcDummy(0); } void ProcDivMod(){ char a,b; a=(char)ProcDummy(10); b=(char)ProcDummy(3); (void) ProcDummy(a/b); (void) ProcDummy(a%b); } void ProcMemory(){ long x,y; char a[100],b[100]; /* char *c;*/ x=ProcDummy(100); (void) memcpy(a,b,x); a[50]='A'; (void) memset(b,' ',x); y = memcmp(a,b,x); (void) ProcDummy(y); /* c = (char *)strchr(a,'a'); (void) ProcDummy((long)*c);*/ } // 計算式が最適化されないようにするためのダミー関数 long ProcDummy(long Arg1){ return (Arg1); }