To make a non-modal or other dialog: Add Resource - Dialog Change the IDD and the title of the dialog Set Tool Window to True for non-modal Right click it, Add Class Change base to CDialog Remove DECLARE_DYNAMIC from header and IMPLEMENT_DYNAMIC from .cpp Remove afxdialogex.h include Change CDialog to CBaseDlg in .h and .cpp Under DoDataExchange add: virtual BOOL OnInitDialog(); virtual void OnOK(); virtual void OnCancel(); And for non-modal: virtual void PostNcDestroy(); virtual BOOL PreTranslateMessage(MSG* pMsg); The latter is needed if there is any edit box Also add a CloseWindow() as public if it is necessary to close the window externally It can call OnOK, OnCancel, or DestroyWindow as needed. In nonmodal, add to construction: mNonModal = true; --------------------- BOOL CHoleFinder::OnInitDialog() { CBaseDlg::OnInitDialog(); SetDefID(45678); // Disable OK from being default button for non-modal return TRUE; } void CHoleFinder::OnOK() { OnCancel(); } // Inform managing module of closing, or store placement and NULL out pointer // right here void CHoleFinder::OnCancel() { //mWinApp->GetScreenShotPlacement(); //mWinApp->mScreenShotDialog = NULL; DestroyWindow(); } void CHoleFinder::PostNcDestroy() { delete this; CDialog::PostNcDestroy(); } BOOL CHoleFinder::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) SetFocus(); return CDialog::PreTranslateMessage(pMsg); } ---------------------- Add class pointer and placement to managing module and functions to open and get placement Be sure to set the right IDD_ in the Create call. Change font to Microsoft Sans Serif (it will change Use System font to False) XXX Commit changes and push for editing at 120 DPI Switch to 125% for editing at 120 DPI NOn-modal dialogs have a problem with double validation of edit fields and you need to use BaseDlg MinMaxInt and MinMaxFloat functions with the ID of the field and a descriptor text. MinMaxFloat(IDC_EDIT_ACS_BEAM_SHIFT, m_fBeamShift, -10.f, 10.f, "Beam shift for centering");