Board logo

标题: 请问怎么实现C语言EASYX的滚动页面? [打印本页]

作者: zzz19760225    时间: 2024-11-9 08:54     标题: 请问怎么实现C语言EASYX的滚动页面?

本帖最后由 zzz19760225 于 2024-11-9 08:56 编辑

想用C语言做html滚动条页面,将一个个文本和文本内图片,放在一个个独立的页面概念单元或集合里。所以先看滚动条页面怎么实现
通义千问2.5:C语言vc6.0 easyx滚动页面
  1. 在VC6.0环境下使用EasyX图形库实现一个具有滚动功能的简单页面,可以通过创建一个窗口并在其中添加滚动条来实现。下面是一个基本的例子,它展示了如何创建一个带有滚动条的窗口,用户可以通过滚动条查看超出窗口大小的内容。
  2. 示例代码
  3. C
  4. 深色版本
  5. #include <graphics.h>
  6. #include <conio.h>
  7. #include <stdio.h>
  8. // 定义常量
  9. #define WINDOW_WIDTH  800
  10. #define WINDOW_HEIGHT 600
  11. #define CONTENT_LINES 50 // 内容行数
  12. #define LINE_HEIGHT   20 // 每行高度
  13. int scrollPos = 0; // 滚动位置
  14. // 处理鼠标滚轮事件
  15. void onmouse(int button, int state, int x, int y)
  16. {
  17.     if (button == MB_WHEEL) {
  18.         if (state > 0) { // 向上滚动
  19.             scrollPos -= LINE_HEIGHT;
  20.         } else if (state < 0) { // 向下滚动
  21.             scrollPos += LINE_HEIGHT;
  22.         }
  23.         
  24.         // 限制滚动范围
  25.         if (scrollPos < 0) scrollPos = 0;
  26.         if (scrollPos > (CONTENT_LINES * LINE_HEIGHT - WINDOW_HEIGHT))
  27.             scrollPos = CONTENT_LINES * LINE_HEIGHT - WINDOW_HEIGHT;
  28.         
  29.         // 重绘屏幕
  30.         cleardevice();
  31.         for (int i = 0; i < CONTENT_LINES; i++) {
  32.             char buffer[50];
  33.             sprintf(buffer, "这是第 %d 行", i + 1);
  34.             outtextxy(10, 10 + (i * LINE_HEIGHT) - scrollPos, buffer);
  35.         }
  36.     }
  37. }
  38. int main()
  39. {
  40.     // 初始化图形模式
  41.     initgraph(WINDOW_WIDTH, WINDOW_HEIGHT);
  42.     // 设置鼠标回调函数
  43.     setmouseproc(onmouse);
  44.     // 显示初始内容
  45.     for (int i = 0; i < CONTENT_LINES; i++) {
  46.         char buffer[50];
  47.         sprintf(buffer, "这是第 %d 行", i + 1);
  48.         outtextxy(10, 10 + (i * LINE_HEIGHT) - scrollPos, buffer);
  49.     }
  50.     // 循环等待用户操作
  51.     while (!kbhit()) {
  52.         _getch();
  53.     }
  54.     // 关闭图形模式
  55.     closegraph();
  56.     return 0;
  57. }
  58. 代码说明
  59. 常量定义:定义了窗口的尺寸、内容行数以及每行的高度。
  60. 滚动位置变量:scrollPos 用于存储当前的滚动位置。
  61. 鼠标事件处理:onmouse 函数处理鼠标滚轮的滚动事件,当用户向上或向下滚动时,调整 scrollPos 的值,并重新绘制屏幕上的内容。
  62. 主函数:初始化图形模式,设置鼠标事件处理函数,显示初始内容,并进入一个循环等待用户按键来退出程序。
  63. 重绘屏幕:每当滚动位置改变时,都会清除当前屏幕并重新绘制所有内容,以反映新的滚动位置。
  64. 编译与运行
  65. 确保你已经在VC6.0环境中安装了EasyX库。然后,你可以直接在VC6.0中打开一个新的C++工程,将上述代码复制到源文件中,编译并运行程序。使用鼠标滚轮即可滚动查看超出窗口大小的内容。
  66. 这个例子仅使用了鼠标滚轮来实现滚动功能,如果你希望添加传统的滚动条控件,可能需要更深入地了解Windows API或者EasyX提供的其他接口。
