来源:蜘蛛抓取(WebSpider)
时间:2015-01-30 06:21
标签:
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字符串即可。基本布局如下:
相关教程:最新教程: