作ってみました。
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