edit control显示数值

本文介绍了一个基于Hough变换的圆检测算法实现过程。通过用户界面获取参数,如距离精度dp、最小距离minDist等,并应用于摄像头捕获的图像上进行圆检测。当检测到圆时,会在界面中显示圆的位置和半径,并调整图像大小以适配显示区域。
void CMFC_HoughDlg::OnBnClickedHoughline()
{
	// TODO: 在此添加控件通知处理程序代码

	static int countnum=0;
	char filename[200]; 

	CString Text_dp,Text_minDist,Text_param1,Text_param2,Text_minRadius,Text_maxRadius,Text_downGrayValue,Text_upGrayValue;
	GetDlgItemText(IDC_EDIT_dp, Text_dp); 
	GetDlgItemText(IDC_EDIT_minDist, Text_minDist); 
	GetDlgItemText(IDC_EDIT_param1, Text_param1); 
	GetDlgItemText(IDC_EDIT_param2, Text_param2); 
	GetDlgItemText(IDC_EDIT_minRadius, Text_minRadius); 
	GetDlgItemText(IDC_EDIT_maxRadius, Text_maxRadius); 
	GetDlgItemText(IDC_EDIT_downGrayValue, Text_downGrayValue); 
	GetDlgItemText(IDC_EDIT_upGrayValue, Text_upGrayValue); 

	cameras.dp=_ttol(Text_dp);
	cameras.minDist=_ttol(Text_minDist);
	cameras.param1=_ttol(Text_param1);
	cameras.param2=_ttol(Text_param2);
	cameras.minRadius=_ttoi(Text_minRadius);
	cameras.maxRadius=_ttoi(Text_maxRadius);
	cameras.downGrayValue=_ttoi(Text_downGrayValue);
	cameras.upGrayValue=_ttoi(Text_upGrayValue);

	 if(HoughFlag==0)		//0值时,检测圆
    {
		 KillTimer(1);  //关闭定时器,显示检测直线的图像

		//edit control显示数值
		CEdit* pstrX,* pstrY,* pstrRadius;
		pstrX = (CEdit*) GetDlgItem(IDC_WIDTH);
		pstrY = (CEdit*) GetDlgItem(IDC_HEIGHT);
		pstrRadius = (CEdit*) GetDlgItem(IDC_RADIUS);
		CString strX,strY,strRadius;

		GetDlgItem(ID_HoughLine)->SetWindowText("停止检测");
		
		if (capture.isOpened())
		{
			capture>>img; //显示检测图像
			//判断是否输入参数
			if(cameras.dp*cameras.minDist*cameras.param1*cameras.param2*cameras.minRadius*cameras.maxRadius*cameras.downGrayValue*cameras.upGrayValue-0<1e-6)
				AfxMessageBox(_T("请输入参数"));
		//sprintf_s(filename,"Picture %d.jpg",countSnap);  
		//imwrite(filename,picture);			//图片保存到本工程目录中 
			else
			{
				if(!cameras.HoughCircle(img,dstImg,CenterX,CenterY,Radius))            //hough圆检测
				{
					AfxMessageBox(_T("未检测到螺孔,请调整背板或参数"));
					GetDlgItem(ID_HoughLine)->SetWindowText("检测圆  ");
					SetTimer(1,100,NULL); //定时器,定时时间和帧率一致*/ 比赛
					HoughFlag++;
				}

				//显示到对话框
				strX.Format("%.2f",CenterX);
				strY.Format("%.2f",CenterY);
				strRadius.Format("%.3f",Radius);

				//赋值

				pstrX-> SetWindowText(strX);
				pstrY-> SetWindowText(strY);
				pstrRadius-> SetWindowText(strRadius);

	
				//以下操作获取图形控件尺寸并以此改变图片尺寸
				CRect rect;
				GetDlgItem(IDC_Picture)->GetClientRect(&rect);//获取Picture Control控件的大小  
				Rect dst(rect.left,rect.top,rect.right,rect.bottom);
				resize(dstImg,midImage,cv::Size(rect.Width(),rect.Height())); 

				imshow(windows_name,midImage);
				sprintf_s(filename,"Picture %d.jpg",countnum++);  
				imwrite(filename,dstImg);			//图片保存到本工程目录中 
			}
		}
		else
		{
			AfxMessageBox("请打开相机");
			GetDlgItem(ID_HoughLine)->SetWindowText("检测圆  ");
			 HoughFlag++;
		}

    }
    else           //关闭摄像头
    {
        GetDlgItem(ID_HoughLine)->SetWindowText("检测圆  ");
	    SetTimer(1,100,NULL); //定时器,定时时间和帧率一致
		 	
	 }
    HoughFlag++;
    HoughFlag %=2;
}

