当前位置:网站首页>MFC dynamically creates dialog boxes and changes the size and position of controls

MFC dynamically creates dialog boxes and changes the size and position of controls

2022-07-06 06:18:00 Laobai 436196571

1、 Dynamically create dialog

void CXXX_DEMODlg::OnBnClickedBtntest()
{
    
	if(dlg_num==0)// Open only once 
	{
    
		DLG_TEST  *pDlg=new DLG_TEST;
		pDlg->Create(IDD_DLG_TEST, this);// Always at the top 
		//pDlg->Create(IDD_DLG_TEST, GetDesktopWindow());
		pDlg->ShowWindow(SW_SHOW);
		dlg_num+=1;
	}
}

2、 Delete pointer in WM_NCDESTROY in delete this

void DLG_TEST::OnBnClickedCancel()
{
    
	// TODO:  Add control notification handler code here 
	dlg_num-=1;
	OnCancel();
}
void DLG_TEST::OnNcDestroy()
{
    
	CDialog::OnNcDestroy();

	// TODO:  Add message handler code here 
	delete this;
}

Reference resources :
MFC Click button , Another dialog box pops up

CWnd Class MoveWindow() or SetWindowPos() You can change the size and position of the control .

void MoveWindow(int x,int y,int nWidth,int nHeight);
void MoveWindow(LPCRECT lpRect);
The first usage needs to give the new coordinates and width of the control 、 Height ;
The second usage gives the storage location CRect object ;
example :

CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); // Get control pointer ,IDC_EDIT1 For control ID Number 
pWnd->MoveWindow( CRect(0,0,100,100) ); // Display a width in the upper left corner of the window 100、 high 100 Edit control for 

SetWindowPos() Functions are more flexible , It is mostly used when only the position of the control is modified and the size remains unchanged, or when only the size is modified and the position remains unchanged :
BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);
I can't use the first parameter , General set to NULL;
x、y Control location ;cx、cy Control width and height ;
nFlags Common values :
SWP_NOZORDER: Ignore the first parameter :
SWP_NOMOVE: Ignore x、y, Keep the position unchanged ;
SWP_NOSIZE: Ignore cx、cy, Keep the size unchanged ;
example :

CWnd *pWnd;pWnd = GetDlgItem( IDC_BUTTON1 ); // Get control pointer ,IDC_BUTTON1 For control ID Number 
pWnd->SetWindowPos( NULL,50,80,0,0,SWP_NOZORDER | SWP_NOSIZE ); // Move the button to the window (50,80) It's about 
pWnd = GetDlgItem( IDC_EDIT1 );
pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER | SWP_NOMOVE ); // Set the size of the edit control to (100,80), Position the same 
pWnd = GetDlgItem( IDC_EDIT1 );
pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER ); // The size and position of the editing control are changed. The above method is also applicable to all kinds of windows .
原网站

版权声明
本文为[Laobai 436196571]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060609344908.html