ボタンを使って、アプリケーションを作ります。
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進数の間の変換ができたということになります。