<think>好的,用户想了解如何在MFC中设置Edit Control的内容。首先,我需要回忆一下MFC中操作控件的基本方法。通常,这涉及到获取控件的指针,然后调用相应的成员函数。 首先,用户可能需要知道如何在对话框类中访问Edit Control。MFC中常用的方法是通过DDX(对话框数据交换)或者直接使用控件变量。如果是通过DDX,可以在DoDataExchange函数中将控件与变量关联,然后通过UpdateData来同步数据。不过,更常见的是使用控件变量,比如通过GetDlgItem获取控件指针,然后调用SetWindowText来设置内容。 另外,用户可能关心的是如何动态设置内容,比如在按钮点击时改变Edit Control的文本。这时候,需要在按钮的消息处理函数中编写代码。需要确认是否正确处理了控件的ID,是否获取了正确的指针,以及是否调用了正确的函数。 还有一种情况是使用CEdit类的成员函数。如果用户为Edit Control关联了一个CEdit类型的成员变量,比如m_editCtrl,那么可以直接调用m_editCtrl.SetWindowText(_T("内容"))。这可能是更直接的方法。 还需要注意字符编码的问题。MFC中通常使用_T宏来处理Unicode和多字节字符集,所以在设置文本时应该用_T("文本")或者CString类型。 可能用户会遇到的问题包括:控件没有正确关联变量,导致获取指针失败;或者在错误的时机调用SetWindowText,比如在对话框初始化之前。这时候需要检查资源编辑器中控件的ID是否正确,变量是否绑定,以及代码的位置是否合适。 此外,如果Edit Control是多行的,可能需要设置ES_MULTILINE样式,但这通常不影响设置文本内容。另外,如果需要设置数值,可能需要将数字转换为字符串,可以使用CString的Format方法,比如strText.Format(_T("%d"), num);。 总结一下,步骤应该是:1. 获取Edit Control的指针;2. 调用SetWindowText方法设置文本。需要根据具体情况选择使用GetDlgItem还是成员变量,同时注意字符串的格式和编码。</think>在MFC中设置EditControl内容主要有以下两种常用方法,具体步骤分解如下: --- ### 方法1:通过控件ID直接操作 1. **获取控件指针** ```cpp CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1); // IDC_EDIT1为资源编辑器中的控件ID ``` 2. **设置文本内容** ```cpp pEdit->SetWindowText(_T("要显示的内容")); // 使用Unicode字符集时需要_T()宏 ``` --- ### 方法2:通过关联成员变量操作(推荐) 1. **添加控件变量** - 在资源编辑器中右键EditControl -> 添加变量 - 选择"控件变量",设置变量类型为`CEdit`,变量名如`m_editCtrl` 2. **直接操作成员变量** ```cpp m_editCtrl.SetWindowText(_T("Hello World")); // 设置普通文本 ``` --- ### 高级技巧 1. **设置数字内容** ```cpp int num = 123; CString strText; strText.Format(_T("%d"), num); // 数字转字符串 m_editCtrl.SetWindowText(strText); ``` 2. **多行文本设置** ```cpp CString multiLineText = _T("第一行\r\n第二行"); m_editCtrl.SetWindowText(multiLineText); ``` --- ### 注意事项 1. 确保控件已正确创建(在`OnInitDialog()`之后操作) 2. 如果使用Unicode字符集,必须使用_T()宏或L前缀 3. 设置空内容时使用`SetWindowText(_T(""))` --- ### 代码示例位置 建议将设置代码放在: - 对话框初始化函数`OnInitDialog()` - 按钮点击事件处理函数中 - 定时器回调函数中 通过上述方法可以灵活控制EditControl的内容显示,建议优先使用成员变量方式,代码更清晰易维护。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值