举报

easyx代码求改进

0

在visaul c++里面运行,想要用鼠标操作点击对应按键位置,可以出现一个新的窗口。

但是这个代码运行后,无法用鼠标进行操作,点击后没有反应,也没有出现新窗口,求大佬修改

#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>

#define PI 3.14159265

void drawHospital() {
    // 绘制医院建筑轮廓
    // 墙体
    setfillcolor(LIGHTGRAY);
    solidrectangle(250, 120, 570, 530); // 主体建筑
    setfillcolor(DARKGRAY);
    solidrectangle(240, 100, 580, 130); // 顶部

    // 窗户
    setfillcolor(WHITE);
    solidrectangle(280, 240, 340, 300); // 左上窗户
    solidrectangle(480, 240, 540, 300); // 右上窗户
    solidrectangle(380, 240, 440, 300); // 中间窗户
    solidrectangle(280, 330, 340, 390); // 左中窗户
    solidrectangle(480, 330, 540, 390); // 右中窗户
    solidrectangle(380, 330, 440, 390); // 中间窗户

    // 门
    setfillcolor(WHITE);
    solidrectangle(360, 420, 460, 530); // 门框
    setfillcolor(LIGHTCYAN);
    solidrectangle(365, 425, 455, 530); // 主门
    setfillcolor(WHITE);
    solidrectangle(408, 425, 412, 530); // 门缝

    // 绘制医院十字标志
    setfillcolor(WHITE);
    solidrectangle(280, 150, 540, 210);

    setfillcolor(RED);
    // 水平线
    solidrectangle(385, 172, 435, 188);
    // 垂直线
    solidrectangle(402, 155, 418, 205);

    // 一棵树
    setfillcolor(BROWN);
    solidrectangle(210, 390, 230, 530); // 树干

    setfillcolor(LIGHTGREEN);
    solidcircle(220, 425, 48); // 树冠

    // 另一棵树
    setfillcolor(BROWN);
    solidrectangle(590, 390, 610, 530); // 树干

    setfillcolor(LIGHTGREEN);
    solidcircle(600, 425, 48); // 树冠

    // 文字
    settextcolor(BLACK);
    settextstyle(20, 0, _T("Arial"));
    outtextxy(380, 550, _T("医院"));

    getch(); // 按键关闭窗口
}

void showZHINAN() {
    cleardevice();
    settextstyle(16, 0, _T("宋体"));
    settextcolor(BLACK); // 设置文字颜色
    setbkcolor(WHITE);
    outtextxy(100, 550, _T("就医指南")); // 指定位置输出字符串
    getch();

}

void showQUHAO() {
    cleardevice();
    settextstyle(16, 0, _T("宋体"));
    settextcolor(BLACK); // 设置文字颜色
    setbkcolor(WHITE);
    outtextxy(100, 550, _T("签到取号")); // 指定位置输出字符串
    getch();
}

void showJIANYAN() {
    cleardevice();
    settextstyle(16, 0, _T("宋体"));
    settextcolor(BLACK); // 设置文字颜色
    setbkcolor(WHITE);
    outtextxy(100, 550, _T("检验查询")); // 指定位置输出字符串
    getch();
}

void showGUAHAO() {
    cleardevice();
    settextstyle(16, 0, _T("宋体"));
    settextcolor(BLACK); // 设置文字颜色
    setbkcolor(WHITE);
    outtextxy(100, 550, _T("预约挂号")); // 指定位置输出字符串
    getch();
}

void showJIAOFEI() {
    cleardevice();
    settextstyle(16, 0, _T("宋体"));
    settextcolor(BLACK); // 设置文字颜色
    setbkcolor(WHITE);
    outtextxy(100, 550, _T("医疗缴费")); // 指定位置输出字符串
    getch();
}

void showPINGZHENG() {
    cleardevice();
    settextstyle(16, 0, _T("宋体"));
    settextcolor(BLACK); // 设置文字颜色
    setbkcolor(WHITE);
    outtextxy(100, 550, _T("报销凭证")); // 指定位置输出字符串
    getch();
}

