我想在dialog出现后,立即显示一个MessageBox提示框,该怎么做?给个思路

时间:2023-01-17 23:49:29
我想在dialog出现后,立即显示一个MessageBox提示框,该怎么做?给个思路

我在OnInitDialog里加MessageBox,结果是先显示MessageBox,确定后才显示dialog.我希望的是先显示dialog,然后再显示MessageBox,该怎么做?

22 个解决方案

#1


domodal 后调用

#2


我是新手,但我想Dialog的创建需要一个构造函数
在这个构造函数里面调用MessageBox行不?

#3


在OnShowWindow
里面先调用CDialoe::OnShowWindow
再MessageBox
我想这样可以了吧

#4


在构造函数里面用应该是不行的.如果是有模对话框的话,应该在domodal之后加上messagebox,如果是无模对话框的话,应该在OnShowWindow函数之后再调用messagebox

#5


我试过了..
在domodal后调用,只要是在return之前,同样是先显示MessageBox.在OnShowWindow里也是一样的.在OnPaint里可以实现,但每次重绘它都会显示....
还有没有好的解决方法?

#6


顶上去...

#7


在OnInitialDialog中Post一个消息,在消息中显示就行了 

too simple

#8


没空理你,重载一下OnInitialDialog()就行了,在里边添加你想执行的任何代码

#9


用OnPaint函数,设置一个标志例如:
flag 在构造函数中初始化flag =0;
if(flag ==1)
{
 MessageBox();
 flag =0;
}

#10


TO fantuan(饭团) 

重载可以吗?问题是dialog是domodal出来的,MessageBox也是一个domodal的对话框,想两个一起出现,在OnInitialDialog里直接显示能行吗?

#11


用定时器做

#12


恩,用定时器应该可以。

#13


oninitialdialog 里面写就可以了 呵呵

#14


MARK

#15


oninitialdialog,,,,,,,,, 我支持这个

#16


#define WM_MYMESSAGEBOX WM_USER+100

//.h
afx_msg void OnMyMessageBox();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
//.cpp
BEGIN_MESSAGE_MAP(CDialogMessageboxDlg, CDialog)
//{{AFX_MSG_MAP(CDialogMessageboxDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(WM_MYMESSAGEBOX,OnMyMessageBox)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CDialogMessageboxDlg::OnInitDialog()
{

CDialog::OnInitDialog();
         ..................
// TODO: Add extra initialization here
PostMessage(WM_MYMESSAGEBOX);
return TRUE;  // return TRUE  unless you set the focus to a control
}

void CDialogMessageboxDlg::OnMyMessageBox()
{
MessageBox("Kill me!");
}

#17


PostMessage heihei

#18


在OnInitDialog()中加入
MessageBox("");
就好了

#19


支持OnInitDialog()里写MessageBox的自己试试...

定时器也有问题,就是在规定时间内如果dialog都没有启动,那还不会先弹出MessageBox.本人比较赞同PostMessage...

#20


根据fertiland(zero)的代码问题解决....
再次感谢大家的讨论!!!

#21


mark

#22


太感谢了,提供这样的思路

#1


domodal 后调用

#2


我是新手,但我想Dialog的创建需要一个构造函数
在这个构造函数里面调用MessageBox行不?

#3


在OnShowWindow
里面先调用CDialoe::OnShowWindow
再MessageBox
我想这样可以了吧

#4


在构造函数里面用应该是不行的.如果是有模对话框的话,应该在domodal之后加上messagebox,如果是无模对话框的话,应该在OnShowWindow函数之后再调用messagebox

#5


我试过了..
在domodal后调用,只要是在return之前,同样是先显示MessageBox.在OnShowWindow里也是一样的.在OnPaint里可以实现,但每次重绘它都会显示....
还有没有好的解决方法?

#6


顶上去...

#7


在OnInitialDialog中Post一个消息,在消息中显示就行了 

too simple

#8


没空理你,重载一下OnInitialDialog()就行了,在里边添加你想执行的任何代码

#9


用OnPaint函数,设置一个标志例如:
flag 在构造函数中初始化flag =0;
if(flag ==1)
{
 MessageBox();
 flag =0;
}

#10


TO fantuan(饭团) 

重载可以吗?问题是dialog是domodal出来的,MessageBox也是一个domodal的对话框,想两个一起出现,在OnInitialDialog里直接显示能行吗?

#11


用定时器做

#12


恩,用定时器应该可以。

#13


oninitialdialog 里面写就可以了 呵呵

#14


MARK

#15


oninitialdialog,,,,,,,,, 我支持这个

#16


#define WM_MYMESSAGEBOX WM_USER+100

//.h
afx_msg void OnMyMessageBox();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
//.cpp
BEGIN_MESSAGE_MAP(CDialogMessageboxDlg, CDialog)
//{{AFX_MSG_MAP(CDialogMessageboxDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(WM_MYMESSAGEBOX,OnMyMessageBox)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CDialogMessageboxDlg::OnInitDialog()
{

CDialog::OnInitDialog();
         ..................
// TODO: Add extra initialization here
PostMessage(WM_MYMESSAGEBOX);
return TRUE;  // return TRUE  unless you set the focus to a control
}

void CDialogMessageboxDlg::OnMyMessageBox()
{
MessageBox("Kill me!");
}

#17


PostMessage heihei

#18


在OnInitDialog()中加入
MessageBox("");
就好了

#19


支持OnInitDialog()里写MessageBox的自己试试...

定时器也有问题,就是在规定时间内如果dialog都没有启动,那还不会先弹出MessageBox.本人比较赞同PostMessage...

#20


根据fertiland(zero)的代码问题解决....
再次感谢大家的讨论!!!

#21


mark

#22


太感谢了,提供这样的思路