# CodeGuru Technical FAQs > CodeGuru Individual FAQs >  MFC Dialog: How to set the initial position of a modal dialog?

## laitinen

*Q:* How to set the initial position of a modal dialog?

*A:* There are at least two possible answers to this question. Both answers I will provide here handles the WM_INITDIALOG message.

First add a handler for the WM_INITDIALOG message to your dialog box class (this can for instance be done by using the ClassWizzard if you use a a version of VC++ prior to VC++ 2002). The message handling function for a WM_INITDIALOG message is the OnInitDialog function. 

The following implementation positions the dialog at the screen coordinates x,y inside the dialog class itself:


```
BOOL CYourDlg::OnInitDialog()
{
     CDialog::OnInitDialog();
     // Calculate your x and y coordinates of the upper-left corner 
     // of the dialog (in screen coordinates) based on some logic

     SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);

     return TRUE;
}
```

Another possibility is to set the position when you create the dialog. To achieve this you have to add a public CPoint member variable to your dialog. This variable will hold the dialog's initial position. 



```
class CYourDialog : public CDialog
{
     public:
          CPoint m_point;
     //....
};
```

Then you use almost the same implementation of the OnInitDialog as above. The only difference is that you use the x and y coordinates from m_point.



```
BOOL CYourDlg::OnInitDialog()

     CDialog::OnInitDialog();
   
     SetWindowPos(NULL, m_point.x, m_point.y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);

     return TRUE;
}
```

Now, when you create the dialog you set the m_point member to what suits you:



```
     //Calculate x and y (screen coordinates)
     int x = ...;
     int y = ...;

     CYourDialog dlg;
     dlg.m_point = CPoint( x , y ); 

     if(dlg:DoModal() == IDOK)
     {
          //...
     }
     else
     {
          //...
     }
```

----------

