ボタンを使って、アプリケーションを作ります。
MyApp.h
// // MyApp.h // class MyApp : public MyMainWnd{ public: // WM_COMMAND void wmCommand(WPARAM wp){ int wmId = LOWORD(wp); static UINT bd = 0; MyButton btn; UINT mask[8] = {1, 2, 4, 8, 16, 32, 64, 128}; TCHAR txt[256]; int ans; // 数を決定する if((wmId >= IDC_BUTTON1) && (wmId <= IDC_BUTTON8)){ int n = wmId - IDC_BUTTON1; bd ^= mask[n]; } if((wmId >= IDC_BUTTON9) && (wmId <= IDC_BUTTON10)){ int n = wmId - IDC_BUTTON9; ans = bd; ans /= pow(16.0, n); ans %= 16; if(ans >= 15){ ans = -ans; }else{ ans = 1; } bd += ans * pow(16.0, n); } if(wmId == IDC_BUTTON11){ if(bd >= 255){ bd = 0; }else{ bd++; } } // ボタンに数字を表示 btn.SetID(IDC_BUTTON11); wsprintf(txt, L"%d", bd); btn.SetText(txt); ans = bd; for(int i = IDC_BUTTON9; i <= IDC_BUTTON10; i++){ btn.SetID(i); wsprintf(txt, L"%X", ans % 16); btn.SetText(txt); ans /= 16; } ans = bd; for(int i = IDC_BUTTON1; i <= IDC_BUTTON8; i++){ btn.SetID(i); wsprintf(txt, L"%d", ans % 2); btn.SetText(txt); ans /= 2; } } };
resource.h
#ifndef IDC_STATIC #define IDC_STATIC (-1) #endif #define IDC_BUTTON1 1000 #define IDC_BUTTON2 1001 #define IDC_BUTTON3 1002 #define IDC_BUTTON4 1003 #define IDC_BUTTON5 1004 #define IDC_BUTTON6 1005 #define IDC_BUTTON7 1006 #define IDC_BUTTON8 1007 #define IDC_BUTTON9 1008 #define IDC_BUTTON10 1009 #define IDC_BUTTON11 1010 #define IDC_APP_NAME 40000 #define IDM_EXIT 40000 #define IDM_ABOUT 40001 #define IDS_APP_TITLE 40001
Binary16.rc
#include <windows.h> #include <commctrl.h> #include <richedit.h> #include "resource.h" // // Menu resources // LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN MyMenu MENU BEGIN POPUP "ファイル(&F)" BEGIN MENUITEM "終了(&X)", IDM_EXIT END POPUP "ヘルプ(&H)" BEGIN MENUITEM "バージョン情報(&A)", IDM_ABOUT END END // // Dialog resources // LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN MyAboutBox DIALOG 0, 0, 186, 95 STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU CAPTION "バージョン情報" FONT 8, "Ms Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 129, 7, 50, 18 LTEXT "Binary16 Ver 1", IDC_STATIC, 39, 43, 114, 8, SS_LEFT | SS_NOPREFIX LTEXT "Copyright (C) 2010", IDC_STATIC, 39, 55, 114, 8, SS_LEFT END LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN MyDlgMain DIALOG 0, 0, 177, 91 STYLE DS_3DLOOK | DS_CENTER | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_GROUP | WS_TABSTOP | WS_THICKFRAME | WS_SYSMENU CAPTION "Binary16" MENU MyMenu FONT 9, "MS UI Gothic" BEGIN PUSHBUTTON "0", IDC_BUTTON8, 10, 10, 19, 21 PUSHBUTTON "0", IDC_BUTTON7, 30, 10, 19, 21 PUSHBUTTON "0", IDC_BUTTON6, 50, 10, 19, 21 PUSHBUTTON "0", IDC_BUTTON5, 70, 10, 19, 21 PUSHBUTTON "0", IDC_BUTTON4, 90, 10, 19, 21 PUSHBUTTON "0", IDC_BUTTON3, 110, 10, 19, 21 PUSHBUTTON "0", IDC_BUTTON2, 130, 10, 19, 21 PUSHBUTTON "0", IDC_BUTTON1, 150, 10, 19, 21 PUSHBUTTON "0", IDC_BUTTON10, 70, 35, 19, 21 PUSHBUTTON "0", IDC_BUTTON9, 90, 35, 19, 21 PUSHBUTTON "0", IDC_BUTTON11, 70, 60, 40, 21 END
実行画面です。
タイトルはよくないです。 実は、2進数、16進数、10進数間の変換ができるアプリケーションです。 では、どんな動作をするか説明します。
ボタンは、上から2進数、16進数、10進数を表します。 どのボタンを押しても構いません。 では、ボタンを押してみます。
16進数の赤丸を付けたボタンを押しました。 0が1に変わります。 すると、他のボタンの数字が変わります。 もう1度同じボタンを押してみます。
どんなアプリかおわかりになれたでしょうか。 赤丸を付けたボタンは、"0" から "F" へと変わり、次は "0" に戻ります。 これで、2進数、16進数、10進数の間の変換ができたということになります。