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
posted @ 2020-01-08 22:36  htj10  阅读(584)  评论(0编辑  收藏  举报
TOP