调整窗口大小不正常MFC

时间:2016-07-11 09:15:02

标签: c++ visual-c++ mfc

我创建了一个自定义类,在SDI应用程序MFC中继承了CDockablepane。对于前

class CLoginPage :  public CDockablePane
{
    public:
    CLoginPage();
protected:
    CStatic lbl_username;
    CStatic lbl_password;
    CEdit txt_username;
    CEdit txt_password;
    CButton btn_login;
    CButton btn_Signup;
protected:
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    afx_msg void OnSize(UINT nType, int cx, int cy);

    DECLARE_MESSAGE_MAP()
};

在.cpp中我重写了oncreate函数和onsize funtion

int CLoginPage::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CDockablePane::OnCreate(lpCreateStruct) == -1)
        return -1;

    if(!lbl_username.Create(_T("User Name"), WS_CHILD | WS_VISIBLE, CRect(150, 150, 100, 30), this, ID_STATIC_USERNAME))
    {
        TRACE0("Failed to create userName in LoginPage window\n");
        return -1;
    }
 ......................................same for other control
}


void CLoginPage::OnSize(UINT nType, int cx, int cy)
{
    CDockablePane::OnSize(nType, cx, cy);

    // Tab control should cover the whole client area:
    CRect rectClient;
    this->GetWindowRect(rectClient);

    lbl_username.SetWindowPos (NULL, rectClient.left+150, rectClient.top+150, 100, 30, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
.............................same for other control
}

当我运行它时,它正确地显示在下面的图像中。

enter image description here

但是在调整登录窗口或移动登录窗口后,它显示得非常糟糕。请看下面的图片

enter image description here

我不知道如何解决这个问题。我是否需要在WM_PAINT消息或其他内容中执行某些操作。我尝试了很多,但我没有任何选择。 有人可以帮我这个吗??

2 个答案:

答案 0 :(得分:1)

您想要更改位置,但为什么要将SWP_NOMOVE传递给SetWindowPos?

您是否知道在Visual Studio 2015中,您可以使用动态布局管理对话框布局:https://msdn.microsoft.com/en-us/library/mt270148.aspx?最好的动态布局教程是http://mariusbancila.ro/blog/2015/07/27/dynamic-dialog-layout-for-mfc-in-visual-c-2015/

答案 1 :(得分:0)

记录在案的MFC绘图问题-移动或调整工具窗口或工具栏的大小时出现断线是Windows的错误,仅在多台显示器上发生。它已在Windows 10 1803中修复,但在1809年重新引入,并于2020年3月在1903和1909年修复。

https://support.microsoft.com/en-us/help/4541335/windows-10-update-kb4541335

知识库文章中的描述(必须展开折叠的链接):

解决了在多监视器环境中拖动时发生的Microsoft Foundation Class(MFC)工具栏的图形问题。