如何将Edit控件输入值关联HRGN实现图片分区域黑点计数
可以通过Edit输入控件实现你的需求,你遇到的问题本质是C/C++静态数组的长度要求是编译期常量,无法直接使用运行期从Edit控件读取的动态数值作为长度,改用动态内存分配或标准容器即可解决。
解决方案
- 方案1:使用动态数组(手动管理内存)
- 首先读取Edit控件输入值,做合法性校验:
int n = Edit1->Text.ToIntDef(0); // 增加参数校验,避免非法输入 if (n <= 0) { // 可自行弹出提示要求用户输入合法的扇区数量 return; } - 动态分配HRGN数组:
HRGN* region = new HRGN[n]; - 所有扇区处理逻辑完成后,手动释放内存避免泄漏:
delete[] region;
- 首先读取Edit控件输入值,做合法性校验:
- 方案2:使用std::vector容器(更推荐,自动管理内存)
- 先引入vector头文件:
#include <vector> - 读取Edit输入值校验后,直接创建对应长度的HRGN容器:
int n = Edit1->Text.ToIntDef(0); if (n <= 0) { return; } std::vector<HRGN> region(n); - 使用方式和普通数组完全一致,通过下标
region[i]访问单个HRGN对象,不需要手动释放内存,容器生命周期结束后会自动回收资源。
- 先引入vector头文件:
拿到对应长度的HRGN集合后,你就可以循环计算每个扇区的角度、坐标范围,调用GDI区域创建API(如CreatePieRgn)生成每个扇区的区域对象,再逐区域统计黑点数量即可。
内容的提问来源于stack exchange,提问作者Vorrven
相关产品推荐
相关产品推荐

