求问,图片控件上如何快速选取其他控件呢?

程序员小哈
嵌入式领域优质创作者
博客专家认证
2016-01-21 08:06:40
我在一个图片(控件)上添加了几个按钮,文本框,图片是作为背景用的,在操作按钮和文本框的时候,总是点不上,图片控件默认TAB为1,为了能点上,我就要改变按钮和文本框的TAB,将其提前,但是这样运行后还看不到按钮和文本框控件,也就是说被图片遮挡住了,为了能看到,我有要把图片控件的TAB设为1,这样来回操作好麻烦呀,有没有什么技巧可以快速点击某个控件呢

这应该是一类问题,控件重叠如何选取的问题,求告知,谢谢了
...全文
131 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2016-03-30
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复多日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
schlafenhamster 2016-01-22
  • 打赏
  • 举报
回复
背景是一个仪器内部结构图,因为我要跟图中的位置对应,然后决定按钮, 把 必要的 区域 (rect)确定下来,然后 HitTest 如:

CMyPicture::CMyPicture()
{
	m_rcWorkArea=CRect(0,0,48,32);//fixed size 48,32
//mode size MDA,AUTO,JOG
	m_rcMachineMode=CRect(48,0,98,32);;//fixed size 98,32
	// dlg size
	m_rcDefDlg=CRect(0,0+32,560,396+32);
	m_rcDialog.m_rect=m_rcDefDlg;
	m_enbleDlg=FALSE;
// dlg ID and attrib
	m_DlgID="MASKx";
	m_DlgAttrib="CM0,CB0";
// all rects
	m_rcTitle=CRect(2,32,260,54);
	m_rcLongText=CRect(260,32,558,54);

	m_rcClient=CRect(0,55,560,428);
	int jj;
// hsk
	m_rcHSKey[0]=CRect(1,447,81,479);
	for (jj=1;jj<8;jj++)
	{
		m_rcHSKey[jj].left=m_rcHSKey[jj-1].left+m_rcHSKey[0].Width();
		m_rcHSKey[jj].top=m_rcHSKey[jj-1].top;
		m_rcHSKey[jj].right=m_rcHSKey[jj-1].right+m_rcHSKey[0].Width();
		m_rcHSKey[jj].bottom=m_rcHSKey[jj-1].bottom;
	}
//
	m_rcVSKey[0]=CRect(562,34,638,68);
	for (jj=1;jj<8;jj++)
	{
		m_rcVSKey[jj].left=m_rcVSKey[jj-1].left;
		if((jj %2)==1)
			m_rcVSKey[jj].top=m_rcVSKey[jj-1].top+m_rcVSKey[0].Height()+19;
		else
			m_rcVSKey[jj].top=m_rcVSKey[jj-1].top+m_rcVSKey[0].Height()+18;
		m_rcVSKey[jj].right=m_rcVSKey[jj-1].right;
		if((jj %2)==1)
			m_rcVSKey[jj].bottom=m_rcVSKey[jj-1].bottom+m_rcVSKey[0].Height()+19;
		else
			m_rcVSKey[jj].bottom=m_rcVSKey[jj-1].bottom+m_rcVSKey[0].Height()+18;
	}
//
	m_TT_text.Add("change work area");//0
	m_TT_text.Add("change mode");
	m_TT_text.Add("Title");
	m_TT_text.Add("Long text");
	m_TT_text.Add("Client");
	m_TT_text.Add("HSK1");
	m_TT_text.Add("HSK2");
	m_TT_text.Add("HSK3");
	m_TT_text.Add("HSK4");
	m_TT_text.Add("HSK5");
	m_TT_text.Add("HSK6");
	m_TT_text.Add("HSK7");
	m_TT_text.Add("HSK8");
//
	m_TT_text.Add("VSK1");
	m_TT_text.Add("VSK2");
	m_TT_text.Add("VSK3");
	m_TT_text.Add("VSK4");
	m_TT_text.Add("VSK5");
	m_TT_text.Add("VSK6");
	m_TT_text.Add("VSK7");
	m_TT_text.Add("VSK8");//19
//
	m_AllText.Add("");//0
	m_AllText.Add("");//1
	m_AllText.Add("New Title");
	m_AllText.Add("Long text");
	m_AllText.Add("Client");//
	m_AllText.Add("New Fun\r\nTest");//
	m_AllText.Add("");//
	m_AllText.Add("");//
	m_AllText.Add("");//
	m_AllText.Add("");//
	m_AllText.Add("");//
	m_AllText.Add("");//
	m_AllText.Add("");//
//
	m_AllText.Add("");//12
	m_AllText.Add("");//
	m_AllText.Add("");//
	m_AllText.Add("");//
	m_AllText.Add("");//
	m_AllText.Add("");//
	m_AllText.Add("");//18
	m_AllText.Add("");//19
//
	m_StartTrack=FALSE;
//
	m_uEleHit=0;
//
	m_skPress.SetSize(18);//0,1 not used
// Create 2 bmps
	m_bmArea[0]=(HBITMAP)LoadImage(AfxGetInstanceHandle(),
										MAKEINTRESOURCE(IDB_CUSTOM),
										IMAGE_BITMAP,
										0,0,// default
										0);//
	m_bmArea[1]=(HBITMAP)LoadImage(AfxGetInstanceHandle(),
										MAKEINTRESOURCE(IDB_PROGRAM),
										IMAGE_BITMAP,
										0,0,// default
										0);//
//
	m_EditHit=0;
// add m_bmMode
}
、、
UINT CMyPicture::HitTest(CPoint pt)
{
	if(m_rcWorkArea.PtInRect(pt)) 
	{//	afxDump << "in workarea\n";
		return HT_WORKAREA;
	}
	if(m_rcMachineMode.PtInRect(pt)) 
	{//	afxDump << "in mode\n";
		return HT_MODE;
	}
	if(m_rcTitle.PtInRect(pt)) 
	{//	afxDump << "in Title\n";
		return HT_TITLE;
	}
	if(m_rcLongText.PtInRect(pt)) 
	{//	afxDump << "in long text\n";
		return HT_LONGTEXT;
	}
	if(m_rcClient.PtInRect(pt))
	{//	afxDump << "in client\n";
		return HT_CLIENT;
	}
	int jj;
	for (jj=0;jj<8;jj++)
	{
		if(m_rcHSKey[jj].PtInRect(pt))
		{//	afxDump << "in HS" << jj+1 << "\n";
			return  jj+HT_HSK1;
		}
	}
	for (jj=0;jj<8;jj++)
	{
		if(m_rcVSKey[jj].PtInRect(pt))
		{//	afxDump << "in VS" << jj+1 << "\n";
			return  jj+HT_VSK1;
		}
	}
//	afxDump << pt << "\n" ;
	return HT_NOWHERE;
}

