MFC程序(基于mfc非模态对话框框的)发布成release版本后,关闭程序后mfc非模态对话框框就出现消失出现消失……

如何让基于对话框的mfc程序启动后自动隐藏对话框_百度知道
如何让基于对话框的mfc程序启动后自动隐藏对话框
提问者采纳
OnInitDialog函数ShowWindow(SW_HIDE)行
其他类似问题
按默认排序
其他2条回答
  1.定器  直观奈使用定器既我框始显示前能用ShowWin  dow(SW_HIDE)其隐藏给间让显示完我隐藏  :  1.OnInitDialog()函数设置定器:(WINDOWS API面响应消息WM_INITDIALOG)  SetTimer(1, 1, NULL);  2.添加处理WM_TIMER消息处理函数OnTimer,添加代码:  if(nIDEvent == 1)  {  DeleteTimer(1);  ShowWindow(SW_HIDE);  }  种缺点显易见使用定器使程序稳定性似乎打折扣;窗口要先显  示效窗口闪消失  2.改变框显示状况  框初始化改变其显示属性让隐藏起调用SetWindowPlacement函数:  BOOL CDialogExDlg::OnInitDialog()  {  CDialog::OnInitDialog();  //DO something  WINDOWPLACEMENT  wp.length=sizeof(WINDOWPLACEMENT);  wp.flags=WPF_RESTORETOMAXIMIZED;  wp.showCmd=SW_HIDE;  SetWindowPlacement(&wp);  return TRUE;  }    需要显示(通响应热键或者托盘图标鼠标消息):  WINDOWPLACEMENT  wp.length=sizeof(WINDOWPLACEMENT);  wp.flags=WPF_RESTORETOMAXIMIZED;  wp.showCmd=SW_SHOW;  SetWindowPlacement(&wp);  效理想:窗口显示屏幕左角并且标题栏要显示需加  代码:  定义员变量CR  OnInitDialog()面:  GetWindowRect(&rect);  需要显示:  SetWindowPos(&wndNoTopMost, wndRc.left, wndRc.top, wndRc.right, wndRc.bottom,  SWP_SHOWWINDOW);  CenterWindow();  即使效差  种弊端程序始运行并且隐藏起原激窗口变非激状态  框显示框自身非激状态  3.绘制窗口  框显示要响应消息WM_PAINT绘制客户区相应消息WM_NCPAINT绘制窗口边框我  窗口第自绘自身隐藏窗口收比较良效由于窗口先画窗口边框所我  仅需处理WM_NCPAINT即代码:  添加WM_NCPAINT处理函数  void CMyDialog::OnNcPaint()  {  static int i = 2;  if(i & 0)  {  i --;  ShowWindow(SW_HIDE);  }  else  CDialog::OnNcPaint();  }  问题:要定义静态变量i且设其值2呢  我要窗口隐藏第所定义变量判断否首显示窗口程序始运行  系统发送(SendMessage)WM_NCPAINT消息程序窗口边框应该显示我没  作任何显示操作窗口隐藏ShowWindow(SW_HIDE)窗口WS_VISIBLE属性掉  继续执行程序检查WS_VISIBLE属性没则显示窗口所发送WM_NCPAINT消  息所我要处理两WM_NCPAINT消息  需要窗口显示调用ShowWindow(SW_SHOW)即  程序执行结原处于激状态窗口能闪两仍处于激状态种处  理式比面式要优越  4.框作窗口  种采用SDI框架主窗口始终隐藏框作主窗口员变量CMainFrame::OnCr  eate()面加入代码:  if(!dlg.Create(IDD_MYDIALOG, this))  {  return –1;  }  dlg.ShowWindow(SW_HIDE);  要显示框用dlg.ShowWindow(SW_SHOW);即注意主窗口定要隐藏否则  框能闪现  隐藏状态栏窗口  面介绍几种检查框家试能已经注意系统状态栏程序启  程序图标闪隐藏框候要隐藏简单:  OnInitDialog()函数面加ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);即  要显示窗口加代码ModifyStyleEx(WS_EX_TOOLWINDOW, WS_EX_APPWINDOW);即窗口扩  展式改  转载
vcool888 已经回答了。
mfc的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
基于对话框的应用程序(续)
下载积分:840
内容提示:道客巴巴精品文档 对话框程序 mfc对话框程序 基于对话框的工程 基于对话框 对话框 使命召唤9 对话框 android 对话框 对话框素材 模态对话框 qq对话框自动关闭
文档格式:PPT|
浏览次数:1|
上传日期: 09:55:22|
文档星级:
该用户还上传了这些文档
下载文档:基于对话框的应用程序(续).PPT
官方公共微信本文欢迎转载,转载请注明:转载自中国学网: []
用户还关注
可能有帮助接触VC之三:MFC基于对话框程序[图] - VC教程 - CND8学院
热门标签:
您的位置: &
接触VC之三:MFC基于对话框程序[图]
  发布日期:日
  000:BOOL CDialogApp::InitInstance()001:{002: // 如果一个运行在 Windows XP 上的应用程序代码指定要003: // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,004: //则需要 InitCommonControls()。否则,将无法创建窗口。005: InitCommonControls();006:007: CWinApp::InitInstance(); //调用父类的InitInstance来进行默认的初始化008:009: AfxEnableControlContainer();010:011:012: CDialogD //建立一个对话框对象,CDialogDlg是我们自定义的对话框类013: m_pMainWnd = & //将本线程(即程序主线程)的主窗口设置为这个对话框014: INT_PTR nResponse = dlg.DoModal(); //有模式地显示这个对话框,直到对话框关闭015: if (nResponse == IDOK) //如果对话框是用确定来关闭的,则016: {017: // TODO:在此放置处理用“确定”来关闭018: //对话框的代码019: }020: else if (nResponse == IDCANCEL) //如果对话框是用取消来关闭的,则021: {022: // TODO:在此放置处理用“取消”来关闭023: //对话框的代码024: }025:026: // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,027: // 而不是启动应用程序的消息泵。028: return FALSE;029:}因为InitInstance()函数的结束返回值是false,应用程序将会立即退出。也就是只显示对话框,当对话框关闭后,程序就会结束了。这时候的InitInstance函数就有点主函数的味道了。
  下面,我们再来看看CDialogDlg类的定义,它是派生于CDialog的。它重写了以下函数 CDialogDlg(CWnd* pParent = NULL); 自定义的构造函数virtual BOOL OnInitDialog(); 对话框初始化消息操作函数afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 系统菜单消息响应函数afx_msg void OnPaint(); 对话框重绘响应函数afx_msg HCURSOR OnQueryDragIcon(); 最小化图标询问响应函数另外,要注意的是在CDialogDlg类的定义体中有这么一个枚举的定义:enum { IDD = IDD_DIALOG_DIALOG };它表明这个CDialogDlg类使用的对话框模板是IDD_DIALOG_DIALOG。CDialogDlg派生层次如下
  CDialogDlg=&CDialog=&CWnd=&CCmdTarget=&CObject
  先来看看构造函数:
CDialogDlg::CDialogDlg(CWnd* pParent /*=NULL*/): CDialog(CDialogDlg::IDD/*这个IDD就是那个枚举的值*/, pParent){&m_hIcon = AfxGetApp()-&LoadIcon(IDR_MAINFRAME);}在这个函数中首先,调用父类CDialog的构造函数来完成默认构造操作。其次,它使用AfxGetApp函数取得全局CWinApp对象theApp的指针,并使用它的LoadIcon函数来取得程序中IDR_MAINFRAME图标资源,并赋给成员变量m_hIcon。这个图标可以在资源视图的ICON中可以的查到和设定。
  在CDialogDlg的实现文件CDialogDlg.cpp中,可以找到如下一段语句
BEGIN_MESSAGE_MAP(CDialogDlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()//}}AFX_MSG_MAPEND_MESSAGE_MAP()这是一段消息映射宏定义段。表示这个对话框类可以响应WM_SYSCOMMAND ,WM_PAINT,WM_QUERYDRAGICON消息。它们的响应函数,系统默认分别为OnSysCommand,OnPaint,OnQueryDragIcon。这段的意思是说,如果CDialogDlg类的对话框接收到WM_SYSCOMMAND消息,就会调用OnSysCommand。其它消息以此为例。不过,这些响应段一般是用不着我们自己手动添写的,是由系统来管理的。你如果要分析一个MFC程序代码,这一块是一个很好的切入点,可以清楚的看到这个程序到底都可以响应什么消息,都有些什么功能。以上这些宏都可以在MSDN中查到。
  下面,我们来一个对于对话框非常重要的函数OnInitDialog(),顾名思义这是一个对话框的初始化函数。在对话框创建之后,第一次显示之前调用。
BOOL CDialogDlg::OnInitDialog(){&CDialog::OnInitDialog(); //执行父类默认的初始化对话框操作&// IDM_ABOUTBOX 必须在系统命令范围内。&ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);&ASSERT(IDM_ABOUTBOX & 0xF000);&// 将“关于...”菜单项添加到系统菜单中。&CMenu* pSysMenu = GetSystemMenu(FALSE); //取得此对话框系统菜单的CMenu对象指针,并赋给pSysM&if (pSysMenu != NULL) //如果不为空,则&{&&CString strAboutM //声明一个字符串对象&&strAboutMenu.LoadString(IDS_ABOUTBOX); //取得资源IDS_ABOUTBOX预定义字符串,可以&&//在资源视图中的String Table查到和设定这个预定义字符串&&if (!strAboutMenu.IsEmpty()) //如果不为空,则&&{&&&pSysMenu-&AppendMenu(MF_SEPARATOR); //向菜单添加一个分隔符&&&pSysMenu-&AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); &&&//向菜单添加这个字符串,并将消息ID设为IDM_ABOUTBOX&&}&}&// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动&// 执行此操作&SetIcon(m_hIcon, TRUE); // 设置大图标&SetIcon(m_hIcon, FALSE); // 设置小图标&// TODO:在此添加额外的初始化代码&return TRUE; // 除非设置了控件的焦点,否则应该返回 TRUE}以上,就是这个基于对话框的MFC应用程序的基础代码。现在可以直接编译运行,来查看效果。 下面,我将在这些代码的基础上来添加功能,来实现一个复制文件的程序。 首先,我要在资源视图的Dialog中,修改IDD_DIALOG_DIALOG模板: 我首先将对话框模板上面的所有按钮和静态文本全部删掉,添加两个文本框和四个按钮。如果要修改控件的ID值,则要右击控件,点选属性,在ID框中输入任意的ID字符串即可。基本布局如下:
相关教程:最新教程:

我要回帖

更多关于 mfc文件选择对话框 的文章

 

随机推荐