ページ 1 / 1
win32api dialogboxでの変数表示について
Posted: 2017年6月13日(火) 22:06
by ttb
環境 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度の部分をその日の温度を外部の温度計の値などから読み取りその都度その時の気温を表示することは可能でしょうか?
どなたか分かる方がいらっしゃいましたらご教授願えますでしょうか。
よろしくお願いします。
Re: win32api dialogboxでの変数表示について
Posted: 2017年6月14日(水) 00:05
by みけCAT
IDC_STATICではなく操作に使う固有のIDを設定し、WM_CREATEが来たときなど適切なタイミングでwsprintfなどで表示する文字列を作ってSetDlgItemTextで設定すればいいと思います。
Re: win32api dialogboxでの変数表示について
Posted: 2017年6月14日(水) 14:17
by ttb
早急なご回答ありがとうございます。
私はプログラミングの知識があまりないので具体的なコード等を載せて頂けると助かるのですが可能でしょうか?
Re: win32api dialogboxでの変数表示について
Posted: 2017年6月14日(水) 22:34
by みけCAT
作ってみました。
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
Re: win32api dialogboxでの変数表示について
Posted: 2017年6月15日(木) 09:32
by ttb
有難うございます。自分でコード打って試してみます。
本当にありがとうございました。