void showMENU() {
    RECT rStr0 = {310, 45, 510, 65}; // 中间
    RECT rStr1 = {60, 160, 220, 180}; // 左1
    RECT rStr2 = {60, 260, 220, 280}; // 左2
    RECT rStr3 = {60, 360, 220, 380}; // 左3
    RECT rStr4 = {600, 160, 760, 180}; // 右1
    RECT rStr5 = {600, 260, 760, 280}; // 右2
    RECT rStr6 = {600, 360, 760, 380}; // 右3

    char str0[] = "智慧医疗终端";
    char str1[] = "就医指南";
    char str2[] = "签到取号";
    char str3[] = "检验查询";
    char str4[] = "预约挂号";
    char str5[] = "医疗缴费";
    char str6[] = "报销凭证";

    initgraph(820, 630); // 初始化图像窗口
    setbkcolor(LIGHTCYAN); // 设置当前背景色
    cleardevice(); // 用当前设置的背景色清屏

    setfillcolor(LIGHTGRAY); // 设置按键的填充颜色
    solidroundrect(310, 35, 510, 75, 20, 20); // 中间
    setfillcolor(WHITE);
    solidroundrect(60, 150, 220, 190, 20, 20); // 左1
    solidroundrect(60, 250, 220, 290, 20, 20); // 左2
    solidroundrect(60, 350, 220, 390, 20, 20); // 左3
    solidroundrect(600, 150, 760, 190, 20, 20); // 右1
    solidroundrect(600, 250, 760, 290, 20, 20); // 右2
    solidroundrect(600, 350, 760, 390, 20, 20); // 右3

    // 太阳
    setfillcolor(YELLOW);
    fillcircle(5, 5, 55);

    // 草地
    setfillcolor(GREEN);
    solidrectangle(0, 500, 820, 630); // 简单草地

    settextcolor(BLACK); // 设置按键文字颜色
    setbkcolor(WHITE);
    settextstyle(20, 0, _T("宋体")); // 设置字体大小
    drawtext(str0, &rStr0, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    drawtext(str1, &rStr1, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    drawtext(str2, &rStr2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    drawtext(str3, &rStr3, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    drawtext(str4, &rStr4, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    drawtext(str5, &rStr5, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    drawtext(str6, &rStr6, DT_CENTER | DT_VCENTER | DT_SINGLELINE);

    drawHospital();
}

int main() {
    initgraph(820, 630); // 初始化图形窗口
    setbkcolor(LIGHTCYAN); // 设置背景色
    cleardevice(); // 清屏

    while (true) {
        showMENU();

        MOUSEMSG msg = GetMouseMsg(); // 获取鼠标消息
        if (msg.uMsg == WM_LBUTTONDOWN) { // 判断是否为左键点击
            int x = msg.x;
            int y = msg.y;

            // 判断点击的菜单选项
            if (x >= 60 && x <= 220) {
                if (y >= 150 && y <= 190) {
                    showZHINAN(); // 就医指南
                } else if (y >= 250 && y <= 290) {
                    showQUHAO(); // 签到取号
                } else if (y >= 350 && y <= 390) {
                    showJIANYAN(); // 检验查询
                }
            } else if (x >= 600 && x <= 760) {
                if (y >= 150 && y <= 190) {
                    showGUAHAO(); // 预约挂号
                } else if (y >= 250 && y <= 290) {
                    showJIAOFEI(); // 医疗缴费
                } else if (y >= 350 && y <= 390) {
                    showPINGZHENG(); // 报销凭证
            } else if (y >= 410 && y <= 460) {
                    break;  // 退出
             
            }
		}
	}
        
		// 点击返回按钮退出
        if (MouseHit()) {
            GetMouseMsg();
        }
	}
   
    closegraph(); // 关闭图形窗口
    return 0;
}
ava
汽水味的冰

2025-4-21

举报
0

暂时不支持多个 initgraph 窗口,可以考虑重绘当前窗口,实现所谓的 “新窗口”

getch() 会阻塞消息获取,所以获取不到鼠标信息

ava
xiongfj ◑◑

2025-4-21

技术讨论社区
相关提问