カウントの文字列を変更したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
にーます

カウントの文字列を変更したい

#1

投稿記事 by にーます » 11年前

文字列を入力したりボタンによるカウントアップ・ダウンのプログラムをプログラムの勉強として作っております。
そこでボタンを押す処理でカウントアップ・ダウンが上手く機能してくれません。
エラーなども出てない為どの処理に不都合が生じているか教えてください。
wとtの変数をボタンにより変動させてその数字を表示したいと考えて設計しました。

コード:

// ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd,
						 UINT message,
						 WPARAM wParam,
						 LPARAM lParam)
{
	static HWND hWndEdit1;
	static HWND hWndEdit2;
	static HWND hWndEdit3;
	static HWND hWndEdit4;
	static HWND hWndBtn1;
	static HWND hWndBtn2;
	static HWND hWndBtn3;
	static HWND hWndBtn4;
	static HWND hWndBtn5;
	HDC hDC;					// デバイスコンテキストのハンドル
	PAINTSTRUCT ps;				// PAINTSTRUCT構造体

	int t = 0;					// 時間カウンター
	int w = 0;					// 人数カウンター
	static TCHAR sBuff[999];			// 文字列制御
	static TCHAR hBuff[999];
	static TCHAR wBuff[999];
	static TCHAR tBuff[999];



	// メッセージの種類に応じて処理を分岐します。
	switch (message)
	{
	case WM_CREATE:
		// ウィンドウが作成されたときの処理

		hWndEdit1 = CreateWindow("EDIT",
			"",
			WS_CHILD | WS_VISIBLE | WS_BORDER | ES_CENTER,
			70,
			5,
			200,
			25,
			hWnd,
			(HMENU)EDIT1,
			(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
			NULL);

		hWndEdit2 = CreateWindow("EDIT",
			"",
			WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_MULTILINE,
			70,
			35,
			500,
			150,
			hWnd,
			(HMENU)EDIT2,
			(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
			NULL);
		hWndEdit3 = CreateWindow("EDIT",
			"",
			WS_CHILD | WS_VISIBLE | WS_BORDER | ES_CENTER,
			70,
			190,
			250,
			25,
			hWnd,
			(HMENU)EDIT3,
			(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
			NULL);
		hWndEdit4 = CreateWindow("EDIT",
			"",
			WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_MULTILINE,
			70,
			245,
			500,
			180,
			hWnd,
			(HMENU)EDIT4,
			(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
			NULL);
		hWndBtn1 = CreateWindow("BUTTON",
			"+",
			WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			410,
			8,
			15,
			20,
			hWnd,
			(HMENU)BTN1,
			(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
			NULL);
		hWndBtn2 = CreateWindow("BUTTON",
			"-",
			WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			430,
			8,
			15,
			20,
			hWnd,
			(HMENU)BTN2,
			(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
			NULL);
		hWndBtn3 = CreateWindow("BUTTON",
			"凸終了",
			WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			330,
			190,
			60,
			25,
			hWnd,
			(HMENU)BTN3,
			(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
			NULL);
		hWndBtn4 = CreateWindow("BUTTON",
			"+",
			WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			130,
			220,
			15,
			20,
			hWnd,
			(HMENU)BTN4,
			(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
			NULL);
		hWndBtn5 = CreateWindow("BUTTON",
			"-",
			WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			150,
			220,
			15,
			20,
			hWnd,
			(HMENU)BTN5,
			(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
			NULL);
		return 0;
		case WM_PAINT:
			// クライアント領域の再描画処理
			hDC = BeginPaint(hWnd, &ps);
			TextOut(hDC, 5, 8, "SkypeID", 7);
			TextOut(hDC, 280, 8, "凸時間", 6);
			wsprintf(tBuff, "%d分位", t);
			TextOut(hDC, 335, 8, tBuff, lstrlen(tBuff));
			TextOut(hDC, 5, 38, "テーマ", 6);
			TextOut(hDC, 5, 195, "凸者", 4);
			TextOut(hDC, 5, 220, "待ち", 4);
			wsprintf(wBuff, "%d人", w);
			TextOut(hDC, 70, 220, wBuff, lstrlen(wBuff));
			TextOut(hDC, 5, 245, "過去凸者", 8);
			EndPaint(hWnd, &ps);
			return 0;
		case WM_COMMAND:
			// ボタンがクリックされた時の処理

			if (LOWORD(wParam) == BTN1)
			{
				t = t + 5;
			}

			if (LOWORD(wParam) == BTN2)
			{
				if (t > 0)
				{
					t = t - 5;
				}
			}


			if (LOWORD(wParam) == BTN3)
			{
				GetWindowText(hWndEdit3, sBuff, 999);
				GetWindowText(hWndEdit4, hBuff, 999);
				lstrcat(hBuff, sBuff);
				lstrcat(hBuff, "、");
				SetWindowText(hWndEdit4, hBuff);
				SetWindowText(hWndEdit3, "");
				if (w > 0)
				{
					w--;
				}
			}

			if (LOWORD(wParam) == BTN4)
			{
				w++;
			}

			if (LOWORD(wParam) == BTN5)
			{
				if (w > 0)
				{
					w--;
				}
			}

			return 0;

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: カウントの文字列を変更したい

#2

投稿記事 by usao » 11年前

WM_COMMAND時の各ボタン押下判定用のifの中(例えば155行目)に処理が来てるかどうかを確認してください.

もしそこがちゃんと走っているようならば,単にボタン押下後に再描画がされてないとかいう話かもしれません.

にーます

Re: カウントの文字列を変更したい

#3

投稿記事 by にーます » 11年前

usao さんが書きました:WM_COMMAND時の各ボタン押下判定用のifの中(例えば155行目)に処理が来てるかどうかを確認してください.

もしそこがちゃんと走っているようならば,単にボタン押下後に再描画がされてないとかいう話かもしれません.
比類なきプログラマーさん回答ありがとうございます。

ソースをしっかりと見直してみましたらご指摘通りInvalidateRect関数が抜けていたので再描画がされていませんでした。

再描画関数を入れてみたところちゃんとカウントの動く処理ができていました。

ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る