MFC编程中,原本A在前,如何将B窗体设置在A窗体前显示的问题~~ 点击按钮,隐藏SELECT窗口,再显示PASSDLG窗口即可啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没有父子关系、没有置顶窗口(WS_EX_TOPMOST)的情况下直接CWnd::SetForegroundWindow()就可以了 可以调用SetForegroundWindow()或者通过设置窗口置顶也可以吧,不过SELECT要是非模态的,不然显示了PASSDLG也操作不了 是这样的,本来这个程序是PASSDLG先显示的,后来我插入了一个SELECT窗体,想让SELECT先显示,并通过一个按钮响应再让PASSDLG显示出来。 void 按钮被点击(){ if(PASSDLG.IsIconic()) { //窗口被最小化了,发送消息还原 PASSDLG.SendMessage(WM_SYSCOMMAND,SC_RESTORE,NULL); } if(!PASSDLG.IsWindowVisible()) { //窗口被隐藏了,用ShowWindow显示 PASSDLG.ShowWindow(SW_SHOW); } //推向前台并激活该窗口 PASSDLG.SetForegroundWindow();} MFC中文说明手册CWnd::SetForegroundWindowBOOL SetForegroundWindow( );返回值:如果函数成功,则返回非零值;否则返回0。说明:这个函数将创建窗口的线程推向前台并激活该窗口。键盘输入被定向到这个窗口,并且将向用户显示不同的视觉提示。前台窗口是指用户当前工作的窗口。前台窗口仅针对顶层窗口而言(框架窗口或对话框)。 void 按钮被点击(){ if(PASSDLG.IsIconic()) { //窗口被最小化了,发送消息还原 PASSDLG.SendMessage(WM_SYSCOMMAND,SC_RESTORE,NULL); } if(!PASSDLG.IsWindowVisible()) { //窗口被隐藏了,用ShowWindow显示 PASSDLG.ShowWindow(SW_SHOW); } //推向前台并激活该窗口 PASSDLG.SetForegroundWindow();}void 按钮被点击(){ if(PASSDLG.IsIconic()) { //窗口被最小化了,发送消息还原 PASSDLG.SendMessage(WM_SYSCOMMAND,SC_RESTORE,NULL); } if(!PASSDLG.IsWindowVisible()) { //窗口被隐藏了,用ShowWindow显示 PASSDLG.ShowWindow(SW_SHOW); } //推向前台并激活该窗口 PASSDLG.SetForegroundWindow();}我这个按钮是在SELECT窗体上的,具体功能是这样的:PASSDLG是一个输入用户名密码的登录界面,SELECT是选择登录身份的登录界面,原本程序是直接显示输入用户名密码的登陆界面,没有选择身份的界面,现在我加入一个SELECT窗体但是,问题是编译连接后还是PASSDLG界面先显示,现在我想让SELECT先显示出来,选择完身份后再显示出用户名密码(PASSDLG)界面。 我MFC很水之前看这个PASSDLG的窗体初始化好像是oninitdialog()完成的,我想能不能把PASSDLG的初始化删除掉,改到SELECT上面,或者别的办法? 在PASSDLG的APP类的InitInstance()函数里:CSELECTDLG dlg;dlg.DoModal(); CSELECTDLG dlg;if(dlg.DoModal() != IDOK) return FALSE; 问题是PASSDLG.CPP里面没有这个函数代码如下:// PASSDLG.cpp : implementation file//#include "stdafx.h"#include "cyj.h"#include "PASSDLG.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// PASSDLG dialogPASSDLG::PASSDLG(CWnd* pParent /*=NULL*/): CDialog(PASSDLG::IDD, pParent){ //{{AFX_DATA_INIT(PASSDLG) m_password = _T(""); m_user = _T(""); //}}AFX_DATA_INIT}void PASSDLG::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(PASSDLG) DDX_Text(pDX, IDC_PASSWORD, m_password); DDX_Text(pDX, IDC_USER, m_user); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(PASSDLG, CDialog)//{{AFX_MSG_MAP(PASSDLG)ON_WM_TIMER()//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// PASSDLG message handlersvoid PASSDLG::OnTimer(UINT nIDEvent) {t--;CString str;str.Format("登陆窗口%d秒后自动关闭",t);SetWindowText(str);if(t==-1){ KillTimer(1); OnCancel();}CDialog::OnTimer(nIDEvent);}BOOL PASSDLG::OnInitDialog() { CDialog::OnInitDialog(); UpdateData(FALSE); SetTimer(1,1000,NULL); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE} 不是这个类,是PASSAppBOOL PASSApp::InitInstance()实在找不到你就查找InitInstance(然后写上CSELECTDLG dlg;if(dlg.DoModal() != IDOK) return FALSE; directdraw从窗口模式切换到全屏时,IE图标也会不断显示在屏幕上 如何在c++中定义个按钮(button)。不使用MFC。 我新开发了两个软件包:请大家多多指教 关于 so_reuseaddr 和Time_wai的疑问 关于使用SetWindowLong改变一个控件的STYLE的问题。。。 初学数据库编程,有个问题请教 复杂的调用问题 数据库连接断开如何获知? 如何将pDC保存为.bmp文件? 如何让显示的小位图融入背景图中 C/S 登录窗口设计 请问在CAxWindow实现在webbrowser中如果扩展 IOleCommandTarget
直接CWnd::SetForegroundWindow()就可以了
或者通过设置窗口置顶也可以吧,不过SELECT要是非模态的,不然显示了PASSDLG也操作不了
是这样的,本来这个程序是PASSDLG先显示的,后来我插入了一个SELECT窗体,想让SELECT先显示,并通过一个按钮响应再让PASSDLG显示出来。
void 按钮被点击()
{
if(PASSDLG.IsIconic())
{
//窗口被最小化了,发送消息还原
PASSDLG.SendMessage(WM_SYSCOMMAND,SC_RESTORE,NULL);
}
if(!PASSDLG.IsWindowVisible())
{
//窗口被隐藏了,用ShowWindow显示
PASSDLG.ShowWindow(SW_SHOW);
}
//推向前台并激活该窗口
PASSDLG.SetForegroundWindow();
}
这个函数将创建窗口的线程推向前台并激活该窗口。键盘输入被定向到这个窗口,并且将向用户显示不同的视觉提示。前台窗口是指用户当前工作的窗口。前台窗口仅针对顶层窗口而言(框架窗口或对话框)。
{
if(PASSDLG.IsIconic())
{
//窗口被最小化了,发送消息还原
PASSDLG.SendMessage(WM_SYSCOMMAND,SC_RESTORE,NULL);
}
if(!PASSDLG.IsWindowVisible())
{
//窗口被隐藏了,用ShowWindow显示
PASSDLG.ShowWindow(SW_SHOW);
}
//推向前台并激活该窗口
PASSDLG.SetForegroundWindow();
}
void 按钮被点击()
{
if(PASSDLG.IsIconic())
{
//窗口被最小化了,发送消息还原
PASSDLG.SendMessage(WM_SYSCOMMAND,SC_RESTORE,NULL);
}
if(!PASSDLG.IsWindowVisible())
{
//窗口被隐藏了,用ShowWindow显示
PASSDLG.ShowWindow(SW_SHOW);
}
//推向前台并激活该窗口
PASSDLG.SetForegroundWindow();
}
我这个按钮是在SELECT窗体上的,具体功能是这样的:PASSDLG是一个输入用户名密码的登录界面,SELECT是选择登录身份的登录界面,原本程序是直接显示输入用户名密码的登陆界面,没有选择身份的界面,现在我加入一个SELECT窗体但是,问题是编译连接后还是PASSDLG界面先显示,现在我想让SELECT先显示出来,选择完身份后再显示出用户名密码(PASSDLG)界面。
我MFC很水之前看这个PASSDLG的窗体初始化好像是oninitdialog()完成的,我想能不能把PASSDLG的初始化删除掉,改到SELECT上面,或者别的办法?
dlg.DoModal();
CSELECTDLG dlg;
if(dlg.DoModal() != IDOK)
return FALSE;
问题是PASSDLG.CPP里面没有这个函数
代码如下:
// PASSDLG.cpp : implementation file
//#include "stdafx.h"
#include "cyj.h"
#include "PASSDLG.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// PASSDLG dialog
PASSDLG::PASSDLG(CWnd* pParent /*=NULL*/)
: CDialog(PASSDLG::IDD, pParent)
{
//{{AFX_DATA_INIT(PASSDLG)
m_password = _T("");
m_user = _T("");
//}}AFX_DATA_INIT
}
void PASSDLG::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(PASSDLG)
DDX_Text(pDX, IDC_PASSWORD, m_password);
DDX_Text(pDX, IDC_USER, m_user);
//}}AFX_DATA_MAP
}BEGIN_MESSAGE_MAP(PASSDLG, CDialog)
//{{AFX_MSG_MAP(PASSDLG)
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// PASSDLG message handlersvoid PASSDLG::OnTimer(UINT nIDEvent)
{t--;
CString str;
str.Format("登陆窗口%d秒后自动关闭",t);
SetWindowText(str);
if(t==-1)
{
KillTimer(1);
OnCancel();
}CDialog::OnTimer(nIDEvent);
}BOOL PASSDLG::OnInitDialog()
{
CDialog::OnInitDialog();
UpdateData(FALSE);
SetTimer(1,1000,NULL);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL PASSApp::InitInstance()
实在找不到你就查找InitInstance(
然后写上CSELECTDLG dlg;
if(dlg.DoModal() != IDOK)
return FALSE;