以下是一个简单的实现 Windows 应用程序的代码,可以根据用户输入的成绩计算对应的等级,并给出相应的提示。同时,程序还包含了对无效成绩的处理和退出功能。
```c++
#include <Windows.h>
#include <string>
// 定义等级和分数的对应关系
const std::string GRADE_TABLE[] = { "D", "C", "B", "A" };
const int SCORE_TABLE[] = { 0, 60, 80, 90 };
// 窗口标题和控件 ID
const char* WINDOW_TITLE = "Grade Calculator";
const int EDIT_CONTROL_ID = 1;
const int BUTTON_CONTROL_ID = 2;
// 窗口句柄和控件句柄
HWND g_hWnd;
HWND g_hEdit;
HWND g_hButton;
// 处理按钮点击事件
void OnButtonClick()
{
// 获取用户输入的成绩
char buffer[256];
GetWindowTextA(g_hEdit, buffer, 256);
int score = atoi(buffer);
// 判断输入的成绩是否有效
if (score < 0 || score > 100) {
MessageBoxA(g_hWnd, "Invalid score!", "Error", MB_OK);
return;
}
// 计算对应的等级
int grade = 0;
for (int i = 0; i < 4; i++) {
if (score >= SCORE_TABLE[i]) {
grade = i;
} else {
break;
}
}
// 显示对应的等级
std::string message = "Grade: " + GRADE_TABLE[grade];
MessageBoxA(g_hWnd, message.c_str(), "Result", MB_OK);
}
// 处理窗口消息
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg) {
case WM_CREATE:
// 创建编辑框控件
g_hEdit = CreateWindowA("EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,
20, 20, 200, 24, hWnd, (HMENU)EDIT_CONTROL_ID, NULL, NULL);
// 创建按钮控件
g_hButton = CreateWindowA("BUTTON", "Calculate", WS_CHILD | WS_VISIBLE,
20, 60, 100, 30, hWnd, (HMENU)BUTTON_CONTROL_ID, NULL, NULL);
break;
case WM_COMMAND:
// 处理按钮点击事件
if (LOWORD(wParam) == BUTTON_CONTROL_ID) {
OnButtonClick();
}
break;
case WM_DESTROY:
// 退出程序
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
return 0;
}
// 应用程序入口函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// 注册窗口类
WNDCLASSA wc = { 0 };
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszClassName = "GradeCalculator";
RegisterClassA(&wc);
// 创建窗口
g_hWnd = CreateWindowA("GradeCalculator", WINDOW_TITLE, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 300, 150, NULL, NULL, hInstance, NULL);
// 显示窗口
ShowWindow(g_hWnd, nCmdShow);
UpdateWindow(g_hWnd);
// 消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
```
这个程序用到了 Win32 API 来创建窗口和控件,并处理用户输入和按钮点击事件。通过判断用户输入的成绩是否有效,计算对应的等级,并给出提示。如果输入的成绩无效,程序会弹出一个提示框告诉用户。程序还包含了退出功能,用户可以通过关闭窗口或者按下 Alt + F4 来退出程序。