MFC
画面の端に近づいたら吸着する


HomeProgramming TipsMFC Tips[MFC-002]


有効画面サイズとダイアログの位置関係を比較して、
一定距離より近くなったら無理矢理画面端の座標に入れ替えることで吸着させます。

デフォルトデバイスの有効画面サイズの取得ですので、マルチモニタには対応できていません。
EnumDisplayMonitors で列挙すれば良いのですが、私の手元にマルチモニタ環境がないため試せません。


void CMyDlg::OnWindowPosChanging(WINDOWPOS* lpwndpos)
{
    CDialog::OnWindowPosChanging(lpwndpos);

    // TODO : ここにメッセージ ハンドラ コードを追加します。
    int m_nAttachSize = 10; // メンバ変数として別途宣言する

    // 有効画面サイズを取得する
    CRect rcDesktop;
    ::SystemParametersInfo(SPI_GETWORKAREA, 0, &rcDesktop, 0);

    // 画面の端に近づいたかを判断する(近ければ吸着させる)
    if (lpwndpos->x < rcDesktop.left + m_nAttachSize)
        lpwndpos->x = rcDesktop.left;

    if (lpwndpos->y < rcDesktop.top + m_nAttachSize)
        lpwndpos->y = rcDesktop.top;

    if ((lpwndpos->x + lpwndpos->cx + m_nAttachSize) > rcDesktop.right)
        lpwndpos->x = rcDesktop.right - lpwndpos->cx;

    if ((lpwndpos->y + lpwndpos->cy + m_nAttachSize) > rcDesktop.bottom)
        lpwndpos->y = rcDesktop.bottom - lpwndpos->cy;
}



 Copyright 2005 VALGUS. All Rights Reserved.