コントロール

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

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

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進数の間の変換ができたということになります。


[前] [目次]