win32api dialogboxでの変数表示について

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

win32api dialogboxでの変数表示について

#1

投稿記事 by ttb » 8年前

環境 VS2013、C++ WIN#"API

WIN32APIのダイアログボックスに文字列を表示する際に表示する文字列中に変数を組み込みことは可能でしょうか?

コード:

IDD_D  DIALOGEX 100, 100, 300, 300
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "今日の気温"
FONT 5, "MS UI Gothic"
BEGIN
LTEXT           "ただ今の気温はx度です。", IDC_STATIC, 10, 10, 100, 10, 
END
このx度の部分をその日の温度を外部の温度計の値などから読み取りその都度その時の気温を表示することは可能でしょうか?
どなたか分かる方がいらっしゃいましたらご教授願えますでしょうか。
よろしくお願いします。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: win32api dialogboxでの変数表示について

#2

投稿記事 by みけCAT » 8年前

IDC_STATICではなく操作に使う固有のIDを設定し、WM_CREATEが来たときなど適切なタイミングでwsprintfなどで表示する文字列を作ってSetDlgItemTextで設定すればいいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ttb

Re: win32api dialogboxでの変数表示について

#3

投稿記事 by ttb » 8年前

早急なご回答ありがとうございます。

私はプログラミングの知識があまりないので具体的なコード等を載せて頂けると助かるのですが可能でしょうか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: win32api dialogboxでの変数表示について

#4

投稿記事 by みけCAT » 8年前

作ってみました。

main.c

コード:

#include <windows.h>
#include "resource.h"

/* 温度計の値を読み取る。気温の10倍の値を返す。 */
int getTemperature(void) {
	static const int candidates[] = {-35, -7, 0, 5, 253};
	int candidateNum = sizeof(candidates) / sizeof(*candidates);
	int randomSelect = (GetTickCount() / 100) % candidateNum;
	return candidates[randomSelect];
}

static LRESULT CALLBACK wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
	(void)wParam;
	(void)lParam;

	switch(msg) {
		case WM_INITDIALOG:
			{
				TCHAR result[64];
				int temperature = getTemperature();
				int isMinus = (temperature < 0);
				int tValue = isMinus ? -temperature : temperature;
				wsprintf(result, TEXT("ただ今の気温は%s%d.%1d度です。"),
					isMinus ? TEXT("-") : TEXT(""), tValue / 10, tValue % 10);
				SetDlgItemText(hWnd, ID_TEMPERATURE, result);
			}
			break;
		case WM_CLOSE:
			EndDialog(hWnd, 0);
			break;
		default:
			return 0;
	}
	return 1;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow) {
	  (void)hPrevInstance;
	  (void)lpCmdLine;
	  (void)nCmdShow;

	  return DialogBox(hInstance, TEXT("IDD_D"), NULL, (DLGPROC)wndProc);
}
resource.rc

コード:

#include <windows.h>
#include "resource.h"

IDD_D  DIALOGEX 100, 100, 300, 300
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "今日の気温"
FONT 5, "MS UI Gothic"
BEGIN
	LTEXT "ただ今の気温はx度です。", ID_TEMPERATURE, 10, 10, 100, 10
END
resource.h

コード:

#ifndef RESOURCE_H_GUARD_E26930A4_1E3C_41DF_95C5_A900A0EE186B
#define RESOURCE_H_GUARD_E26930A4_1E3C_41DF_95C5_A900A0EE186B

#define ID_TEMPERATURE 10000

#endif
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ttb

Re: win32api dialogboxでの変数表示について

#5

投稿記事 by ttb » 8年前

有難うございます。自分でコード打って試してみます。
本当にありがとうございました。

返信

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