【发布时间】:2018-04-14 15:44:30
【问题描述】:
我正在编写一个带有静态控件和编辑控件(最初设置为不可见)的 MFC 对话框应用程序。静态在运行时具有区域(例如,A01、A02、A03、A04、B01、B02,...),如下所示:
当我在静态的某个特定矩形(例如 A02)内双击鼠标时,我希望编辑控件调整为矩形的大小并覆盖该矩形(例如 A02),如下所示:
但是,直到我输入一些内容(例如,字符'a')并删除它们之后,才会这样做。也就是说,当我双击 A02 时,出现了编辑控件的插入符号,但我仍然可以看到矩形的“A02”标题:
下面是我如何使编辑控件可见并更改其位置(在这种情况下,rtEdit 是对应于 A02 的 CRect 对象,m_rtPanelParent 是对应于整个静态的 CRect 对象。我在我的对话框的OnInitDialog() 中通过m_stcPanel.GetWindowRect (&m_rtPanelParent); 和ScreenToClient (&m_rtPanelParent); 获取m_rtPanelParent):
void CStaticPanel::OnLButtonDblClk(UINT nFlags, CPoint point)
{
.....
.....
m_pDlgParent->m_editCaption.SetWindowPos (&wndTop, m_pDlgParent->m_rtPanelParent.left + rtEdit.left, m_pDlgParent->m_rtPanelParent.top + rtEdit.top, rtEdit.Width (), rtEdit.Height (), SWP_SHOWWINDOW);
m_pDlgParent->m_editCaption.SetFocus ();
CStatic::OnLButtonDblClk(nFlags, point);
}
我认为编辑控件具有正确的矩形大小和位置(我双击)。见下文:
对于这种情况,我将不胜感激。
【问题讨论】:
-
使用
ShowWindow(SW_HIDE)隐藏静态面板。当焦点切换到另一个面板时再次显示。 -
亲爱的@AndrewTruckle:我只想让编辑控件覆盖静态的某些区域(例如,A02),所以我不想隐藏整个静态。
-
亲爱的@HansPassant:我将编辑的tab顺序设置为26,整个静态的tab顺序设置为27。你能详细说明一下你的观点吗?谢谢。
-
它还需要更多细节。显示绘制函数 A01、A02、... 它需要足够的代码,以便我们可以复制这个问题。
-
确保父窗口具有
WS_CLIPCHILDREN样式集。