MFC记忆窗口位置

Posted htj10

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC记忆窗口位置相关的知识,希望对你有一定的参考价值。

1. 用 WINDOWPLACEMENT(可以记录最大化、最小化、正常窗口位置)

BOOL CtestDialogDlg::ReadWndPosition()
{
    WINDOWPLACEMENT wp;
    CFile file;
    if (!file.Open(_T("testDialog.position"), CFile::modeRead))
        return FALSE;
    UINT nByteRead = file.Read(&wp, sizeof(wp));
    if (sizeof(wp) != nByteRead)
        return FALSE;
    if(!::SetWindowPlacement(this->GetSafeHwnd(), &wp))
        return FALSE;
    file.Close();
    return TRUE;
}


BOOL CtestDialogDlg::WriteWndPosition()
{
    WINDOWPLACEMENT wp = { sizeof(wp) };
    ::GetWindowPlacement(this->GetSafeHwnd(), &wp);
    CFile file;
    if (!file.Open(_T("testDialog.position"), CFile::modeCreate | CFile::modeWrite))
        return FALSE;
    file.Write(&wp, sizeof(wp));
    file.Close();
    return TRUE;
}
//然后在OnInitDialog()中调用 ReadWndPosition()
//在OnDestroy()中调用 WriteWndPosition()
typedef struct tagWINDOWPLACEMENT {
    UINT  length;
    UINT  flags;
    UINT  showCmd;
    POINT ptMinPosition;
    POINT ptMaxPosition;
    RECT  rcNormalPosition;
} WINDOWPLACEMENT;
// 使用时,一般先把 length=sizeof(WINDOWPLACEMENT)

正常窗口关闭时,length=44,flags=0,showCmd=1,ptMinPosition=ptMaxPosition={-1,-1},rcNormalPosition=关闭时的窗口位置大小。
最小化关闭时,length=44,flags=0,showCmd=2,ptMinPosition={-3200,-3200},ptMaxPosition={-1,-1},rcNormalPosition=最小化前窗口的位置大小。
最大化关闭时,length=44,flags=2,showCmd=3,ptMinPosition=ptMaxPosition={-1,-1},rcNormalPosition=最大化前窗口的位置大小。

showCmd 的取值 SW_SHOWNORMAL=1  SW_HIDE=0  SW_SHOWMAXIMIZED=3  SW_SHOWMINIZED=2

以上是关于MFC记忆窗口位置的主要内容,如果未能解决你的问题,请参考以下文章

MFC 怎样在主窗口任意位置使用控件

电脑不能记忆窗口大小和位置

如何在 MFC 中更改弹出窗口的默认位置

VB 让窗口位置及大小有记忆功能

MFC 停靠窗口及其停靠位置

怎样给MFC 窗口命名?