Click here to Skip to main content
12,691,231 members (30,482 online)
Click here to Skip to main content
Add your own
alternative version


23 bookmarked

A snap to screen border dialog class

, 8 Apr 2000
Rate this:
Please Sign up or sign in to vote.
Dialog class that implement a snap-to-screen-border feature like Winamp
  • Download demo project - 14 Kb
  • Download source files - 2 Kb
  • Introduction

    This class is used to implement the same feature seen in the popular Winamp player. With this class you are able to snap the dialog to the screen border. If you drag the dialog near the screen border, the dialog will automatically stick on the screen border (like a magnet).

    How to use it

    1. Add SnapDialog.h and SnapDialog.cpp to your project.
    2. Add #include "SnapDialog.h" in your dialog class.
    3. Replace all occurrence of CDialog in your dialog class by CSnapDialog.
    4. Enjoy!

    To change the limit after which the dialog is automatically stickled to the screen border, set these two variables. Default values are 15 pixels.

    m_nXOffset = 15;
    m_nYOffset = 15;

    That's all!


    This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

    A list of licenses authors might use can be found here


    About the Author

    François Gagné
    United States United States
    No Biography provided

    You may also be interested in...

    Comments and Discussions

    GeneralVisual Studio Magazine... Pin
    Dave Kreskowiak11-Dec-08 9:31
    mvpDave Kreskowiak11-Dec-08 9:31 
    Generalapp that makes all your windows snap Pin
    Ivan Heckman24-Apr-02 8:08
    memberIvan Heckman24-Apr-02 8:08 
    GeneralMFC and Winamp Pin
    Bob H2-Mar-01 11:26
    memberBob H2-Mar-01 11:26 
    GeneralThere are better ways.... Pin
    Eric Tetz18-Apr-00 9:53
    sussEric Tetz18-Apr-00 9:53 
    The meat of this program, OnWindowPosChanging(), is over-complicated and results in quirky behavior for the window. For example, it does not deal with the case where the task bar is hidden - it insist on snapping the window to the screen position where the task bar WOULD be, if it were visible.

    You can fix these problems and use much less code doing it by replacing the code in OnWindowPosChanging (which is over 50 lines in the example!) with a call to this function:

    void HandleSnapToDesktopEdgeMsg (WINDOWPOS* wndPos)
    RECT rcScrn;
    SystemParametersInfo (SPI_GETWORKAREA, 0, &rcScrn, 0);

    // Snap X axis
    if (abs(wndPos->x - rcScrn.left) <= m_EdgeSnapGap)
    wndPos->x = rcScrn.left;
    else if (abs(wndPos->x + wndPos->cx - rcScrn.right) <= m_EdgeSnapGap)
    wndPos->x = rcScrn.right - wndPos->cx;

    // Snap Y axis
    if (abs(wndPos->y - <= m_EdgeSnapGap)
    wndPos->y =;
    else if (abs(wndPos->y + wndPos->cy - rcScrn.bottom) <= m_EdgeSnapGap)
    wndPos->y = rcScrn.bottom - wndPos->cy;

    GeneralRe: There are better ways.... Pin
    Anonymous30-Oct-01 5:14
    memberAnonymous30-Oct-01 5:14 
    GeneralRe: There are better ways.... Pin
    Todd Smith30-Oct-01 6:59
    memberTodd Smith30-Oct-01 6:59 
    GeneralRe: There are better ways.... Pin
    Jean-Claude25-Nov-02 1:47
    sussJean-Claude25-Nov-02 1:47 
    QuestionWhat about SDI or MDI window? Pin
    Dmitry Sokolov10-Apr-00 17:43
    sussDmitry Sokolov10-Apr-00 17:43 
    AnswerRe: What about SDI or MDI window? Pin
    Dmitry Sokolov10-Apr-00 17:46
    sussDmitry Sokolov10-Apr-00 17:46 
    GeneralMy pet peeve... multimon support! Pin
    Tom Spilman9-Apr-00 21:08
    sussTom Spilman9-Apr-00 21:08 

    General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

    Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

    | Advertise | Privacy | Terms of Use | Mobile
    Web01 | 2.8.170117.1 | Last Updated 9 Apr 2000
    Article Copyright 2000 by François Gagné
    Everything else Copyright © CodeProject, 1999-2017
    Layout: fixed | fluid