程序员小哈 2016-01-22
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
在 WM_ERASEBKGND 中直接绘图
背景是一个仪器内部结构图,因为我要跟图中的位置对应,然后决定按钮,文本框放置的位置,所以直接绘制不行的
程序员小哈 2016-01-22
  • 打赏
  • 举报
回复
引用 5 楼 oyljerry 的回复:
如果只是做背景就应该放到对话框等中去,而不是用控件
背景是一个仪器内部结构图,因为我要跟图中的位置对应,然后决定按钮,文本框放置的位置,所以直接绘制不行的
程序员小哈 2016-01-22
  • 打赏
  • 举报
回复
引用 2 楼 wxhxj0268 的回复:
有必要吗,直接弄个背景不就行了,还用搞个图片控件吗?
背景是一个仪器内部结构图,因为我要跟图中的位置对应,然后决定按钮,文本框放置的位置,所以直接绘制不行的
cnf 2016-01-22
  • 打赏
  • 举报
回复
没有方便办法,只能如其他人所说那样变通解决.
schlafenhamster 2016-01-21
  • 打赏
  • 举报
回复
图片(控件)作为父窗口 添加了子窗口 按钮,文本框, 派生 CYourStatic
笨笨仔 2016-01-21
  • 打赏
  • 举报
回复
有必要吗,直接弄个背景不就行了,还用搞个图片控件吗?
zgl7903 2016-01-21
  • 打赏
  • 举报
回复
在 WM_ERASEBKGND 中直接绘图
oyljerry 2016-01-21
  • 打赏
  • 举报
回复
如果只是做背景就应该放到对话框等中去,而不是用控件
qq_33370191 2016-01-21
  • 打赏
  • 举报
回复
设为透明化应该可以吧。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