Winapi 调整大小、重新定位并使最初不可见的编辑控件可见

Winapi 调整大小、重新定位并使最初不可见的编辑控件可见,winapi,mfc,Winapi,Mfc,我正在编写一个带有静态控件和编辑控件(最初设置为不可见)的MFC对话框应用程序。静态对象在运行时具有如下区域(例如,A01、A02、A03、A04、B01、B02等): 当我在静态对象的某个特定矩形(例如A02)内双击鼠标时,我希望编辑控件调整为该矩形的大小,并覆盖该矩形(例如A02),如下所示: 然而,这是直到我输入一些东西(例如,字符“a”)并删除它们。也就是说,当我双击A02时,编辑控件的插入符号出现,但我仍然可以看到矩形的“A02”标题: 下面是我如何使编辑控件可见并更改其位置(r

我正在编写一个带有静态控件和编辑控件(最初设置为不可见)的MFC对话框应用程序。静态对象在运行时具有如下区域(例如,A01、A02、A03、A04、B01、B02等):

当我在静态对象的某个特定矩形(例如A02)内双击鼠标时,我希望编辑控件调整为该矩形的大小,并覆盖该矩形(例如A02),如下所示:

然而,这是直到我输入一些东西(例如,字符“a”)并删除它们。也就是说,当我双击A02时,编辑控件的插入符号出现,但我仍然可以看到矩形的“A02”标题:

下面是我如何使编辑控件可见并更改其位置(
rtEdit
是本例中与A02相对应的
CRect
对象,
m_rtPanelParent
是与整个静态对象相对应的
CRect
对象。我通过
m_stcPanel.GetWindowRect(&m_rtPanelParent)获得
m_rtPanelParent
屏幕到客户端(&m_rtPanelParent);
在我的对话框的
OnInitDialog()
)中:

我认为编辑控件具有正确的矩形大小和位置(我双击了该矩形)。见下文:


如果您有任何帮助,我将不胜感激。

编辑控件的高度似乎较小。确保编辑控件完全覆盖静态控件。为了进行调试,您可以创建带有边框的编辑控件,以便在显示位置更清晰

void CStaticPanel::OnLButtonDblClk(UINT nFlags, CPoint point)
{
    CStatic::OnLButtonDblClk(nFlags, point);

    CRect rc;
    GetWindowRect(&rc);
    m_pDlgParent->ScreenToClient(&rc);
    m_pDlgParent->m_editCaption.SetWindowPos(&wndTop, 
        rc.left, rc.top, rc.Width(), rc.Height(), SWP_SHOWWINDOW);
    m_pDlgParent->m_editCaption.SetFocus();
}

使用
ShowWindow(SW\u Hide)
隐藏静态面板。当焦点切换到另一个面板时再次显示。亲爱的@andrewruckle:我只希望编辑控件覆盖静态的某个区域(例如A02),因此我不想隐藏整个静态。亲爱的@HansPassant:我将编辑的制表位顺序设置为26,将整个静态的制表位顺序设置为27。你能为我详细说明你的观点吗?谢谢,还需要更多细节。显示绘制A01、A02,。。。它需要足够的代码,以便我们可以复制此问题。请确保父窗口设置了
WS\u CLIPCHILDREN
样式集。亲爱的@Barmak Shemirani:我不希望编辑控件覆盖整个静态控件。我只想让它覆盖一些静态区域(例如,A02)。为您的问题添加更多细节,并显示编辑控件具有边框时的外观Dar@Barmak Shemirani:我已为我的问题添加了一些信息。非常感谢。
void CStaticPanel::OnLButtonDblClk(UINT nFlags, CPoint point)
{
    CStatic::OnLButtonDblClk(nFlags, point);

    CRect rc;
    GetWindowRect(&rc);
    m_pDlgParent->ScreenToClient(&rc);
    m_pDlgParent->m_editCaption.SetWindowPos(&wndTop, 
        rc.left, rc.top, rc.Width(), rc.Height(), SWP_SHOWWINDOW);
    m_pDlgParent->m_editCaption.SetFocus();
}