无题

对话框尺寸调整机制

设计窗体控件及关联控件变量如下:



若要使用尺寸调节手柄Custom control(工具栏人头标志),需设置属性:

Tabstop:false

Caption:清空

Class:SCROLLBAR

Style:0x5000001e


1.在改变控件大小和位置时,需要了解控件原来的尺寸。

在Dialog的头文件中定义一个CSize类型的成员变量m_oldSize,

构造函数中初始化:m_oldSize=CSize(0,0);


2.OnSize()中添加如下代码:

void CMoveTestDlg::OnSize(UINT nType, int cx, int cy)
{
	CDialogEx::OnSize(nType, cx, cy);
	// 当对话框最小化时, 不做处理,直接返回
	if (nType == SIZE_MINIMIZED) return;

	//尺寸改变量
	CSize SizeOff(cx - m_oldSize.cx, cy - m_oldSize.cy);

	// 利用枚举子窗口函数调用回调函数EnumProc, 来处理对话框中控件的移动
	::EnumChildWindows(GetSafeHwnd(), EnumProc, (LPARAM)&SizeOff);

	// 尺寸调节手柄处理
	if (GetDlgItem(IDC_SIZEBOX)->GetSafeHwnd())
	{
		if (nType == SIZE_MAXIMIZED)						// 最大化时
			GetDlgItem(IDC_SIZEBOX)->ShowWindow(SW_HIDE);	// 隐藏手柄
		else												// 其他状态
			GetDlgItem(IDC_SIZEBOX)->ShowWindow(SW_SHOW);	// 显示手柄
	}

	// 保存当前尺寸
	m_oldSize = CSize(cx,cy);
	// 刷新对话框
	Invalidate();
	// TODO: 在此处添加消息处理程序代码
}

3.编写全局回调函数EnumProc()

BOOL CALLBACK EnumProc(HWND hwnd, LPARAM lParam)
{
	CWnd* pWnd = CWnd::FromHandle(hwnd);
	CSize* pSizeOff = (CSize*) lParam;

	CMoveTestDlg* pDlg = (CMoveTestDlg *) pWnd->GetParent();
	if (!pDlg) return FALSE;

	CRect rect;
	pWnd->GetWindowRect(rect);
	pDlg->ScreenToClient(rect);

	if (hwnd == pDlg->m_static.GetSafeHwnd())
	{	// 静态文本不做处理
		return TRUE;
	}
	if (hwnd == pDlg->m_btn1.GetSafeHwnd() ||
		hwnd == pDlg->m_btn2.GetSafeHwnd())
	{	//按钮只移动位置
		pWnd->MoveWindow(
			rect.left+pSizeOff->cx,							
			rect.top+pSizeOff->cy, 
			rect.Width(),			
			rect.Height(),			
			FALSE);
		return TRUE;
	}
	if (hwnd == pDlg->m_list.GetSafeHwnd())
	{	// 列表框控件只改变高度
		pWnd->MoveWindow(
			rect.left,							
			rect.top, 
			rect.Width(), 
			rect.Height()+pSizeOff->cy,			
			FALSE);
		return TRUE;
	}
	if (pWnd == pDlg->GetDlgItem(IDC_EDIT1))
	{	// 编辑框控件改变宽度和宽度
		pWnd->MoveWindow(
			rect.left,							
			rect.top, 
			rect.Width()+pSizeOff->cx,			
			rect.Height()+pSizeOff->cy,			
			FALSE);
		return TRUE;
	}
	{	// 其他控件,改变坐标
		pWnd->MoveWindow(
			rect.left+pSizeOff->cx,				
			rect.top+pSizeOff->cy, 
			rect.Width(), 
			rect.Height(), 
			FALSE);
	}
	return TRUE;
}

运行效果如下:

初始化时:



拉大窗体后:





OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,广泛应用于图像处理、计算机视觉和模式识别等领域。物体识别是OpenCV的一个重要应用场景,以下是一些常见的物体识别方法和技术: 1. **特征提取与匹配**: - **SIFT(尺度不变特征变换)**和**SURF(加速稳健特征)**:这些算法用于检测和描述局部特征,能够在图像中识别出相同的物体,即使它们的大小、旋转或光照条件发生变化。 - **ORB(定向快速旋转BRIEF)**:一种快速的特征检测和描述算法,适用于实时应用。 2. **模板匹配**: - 通过在图像中滑动一个模板(已知物体的图像),并计算模板与图像区域的相似度,来找到物体的位置。 3. **机器学习与深度学习**: - **支持向量机(SVM)**:用于分类和回归分析,可以用于物体识别任务。 - **卷积神经网络(CNN)**:深度学习模型,特别适合处理图像数据,能够自动学习图像的特征并进行分类。 4. **目标检测算法**: - **Haar级联分类器**:基于积分图和AdaBoost算法,用于实时人脸检测。 - **YOLO(You Only Look Once)**和**SSD(Single Shot MultiBox Detector)**:实时目标检测算法,能够在单次前向传播中同时进行目标定位和分类。 5. **实例分割**: - **Mask R-CNN**:在目标检测的基础上,进一步分割出目标的精确轮廓。 OpenCV提供了丰富的API和工具,可以方便地实现上述方法。以下是一个简单的示例代码,展示如何使用OpenCV进行模板匹配: ```python import cv2 import numpy as np # 读取原始图像和模板图像 original_image = cv2.imread('original_image.jpg') template = cv2.imread('template.jpg') template_gray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY) w, h = template_gray.shape[::-1] # 转换为灰度图 gray_original = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY) # 模板匹配 result = cv2.matchTemplate(gray_original, template_gray, cv2.TM_CCOEFF_NORMED) threshold = 0.8 loc = np.where(result >= threshold) # 绘制矩形框 for pt in zip(*loc[::-1]): cv2.rectangle(original_image, pt, (pt[0] + w, pt[1] + h), (0, 255, 255), 2) # 显示结果 cv2.imshow('Detected', original_image) cv2.waitKey(0) cv2.destroyAllWindows() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值