Click here to Skip to main content
14,640,670 members
Rate this:
Please Sign up or sign in to vote.
See more:
the problem is until i closed the popup i am unable to access main windows ,so how do i get access both windows at a time without closing popup


Help me out this

What I have tried:

#include "pch.h"
#include "framework.h"
#include "windowsaccess.h"
#include "windowsaccessDlg.h"
#include "afxdialogex.h"
#include "popupserial.h"
#include "serialtaskdemo.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CAboutDlg dialog used for App About

class CAboutDlg : public CDialogEx
{
public:
	CAboutDlg();

// Dialog Data
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_ABOUTBOX };
#endif

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

// Implementation
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
	EnableActiveAccessibility();
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()


// CwindowsaccessDlg dialog

CwindowsaccessDlg::CwindowsaccessDlg(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_WINDOWSACCESS_DIALOG, pParent)
{
	EnableActiveAccessibility();
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}


BEGIN_MESSAGE_MAP(CwindowsaccessDlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON1, &CwindowsaccessDlg::OnBnClickedButton1)
END_MESSAGE_MAP()


// CwindowsaccessDlg message handlers

BOOL CwindowsaccessDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != nullptr)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	// TODO: Add extra initialization here

	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CwindowsaccessDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialogEx::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CwindowsaccessDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

// The system calls this function to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CwindowsaccessDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}


void CwindowsaccessDlg::OnBnClickedButton1()
{
	serialtaskdemo s;//This popup dialog which click main window button ,when dialog is popup i am unable to acces main until i closed ,
	s.DoModal();
	// TODO: Add your control notification handler code here
}
Posted
Updated 27-May-20 18:07pm
v2
Rate this:
Please Sign up or sign in to vote.

Solution 1

Short answer: you don't. A Dialog that is activated by a call to DoModal is a modal dialog, which is designed to prevent access to its parent window. If you want to access the main window while the popup is active then you need a modeless dialog, which acts more like another simple window.

Having said all that I am curious why you want to access your main window while the dialog is active.
   
Comments
Member 14837073 1-Jun-20 0:35am
   
For serial port Monitoring ,while monitoring the port i should work with main window
Richard MacCutchan 1-Jun-20 3:39am
   
I am not sure what that has to do with showing a Dialog box. You need to understand what a Dialog is designed for. It should open for interaction with the user, to show, or collect, information and then close. It is not designed to remain open for long periods. You should look at your application's design as it may be that a Dialog is not what is needed here.
Member 14837073 1-Jun-20 5:42am
   
Yes ,i got the output what i expected through the solutions 3
Richard MacCutchan 1-Jun-20 7:34am
   
I did suggest a modeless dialog 5 days ago.
Member 14837073 1-Jun-20 7:40am
   
Thank you Richard Macutchan
Rate this:
Please Sign up or sign in to vote.

Solution 2

In addition to Richard's answer, maybe you just need your popup to be always on top, without being modal:
c++ - Always-in-front dialogs - Stack Overflow[^]
   
Rate this:
Please Sign up or sign in to vote.

Solution 3

Inspite of doing this
serialtaskdemo s;
s.DoModal();

U can do it like
serialtaskdemo s;
s.create(IDD_SOMEID);
s.ShowWindow(SW_SHOW);
   
Comments
Member 14837073 1-Jun-20 0:33am
   
Thank you so much its help me lot
and its working fine while copying code
i am new here and learning programming ,you guys are really helpful
Thank you once again

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)




CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100