コントロール

ボタンを使って、アプリケーションを作ります。

2進数を16進数へ変換するアプリケーションを作る(BinaryTo16)

//
//	MyApp.h
//

#include	<stdlib.h>
#include	<math.h>
#include	<MyControl.h>
#include	<MyMessageBox.h>
#include	<MyFont.h>


enum{
	ID_BUTTON1 = 1001,
	ID_BUTTON8 = 1008,
	ID_BUTTON9,
	ID_BUTTON10,
	ID_BUTTON11,
};

class MyApp : public MyMainWnd{
public:
	
	void setMyWnd(MyWndClass& wc, MyCreateStruct& cs){
		wc.Menu(L"MyMenu");
		cs.Style(WS_OVERLAPPED | WS_SYSMENU);
		cs.Size(265, 182);
		cs.SysMenu(1, 0);
	}
	// WM_CREATE
	void wmCreate(){
		MyButton btn;
		MyFont font;
		HFONT hFont;
		int x;

		font.Bold(TRUE);
		font.Size(20);
		hFont = font.Create();

		btn.Text(L"0");
		btn.Size(29, 30);
		
		// 2進数用ボタン
		x = 10 + 8 * 30;
		for(int i = 0; i < 8; i++){
			x -= 30;
			btn.Location(x, 10);
			btn.ID(ID_BUTTON1 + i);
			CreateWindowEx(btn, hFont);
			//btn.Create(hWnd);
		}
		// 16進数用ボタン
		x = 10 + 5 * 30;
		for(int i = 0; i < 2; i++){
			x -= 30;
			btn.Location(x, 50);
			btn.ID(ID_BUTTON9 + i);
			CreateWindowEx(btn, hFont);
		}
		// 10進数用ボタン
		x = 10 + 3 * 30;
		btn.Size(60, 30);
		btn.Location(x, 90);
		btn.ID(ID_BUTTON11);
		CreateWindowEx(btn, hFont);
	}
	// 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 >= ID_BUTTON1) && (wmId <= ID_BUTTON8)){
			int n = wmId - ID_BUTTON1;
			bd ^= mask[n];
		}
		if((wmId >= ID_BUTTON9) && (wmId <= ID_BUTTON10)){
			int n = wmId - ID_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 == ID_BUTTON11){
			if(bd >= 255){
				bd = 0;
			}else{
				bd++;
			}
		}

		// ボタンに数字を表示
		btn.SetID(ID_BUTTON11);
		wsprintf(txt, L"%d", bd);
		btn.SetText(txt);

		ans = bd;
		for(int i = ID_BUTTON9; i <= ID_BUTTON10; i++){
			btn.SetID(i);
			wsprintf(txt, L"%X", ans % 16);
			btn.SetText(txt);
			ans /= 16;
		}

		ans = bd;
		for(int i = ID_BUTTON1; i <= ID_BUTTON8; i++){
			btn.SetID(i);
			wsprintf(txt, L"%d", ans % 2);
			btn.SetText(txt);
			ans /= 2;
		}
	}	
};

実行画面です。

解説

タイトルはよくないです。 実は、2進数、16進数、10進数間の変換ができるアプリケーションです。 では、どんな動作をするか説明します。

ボタンは、上から2進数、16進数、10進数を表します。 どのボタンを押しても構いません。 では、ボタンを押してみます。

16進数の赤丸を付けたボタンを押しました。 0が1に変わります。 すると、他のボタンの数字が変わります。 もう1度同じボタンを押してみます。

どんなアプリかおわかりになれたでしょうか。 赤丸を付けたボタンは、"0" から "F" へと変わり、次は "0" に戻ります。 これで、2進数、16進数、10進数の間の変換ができたということになります。


[前] [目次]