复制代码


出错信息1
d:\dos\c\01.cpp(21) : error C2065: 'MB_WHEEL' : undeclared identifier
  1. error C2065: 'MB_WHEEL' : undeclared identifier
  2. 错误解释:
  3. error C2065: 'MB_WHEEL' : undeclared identifier 这个错误表明编译器在处理代码时遇到了一个未声明的标识符 MB_WHEEL。在C++中,当编译器遇到一个它不认识的标识符时,会报出这种错误。
  4. 可能的原因:
  5. 拼写错误:MB_WHEEL 可能拼写错误或者大小写不正确。
  6. 缺少头文件:MB_WHEEL 可能是定义在某个特定的头文件中,而这个头文件没有被包含进来。
  7. 作用域问题:MB_WHEEL 可能在当前作用域不可见。
  8. 解决方法:
  9. 检查拼写:确认 MB_WHEEL 是否拼写正确,包括大小写是否正确。
  10. 包含头文件:确认是否需要包含定义 MB_WHEEL 的头文件。
  11. 检查作用域:确保 MB_WHEEL 在你尝试使用它的地方是可见的。
  12. 具体解决方法取决于 MB_WHEEL 的上下文。如果它是Windows API中的一个常量,你可能需要包含 windows.h 头文件。如果它是自定义的,确保其声明在使用之前,并且检查是否有拼写错误。
复制代码
出错信息2
d:\dos\c\01.cpp(49) : error C2065: 'setmouseproc' : undeclared identifier
  1. error C2065: 'setmouseproc' : undeclared identifier
  2. 错误 C2065 表示编译器在编译过程中遇到了一个未声明的标识符。在这个特定的例子中,错误指出 'setmouseproc' 这个标识符未被声明。
  3. 解决这个问题通常需要以下步骤:
  4. 确认 'setmouseproc' 是否是正确的函数或变量名。如果名字有误,请更正为正确的名称。
  5. 如果 'setmouseproc' 是一个库函数或者在其他源文件中定义的函数,确保你已经正确地包含了相应的头文件或源文件。
  6. 如果 'setmouseproc' 是你自己定义的,确保你已经在使用它之前正确地声明了它。
  7. 如果 'setmouseproc' 是在一个特定的命名空间中定义的,确保你使用了正确的命名空间。
  8. 如果 'setmouseproc' 是一个需要特定库的函数,确保你的项目已经链接了相应的库。
  9. 例如,如果 'setmouseproc' 是 Windows API 中的一个函数,确保你的代码顶部包含了正确的头文件,如:
复制代码
下面不知道怎么处理了,求助!
作者: Five66    时间: 2024-11-10 01:05

出错信息已经说的很清楚了
MB_WHEEL如果按开头的MB来看 ,应该是winapi中messagebox的值 ,但是messagebox值中并没有这个值,也就是说这个MB_WHEEL不是winapi的 ,easyX文档貌似也没看到这个 ,也不属于easyX ,不知是什么神马来着(大概需要自己定义??)
setmouseproc同理 ,winapi没看到到 ,easyX貌似也没有 ,也不知是神马来着(大概需要自己定义??)

滚动条可以用鼠标消息
先显示滚动条图片
然后判断是否是鼠标的WM_MOUSEWHEEL消息
或着
鼠标是否在滚动条图片区域进行点击
接着再处理
作者: zzz19760225    时间: 2024-11-10 08:46

回复 2# Five66


那么用C语言的标准或linux_C,WIN_C,是否可以模仿html网页分页和滚动模式呢?(按照它们都是硬件机器的逻辑元组合部件来看,是具有本源共通的啊,具有更基本的编程层面难道不是C,而是汇编?)
作者: Five66    时间: 2024-11-11 19:14

回复 3# zzz19760225


    额 ,这个不清楚的说




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2